经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Java » 查看文章
Spring MVC 全注解配置 (十一)
来源:cnblogs  作者:黄浩#  时间:2018/11/8 9:57:06  对本文有异议

完整的项目案例: springmvc.zip

目录

 

实例

项目结构:

 

父级的pom配置:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6.  
  7. <groupId>edu.nf</groupId>
  8. <artifactId>springmvc</artifactId>
  9. <version>1.0-SNAPSHOT</version>
  10. <modules>
  11. <module>ch01</module>
  12. <module>ch02</module>
  13. <module>ch03</module>
  14. <module>ch04</module>
  15. <module>ch05</module>
  16. <module>ch06</module>
  17. <module>ch07</module>
  18. <module>ch08</module>
  19. <module>ch09</module>
  20. <module>ch10</module>
  21. <module>ch11</module>
  22. </modules>
  23. <packaging>pom</packaging>
  24.  
  25. <properties>
  26. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  27. <java.version>1.8</java.version>
  28. <maven.compiler.source>1.8</maven.compiler.source>
  29. <maven.compiler.target>1.8</maven.compiler.target>
  30. <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
  31. <!-- spring版本 -->
  32. <spring.version>5.1.1.RELEASE</spring.version>
  33. <servlet.version>4.0.1</servlet.version>
  34. </properties>
  35.  
  36. <dependencies>
  37. <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
  38. <dependency>
  39. <groupId>javax.servlet</groupId>
  40. <artifactId>javax.servlet-api</artifactId>
  41. <version>${servlet.version}</version>
  42. <scope>provided</scope>
  43. </dependency>
  44. <!-- Spring mvc依赖,会传递依赖context、core等核心包-->
  45. <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
  46. <dependency>
  47. <groupId>org.springframework</groupId>
  48. <artifactId>spring-webmvc</artifactId>
  49. <version>${spring.version}</version>
  50. </dependency>
  51. </dependencies>
  52.  
  53. <!-- war插件 -->
  54. <build>
  55. <plugins>
  56. <plugin>
  57. <groupId>org.apache.maven.plugins</groupId>
  58. <artifactId>maven-war-plugin</artifactId>
  59. <version>2.2</version>
  60. <configuration>
  61. <warSourceDirectory>web</warSourceDirectory>
  62. <!-- 指定web.xml路径 -->
  63. <!--<webXml>web\WEB-INF\web.xml</webXml>-->
  64. <!-- 打包时忽略web.xml文件-->
  65. <failOnMissingWebXml>false</failOnMissingWebXml>
  66. </configuration>
  67. </plugin>
  68. </plugins>
  69. </build>
  70.  
  71. </project>
View Code

子级的pom(ch11)配置:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <parent>
  6. <artifactId>springmvc</artifactId>
  7. <groupId>edu.nf</groupId>
  8. <version>1.0-SNAPSHOT</version>
  9. </parent>
  10. <modelVersion>4.0.0</modelVersion>
  11. <artifactId>ch11</artifactId>
  12. <packaging>war</packaging>
  13.  
  14. <dependencies>
  15. <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
  16. <dependency>
  17. <groupId>com.fasterxml.jackson.core</groupId>
  18. <artifactId>jackson-databind</artifactId>
  19. <version>2.9.6</version>
  20. </dependency>
  21. <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
  22. <dependency>
  23. <groupId>commons-fileupload</groupId>
  24. <artifactId>commons-fileupload</artifactId>
  25. <version>1.3.1</version>
  26. </dependency>
  27. <!-- https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator -->
  28. <dependency>
  29. <groupId>org.hibernate.validator</groupId>
  30. <artifactId>hibernate-validator</artifactId>
  31. <version>6.0.13.Final</version>
  32. </dependency>
  33. </dependencies>
  34.  
  35. </project>
View Code

