zoukankan      html  css  js  c++  java
  • 基于注解的SpringMVC大致开发流程

    基于注解的SpringMVC大致开发流程

    首先我们需要明确,基于注解的开发,Maven项目对于web.xml文件不是必要的,所以,我们需要再pom.xml中进行配置:

    1      <properties>
    2          <failOnMissingWebXml>false</failOnMissingWebXml>
    3          <maven.compiler.source>1.8</maven.compiler.source>
    4          <maven.compiler.target>1.8</maven.compiler.target>
    5      </properties>

    基于注解的开发是比较简易的,首先是mvc开发过程中需要初始加载的内容写在spring初始化的类中:

     public class SpringMvcInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
     ​
         @Override
         protected Class<?>[] getRootConfigClasses() {
             return null;
         }
     ​
         @Override
         protected Class<?>[] getServletConfigClasses() {
             return new Class[] { SpringMvcConfigurer.class };
         }
     ​
         @Override
         protected String[] getServletMappings() {
             return new String[] { "*.do"};
         }
     ​
         @Override
         protected Filter[] getServletFilters() {
             // CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
             // characterEncodingFilter.setEncoding("utf-8");
             return new Filter[] { new CharacterEncodingFilter("utf-8") };
         }
     ​
     }

    其中:

    • getRootConfigClasses():获取Spring的配置类,在简单的SpringMVC项目中,也许并不需要编写任何Spring环境的配置,则该方法返回null即可,后续,如果整合MyBatis框架或其它框架时,可能需要编写相关配置;

    • getServletConfigClasses():获取SpringMVC的配置类,SpringMVC的配置类可以自定义,且必须实现WebMvcConfigurer接口;

    • getServletMappings():获取框架所处理的请求的路径,假设所有以.do为后缀的请求都需要被SpringMVC框架处理,则可以配置为*.do

     

    其次,我们需要做就是MVC的配置类的开发:

     1  @ComponentScan("cn.tedu.spring")
     2  @Configuration
     3  @EnableWebMvc
     4  public class SpringMvcConfigurer implements WebMvcConfigurer {
     5      private String characterEncoding = "utf-8";
     6  7      /**
     8       * 添加拦截器链
     9       */
    10      public void addInterceptors(InterceptorRegistry registry) {
    11          // 注意:配置拦截器作用的相关路径时,路径值必须使用 / 作为第1个字符
    12          LoginInterceptor interceptor = new LoginInterceptor();
    13              registry.addInterceptor(interceptor)
    14                      .addPathPatterns("/hello.do")
    15                      .excludePathPatterns();
    16      }
    17 18      @Bean
    19      public ViewResolver configViewResolver() {
    20      // ------------------------------------------------
    21      // 通常使用的模版解析器有ClassLoaderTemplateResolver和ServletContextTemplateResolver,在实际使用时,任选其一即可!
    22      // 当使用ClassLoaderTemplateResolver时,会自动到项目的src/main/resources下查找视图文件
    23      // 当使用ServletContextTemplateResolver时,会自动到项目的webapp下查找视图文件
    24      // ------------------------------------------------
    25  27       //以下代码中,前缀的配置值是/templates/,后缀的配置值是.html,当方法返回的字符串 demo 时,将拼接得到 /templates/demo.html,则会以这个文件作为视图文件
    28          ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();
    29          templateResolver.setCharacterEncoding(characterEncoding);
    30          templateResolver.setTemplateMode("HTML");
    31          templateResolver.setCacheable(false);
           //setPrefix()方法表示配置前缀
    32 templateResolver.setPrefix("/templates/");
           //setSuffix()表示配置后缀  
    33 templateResolver.setSuffix(".html"); 34 ​     35 SpringTemplateEngine templateEngine = new SpringTemplateEngine(); 36 templateEngine.setTemplateResolver(templateResolver); 37 38 ThymeleafViewResolver viewResolver = new ThymeleafViewResolver(); 39 viewResolver.setCharacterEncoding(characterEncoding); 40 viewResolver.setTemplateEngine(templateEngine); 41 return viewResolver; 42 } 43 }

     

    下面就需要我们来配置spring整合数据库的java类了:

     1 @PropertySource("jdbc.properties")
     2  @Configuration
     3  @MapperScan("cn.tedu.yonghe.mapper")
     4  public class SpringConfigurer {
     5  6      @Value("${mysql.url}")
     7      private String url;
     8      @Value("${mysql.driver}")
     9      private String driver;
    10      @Value("${mysql.username}")
    11      private String username;
    12      @Value("${mysql.password}")
    13      private String password;
    14      @Value("${mysql.initialSize}")
    15      private Integer initialSize;
    16      @Value("${mysql.maxTotal}")
    17      private Integer maxTotal;
    18      @Value("${mybatis.mapper-locations}")
    19      private Resource[] mapperLocations;
    20      
    21      @Bean
    22      public DataSource dataSource() {
    23          BasicDataSource dataSource = new BasicDataSource();
    24          dataSource.setUrl(url);
    25          dataSource.setDriverClassName(driver);
    26          dataSource.setUsername(username);
    27          dataSource.setPassword(password);
    28          dataSource.setInitialSize(initialSize);
    29          dataSource.setMaxTotal(maxTotal);
    30          return dataSource;
    31      }
    32      
    33      @Bean
    34      public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource) {
    35          SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
    36          bean.setDataSource(dataSource);
    37          bean.setMapperLocations(mapperLocations);
    38          return bean;
    39      }
    40  }

    其中,jdbc.properties文件内容:

    1  mysql.url=jdbc:mysql://localhost:3306/tedu_ums?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
    2  mysql.driver=com.mysql.cj.jdbc.Driver
    3  mysql.username=root
    4  mysql.password=root
    5  mysql.initialSize=2
    6  mysql.maxTotal=10
    7 8  mybatis.mapper-locations=classpath:mappers/*.xml

    附注:SpringMVC开发过程中需要的jar包依赖

     <!-- SpringMVC -->
     <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-webmvc</artifactId>
         <version>5.2.2.RELEASE</version>
     </dependency>
     <!-- Spring JDBC依赖,必须与其它Spring依赖使用完全相同的版本 -->
     <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-jdbc</artifactId>
         <version>5.2.2.RELEASE</version>
     </dependency>
     <!-- Mybatis框架 -->
     <dependency>
         <groupId>org.mybatis</groupId>
         <artifactId>mybatis</artifactId>
         <version>3.5.0</version>
     </dependency>
     <!-- MyBatis整合Spring -->
     <dependency>
         <groupId>org.mybatis</groupId>
         <artifactId>mybatis-spring</artifactId>
         <version>2.0.1</version>
     </dependency>
     <!-- Thymeleaf -->
     <dependency>
         <groupId>org.thymeleaf</groupId>
         <artifactId>thymeleaf</artifactId>
         <version>3.0.11.RELEASE</version>
     </dependency>
     <!-- Thymeleaf整合Spring -->
     <dependency>
         <groupId>org.thymeleaf</groupId>
         <artifactId>thymeleaf-spring5</artifactId>
         <version>3.0.11.RELEASE</version>
     </dependency>
     <!-- 连接MySQL数据库的依赖 -->
     <dependency>
         <groupId>mysql</groupId>
         <artifactId>mysql-connector-java</artifactId>
         <version>8.0.15</version>
     </dependency>
     <!-- 数据库连接池 -->
     <dependency>
         <groupId>com.alibaba</groupId>
         <artifactId>druid</artifactId>
         <version>1.1.21</version>
     </dependency>
     <!-- 单元测试 -->
     <dependency>
         <groupId>junit</groupId>
         <artifactId>junit</artifactId>
         <version>4.13</version>
         <scope>test</scope>
     </dependency>
     <dependency>
         <groupId>javax.servlet</groupId>
         <artifactId>javax.servlet-api</artifactId>
         <version>3.1.0</version>
         <scope>provided</scope>
     </dependency>
     <dependency>
         <groupId>org.slf4j</groupId>
         <artifactId>slf4j-log4j12</artifactId>
         <version>1.7.25</version>
     </dependency>

     

     

     

    setPrefix()方法表示配置“前缀”
  • 相关阅读:
    『Power AI by AI』 PAI-AutoML2.0重磅发布
    基于 K8s 做应用发布的工具那么多, 阿里为啥选择灰姑娘般的 Tekton ?
    编码方法论,赋能你我他
    开发部署效率提升 12 倍,这款应用托管服务让云上运维更简单
    全景还原报错现场 | 应用实时监控 ARMS 上线用户行为回溯功能
    告别诊断烦恼 | 应用实时监控 ARMS 上线智能和实时诊断功能
    阿里云CDN上线 WAF,一站式提供分发+安全能力
    RDS for PostgreSQL 云盘加密功能使用方法
    MySQL8.0.17
    2370 小机房的树
  • 原文地址:https://www.cnblogs.com/chenglaoshi/p/13956968.html
Copyright © 2011-2022 走看看