• Spring Boot中Spring MVC的基本配置讲解与实战(包括静态资源配置,拦截器配置,文件上传配置及实战 附源码)


    创作不易 觉得有帮助请点赞关注收藏

    Spring MVC的定制配置需要配置类实现WebMvcConfigurer接口,并在配置类中使用@EnableWebMvc注解来开启对Spring MVC的配置支持,这样开发者就可以重写接口方法完成常用的配置

    静态资源配置

    应用程序的静态资源(CSS JS 图片)等需要直接访问,这时需要开发者在配置类重写public void addResourceHandlers(ResourceHandlerRegitry registry)接口方法来实现 部分代码如下

    1. import org.springframework.context.annotation.Bean;
    2. import org.springframework.context.annotation.ComponentScan;
    3. import org.springframework.context.annotation.Configuration;
    4. import org.springframework.context.annotation.EnableWebMvc;
    5. import org.springframework.context.annotation.ResourceHandlerRegistry;
    6. import org.springframework.context.annotation.WebMvcConfigurer;
    7. import org.springframework.context.annotation.InternalResourceViewResolver;
    8. @Configuration
    9. @EnableWebMvc
    10. @ComponentScan(basePackages={"controller","service"}
    11. public class SpringMVCConfig implements WebMvcConfigurer{
    12. @Bean
    13. }
    14. @Override
    15. public class addResourceHandlers(ResourceHandlerRegistry registry){
    16. }
    17. }

    根据上述配置 可以直接访问Web应用目录下html/目录下的静态资源

    拦截器配置

    Spring的拦截器(Interceptor)实现对每一个请求处理前后进行相关的业务处理,类似于Servlet的过滤器,开发者也可以自定义Spring的拦截器

    文件上传配置

    文件上传是应用中经常使用的功能,Spring MVC通过配置一个MultipartResolver来上传文件,在Spring MVC的控制器中,可以通过MultipartFile myfile来接收单个文件上传,通过Listmyfiles来接受多个文件上传

    下面通过一个实例讲解如何上传多个文件

    1:创建Web应用并导入相关的JAR包

    创建Web应用ch2_6

    2:创建多文件选择页面

    在WebContent目录下创建JSP页面multFiles.jsp 具体代码如下

    1. <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    2. <!DOCTYPE html>
    3. <html>
    4. <head>
    5. <meta charset="UTF-8">
    6. <title>Insert title here</title>
    7. </head>
    8. <body>
    9. <form action="${pageContext.request.contextPath }/multifile" method="post" enctype="multipart/form-data">
    10. 选择文件1:<input type="file" name="myfile"> <br>
    11. 文件描述1:<input type="text" name="description"> <br>
    12. 选择文件2:<input type="file" name="myfile"> <br>
    13. 文件描述2:<input type="text" name="description"> <br>
    14. 选择文件3:<input type="file" name="myfile"> <br>
    15. 文件描述3:<input type="text" name="description"> <br>
    16. <input type="submit" value="提交">
    17. </form>
    18. </body>
    19. </html>

    效果如下

     3:创建POJO类

    在src目录下创建pojo包,并创建实体类MultFileDomain 具体代码如下

    1. package pojo;
    2. import java.util.List;
    3. import org.springframework.web.multipart.MultipartFile;
    4. public class MultiFileDomain {
    5. private List<String> description;
    6. private List<MultipartFile> myfile;
    7. public List<String> getDescription() {
    8. return description;
    9. }
    10. public void setDescription(List<String> description) {
    11. this.description = description;
    12. }
    13. public List<MultipartFile> getMyfile() {
    14. return myfile;
    15. }
    16. public void setMyfile(List myfile) {
    17. this.myfile = myfile;
    18. }
    19. }

    4:创建控制器类

    src目录下创建controller包 并创建控制器类MutiFilesController 具体代码如下

    1. package controller;
    2. import java.io.File;
    3. import java.util.List;
    4. import javax.servlet.http.HttpServletRequest;
    5. import org.apache.commons.logging.Log;
    6. import org.apache.commons.logging.LogFactory;
    7. import org.springframework.stereotype.Controller;
    8. import org.springframework.web.bind.annotation.ModelAttribute;
    9. import org.springframework.web.bind.annotation.RequestMapping;
    10. import org.springframework.web.multipart.MultipartFile;
    11. import pojo.MultiFileDomain;
    12. @Controller
    13. public class MutiFilesController {
    14. // 得到一个用来记录日志的对象,这样打印信息时,能够标记打印的是哪个类的信息
    15. private static final Log logger = LogFactory.getLog(MutiFilesController.class);
    16. /**
    17. * 多文件上传
    18. */
    19. @RequestMapping("/multifile")
    20. public String multiFileUpload(@ModelAttribute MultiFileDomain multiFileDomain, HttpServletRequest request){
    21. String realpath = request.getServletContext().getRealPath("uploadfiles");
    22. //上传到eclipse-workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/ch2_6/uploadfiles
    23. File targetDir = new File(realpath);
    24. if(!targetDir.exists()){
    25. targetDir.mkdirs();
    26. }
    27. List<MultipartFile> files = multiFileDomain.getMyfile();
    28. for (int i = 0; i < files.size(); i++) {
    29. MultipartFile file = files.get(i);
    30. String fileName = file.getOriginalFilename();
    31. File targetFile = new File(realpath,fileName);
    32. //上传
    33. try {
    34. file.transferTo(targetFile);
    35. } catch (Exception e) {
    36. e.printStackTrace();
    37. }
    38. }
    39. logger.info("成功");
    40. return "showMulti";
    41. }
    42. }

    5:创建Web于Spring MVC配置类

    Webconfig类代码如下

    1. package config;
    2. import javax.servlet.ServletContext;
    3. import javax.servlet.ServletException;
    4. import javax.servlet.ServletRegistration.Dynamic;
    5. import org.springframework.web.WebApplicationInitializer;
    6. import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
    7. import org.springframework.web.servlet.DispatcherServlet;
    8. public class WebConfig implements WebApplicationInitializer{
    9. @Override
    10. public void onStartup(ServletContext arg0) throws ServletException {
    11. AnnotationConfigWebApplicationContext ctx
    12. = new AnnotationConfigWebApplicationContext();
    13. ctx.register(SpringMVCConfig.class);//注册Spring MVC的Java配置类SpringMVCConfig
    14. ctx.setServletContext(arg0);//和当前ServletContext关联
    15. /**
    16. * 注册Spring MVC的DispatcherServlet
    17. */
    18. Dynamic servlet = arg0.addServlet("dispatcher", new DispatcherServlet(ctx));
    19. servlet.addMapping("/");
    20. servlet.setLoadOnStartup(1);
    21. }
    22. }

    SpringMVCConfig类代码如下

    1. package config;
    2. import org.springframework.context.annotation.Bean;
    3. import org.springframework.context.annotation.ComponentScan;
    4. import org.springframework.context.annotation.Configuration;
    5. import org.springframework.web.multipart.MultipartResolver;
    6. import org.springframework.web.multipart.commons.CommonsMultipartResolver;
    7. import org.springframework.web.servlet.config.annotation.EnableWebMvc;
    8. import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
    9. import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
    10. import org.springframework.web.servlet.view.InternalResourceViewResolver;
    11. @Configuration
    12. @EnableWebMvc
    13. @ComponentScan(basePackages = {"controller","service"})
    14. public class SpringMVCConfig implements WebMvcConfigurer {
    15. /**
    16. * 配置视图解析器
    17. */
    18. @Bean
    19. public InternalResourceViewResolver getViewResolver() {
    20. InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
    21. viewResolver.setPrefix("/WEB-INF/jsp/");
    22. viewResolver.setSuffix(".jsp");
    23. return viewResolver;
    24. }
    25. /**
    26. * 配置静态资源
    27. */
    28. @Override
    29. public void addResourceHandlers(ResourceHandlerRegistry registry) {
    30. registry.addResourceHandler("/html/**").addResourceLocations("/html/");
    31. //addResourceHandler指的是对外暴露的访问路径
    32. //addResourceLocations指的是静态资源存放的位置
    33. }
    34. /**
    35. * MultipartResolver配置
    36. */
    37. @Bean
    38. public MultipartResolver multipartResolver() {
    39. CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
    40. //设置上传文件的最大值,单位为字节
    41. multipartResolver.setMaxUploadSize(5400000);
    42. //设置请求的编码格式,默认为iso-8859-1
    43. multipartResolver.setDefaultEncoding("UTF-8");
    44. return multipartResolver;
    45. }
    46. }

    6:创建成功显示页面

    在WEB-INF目录下 创建多文件上传成功显示页面showMulti.jsp 代码如下

    1. <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    2. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    3. <!DOCTYPE html>
    4. <html>
    5. <head>
    6. <meta charset="UTF-8">
    7. <title>Insert title here</title>
    8. </head>
    9. <body>
    10. <table>
    11. <tr>
    12. <td>详情</td><td>文件名</td>
    13. </tr>
    14. <!-- 同时取两个数组的元素 -->
    15. <c:forEach items="${multiFileDomain.description}" var="description" varStatus="loop">
    16. <tr>
    17. <td>${description}</td>
    18. <td>${multiFileDomain.myfile[loop.count-1].originalFilename}</td>
    19. </tr>
    20. </c:forEach>
    21. <!-- fileDomain.getMyfile().getOriginalFilename() -->
    22. </table>
    23. </body>
    24. </html>

    效果如下 当上传文件成功时 详情和文件名有会对应的输出 

     7:发布并运行应用

    发布应用到Tomcat服务器并启动它,然后访问http://localhost:8080/ch2_6/multiFiles.jsp运行多文件选择页面即可

  • 相关阅读:
    【校招VIP】高校陌生人活动|产品的竞品和需求分析
    20221126今天的世界发生了什么
    关于Http和Https
    flex加 grid 布局笔记
    迷你无人车 Gazebo 仿真
    【JVM】JVisualVM的介绍、使用和GC过程
    【计网】一些问题
    使用Sinon和Rewire对JavaScript中的私有方法进行单元测试
    QtC++与QToolButton详解
    python基于django的花卉种植技术交流系统
  • 原文地址:https://blog.csdn.net/jiebaoshayebuhui/article/details/127657494