取代web.xml的配置类

 

  1. package edu.nf.ch11.config;
  2. import edu.nf.ch11.filter.EncodingFilter;
  3. import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
  4. import javax.servlet.DispatcherType;
  5. import javax.servlet.ServletContext;
  6. import javax.servlet.ServletException;
  7. import java.util.EnumSet;
  8. /**
  9. * @author wangl
  10. * @date 2018/11/6
  11. * 取代web.xml
  12. */
  13. public class WebInit extends AbstractAnnotationConfigDispatcherServletInitializer {
  14. @Override
  15. protected Class<?>[] getRootConfigClasses() {
  16. return null;
  17. }
  18. /**
  19. * 指定mvc的核心配置类
  20. * @return
  21. */
  22. @Override
  23. protected Class<?>[] getServletConfigClasses() {
  24. return new Class[]{WebConfig.class};
  25. }
  26. /**
  27. * 等同于将DispatcherServlet的url-pattern设置为"/"
  28. * @return
  29. */
  30. @Override
  31. protected String[] getServletMappings() {
  32. return new String[]{"/"};
  33. }
  34. /**
  35. * 也可以在onStartup中可以添加自定义的Servlet、Listener、Filter
  36. * 这里以添加过滤器为演示
  37. * addMappingForUrlPatterns方法参数说明:
  38. * 参数一: 请求过滤的类型,如果要使用默认的EnumSet.of(DispatcherType.REQUEST)(表示过滤所有的请求),则为null
  39. * 参数二: 如果给定的过滤器映射应在其他任何声明的过滤器映射之后匹配,则为true;
  40. * 如果在获得此FilterRegistration的ServletContext的任何已声明过滤器映射之前应该匹配,则为false
  41. * 参数三: 过滤器映射的url
  42. * @param servletContext
  43. * @throws ServletException
  44. */
  45. @Override
  46. public void onStartup(ServletContext servletContext) throws ServletException {
  47. servletContext.addFilter("encodingFilter", EncodingFilter.class)
  48. .addMappingForUrlPatterns(null, false, "/*");
  49. //必须调用回父类的onStartup方法,否则不会初始化DispatcherServlet
  50. super.onStartup(servletContext);
  51. }
  52. }

 

mvc配置类,取代dispatcher-servlet.xml

 

  1. package edu.nf.ch11.config;
  2. import edu.nf.ch11.interceptors.LoginInterceptor;
  3. import org.springframework.context.annotation.Bean;
  4. import org.springframework.context.annotation.ComponentScan;
  5. import org.springframework.context.annotation.Configuration;
  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.InterceptorRegistry;
  9. import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
  10. import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
  11. import org.springframework.web.servlet.view.InternalResourceViewResolver;
  12. /**
  13. * @author wangl
  14. * @date 2018/11/6
  15. * mvc配置类,取代dispatcher-servlet.xml
  16. */
  17.  
  18. /**
  19. * 声明配置类
  20. */
  21. //@Configuration
  22. /**
  23. * 启用包扫描
  24. */
  25. @ComponentScan(basePackages = "edu.nf.ch11")
  26. /**
  27. * 启用mvc注解驱动
  28. */
  29. @EnableWebMvc
  30. /**
  31. * 如果需要扩展webmvc配置,可以实现WebMvcConfigurer接口,
  32. * 覆盖相关的default方法
  33. */
  34. public class WebConfig implements WebMvcConfigurer {
  35. /**
  36. * 配置静态资源处理方式一:使用容器的默认Servlet处理
  37. */
  38. /*@Override
  39. public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
  40. //启用默认Servlet支持
  41. configurer.enable();
  42. }*/
  43.  
  44. /**
  45. * 配置静态资源处理方式二:springmvc处理静态资源
  46. */
  47. @Override
  48. public void addResourceHandlers(ResourceHandlerRegistry registry) {
  49. registry.addResourceHandler("/static/**")
  50. .addResourceLocations("/static/");
  51. }
  52. /**
  53. * 添加拦截器
  54. * addInterceptor方法指定自定义拦截器对象
  55. * addPathPatterns方法指定哪些请求经过拦截器
  56. * excludePathPatterns方法指定哪些请求放行
  57. */
  58. @Override
  59. public void addInterceptors(InterceptorRegistry registry) {
  60. registry.addInterceptor(new LoginInterceptor()).
  61. addPathPatterns("/**").
  62. excludePathPatterns("/static/login.html","/static/js/**","/userLogin");
  63. }
  64. /**
  65. * 配置commons-upload上传
  66. */
  67. @Bean
  68. public CommonsMultipartResolver multipartResolver(){
  69. CommonsMultipartResolver resolver = new CommonsMultipartResolver();
  70. //设置限制上传大小
  71. resolver.setMaxUploadSize(104857600);
  72. //设置编码
  73. resolver.setDefaultEncoding("UTF-8");
  74. return resolver;
  75. }
  76. /**
  77. * 配置默认的视图解析器
  78. */
  79. @Bean
  80. public InternalResourceViewResolver viewResolver(){
  81. InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
  82. viewResolver.setPrefix("/WEB-INF/jsp/");
  83. viewResolver.setSuffix(".jsp");
  84. //如果页面需要使用JSTL标签库
  85. //viewResolver.setViewClass(JstlView.class);
  86. return viewResolver;
  87. }
  88. }

 

BaseController:

  1. package edu.nf.ch11.controller;
  2. import edu.nf.ch11.controller.vo.ResponseVO;
  3. /**
  4. * @author wangl
  5. * @date 2018/11/6
  6. */
  7. public class BaseController {
  8. protected ResponseVO success(Object value){
  9. ResponseVO vo = new ResponseVO();
  10. vo.setValue(value);
  11. return vo;
  12. }
  13. protected ResponseVO success(){
  14. ResponseVO vo = new ResponseVO();
  15. return vo;
  16. }
  17. protected ResponseVO error(int code, String message){
  18. ResponseVO vo = new ResponseVO();
  19. vo.setCode(code);
  20. vo.setMessage(message);
  21. return vo;
  22. }
  23. }
View Code

UserController:

  1. package edu.nf.ch11.controller;
  2. import edu.nf.ch11.controller.vo.ResponseVO;
  3. import edu.nf.ch11.entity.Users;
  4. import edu.nf.ch11.service.UserService;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.stereotype.Controller;
  7. import org.springframework.web.bind.annotation.PostMapping;
  8. import org.springframework.web.bind.annotation.RequestMapping;
  9. import org.springframework.web.bind.annotation.ResponseBody;
  10. import org.springframework.web.servlet.ModelAndView;
  11. import javax.servlet.http.HttpSession;
  12. /**
  13. * @author wangl
  14. * @date 2018/11/6
  15. */
  16. @Controller
  17. public class UserController extends BaseController{
  18. @Autowired
  19. private UserService userService;
  20. @PostMapping("/userLogin")
  21. public @ResponseBody ResponseVO login(Users user, HttpSession session){
  22. user = userService.getUser(user);
  23. session.setAttribute("user", user);
  24. return success("/static/index.html");
  25. }
  26. }
View Code

EncodingFilter:

  1. package edu.nf.ch11.filter;
  2. import org.springframework.context.annotation.ComponentScan;
  3. import javax.servlet.*;
  4. import javax.servlet.annotation.WebFilter;
  5. import java.io.IOException;
  6. /**
  7. * @author wangl
  8. * @date 2018/11/6
  9. */
  10. //@WebFilter(urlPatterns = "/*")
  11. public class EncodingFilter implements Filter {
  12. @Override
  13. public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
  14. System.out.println("字符过滤器...");
  15. servletRequest.setCharacterEncoding("utf-8");
  16. servletResponse.setCharacterEncoding("utf-8");
  17. //请求放行
  18. filterChain.doFilter(servletRequest, servletResponse);
  19. }
  20. @Override
  21. public void init(FilterConfig filterConfig) throws ServletException {
  22. }
  23. @Override
  24. public void destroy() {
  25. }
  26. }
View Code

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号