14、SpringMVC之注解配置

这篇具有很好参考价值的文章主要介绍了14、SpringMVC之注解配置。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

14.1、概述

  • 在实际工作中,一般使用配置类和注解代替web.xml和SpringMVC配置文件的功能;

  • 在 Servlet3.0 环境中,容器会在类路径中查找实现了 javax.servlet.ServletContainerInitializer 接口的类,
    如果找到了的话,就会用它来配置 Servlet 容器;

  • Spring 提供了 ServletContainerInitializer 这个接口的实现,类名为 SpringServletContainerInitializer,
    这个类又会查找实现了 WebApplicationInitializer 接口的类,并将配置的任务交给它们来完成;

  • Spring3.2 引入了一个便利的 WebApplicationInitializer 基础实现,类名为 AbstractAnnotationConfigDispatcherServletInitializer;

  • 当自定义的类继承了 AbstractAnnotationConfigDispatcherServletInitializer 并将其部署到 Servlet3.0 容器的时候,
    容器会自动发现它,并用它来配置 Servlet 上下文。

14.2、环境搭建

14.2.1、在project创建新module

14、SpringMVC之注解配置

12.2.2、选择maven

14、SpringMVC之注解配置

14.2.3、设置module名称和路径

14、SpringMVC之注解配置

14、SpringMVC之注解配置

14.2.4、module初始状态

14、SpringMVC之注解配置

14.2.5、配置打包方式和引入依赖

14、SpringMVC之注解配置

注意:默认的打包方式为 jar,为了能配置web资源,需要将打包方式设置为 war

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>online.liaojy</groupId>
    <artifactId>spring_mvc_annotation</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <dependencies>
        <!-- SpringMVC (基于依赖的传递性,会间接引入Spring的依赖)-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.3.1</version>
        </dependency>
        <!-- 日志(Thymeleaf必须要sl4j,logback则是sl4j的实现) -->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
        </dependency>
        <!-- ServletAPI -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
        <!-- Spring5和Thymeleaf整合包 -->
        <dependency>
            <groupId>org.thymeleaf</groupId>
            <artifactId>thymeleaf-spring5</artifactId>
            <version>3.0.12.RELEASE</version>
        </dependency>
        <!--文件上传-->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.1</version>
        </dependency>
    </dependencies>

</project>

14.2.6、配置web资源目录

14、SpringMVC之注解配置

打开Project Structure,选择对应的module,并为该module创建一个web.xml文件

14、SpringMVC之注解配置

注意:web.xml文件需要放到web资源路径(工程路径\src\main\webapp)下

14、SpringMVC之注解配置

因为使用配置类和注解来配置 Servlet 上下文,所以 web.xml 不再需要配置。

14.2.7、创建拦截器

14、SpringMVC之注解配置

package online.liaojy.interceptor;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @author liaojy
 * @date 2023/11/15 - 7:22
 */
public class AAAInterceptor implements HandlerInterceptor {

    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        return true;
    }

    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

    }

    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

    }

}

14.2.8、创建模板目录及页面模板

14、SpringMVC之注解配置

注意:html要引入thymeleaf的约束:xmlns:th="http://www.thymeleaf.org"

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
</head>
<body>

<h1>index.html</h1>

</body>
</html>

14、SpringMVC之注解配置

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>错误页面</title>
</head>
<body>

<h1>errorPage.html</h1>

</body>
</html>

14.2.9、配置tomcat

14、SpringMVC之注解配置

14、SpringMVC之注解配置

14、SpringMVC之注解配置

14.3、web.xml的注解配置

14.3.1、创建Spring配置类

14、SpringMVC之注解配置

package online.liaojy.config;

/**
 * @author liaojy
 * @date 2023/11/16 - 23:59
 * 该类用于代替spring的配置文件
 */
public class SpringConfig {

    //ssm整合之后,spring的配置信息写在此类中

}

14.3.2、创建SpringMVC配置类

14、SpringMVC之注解配置

package online.liaojy.config;

/**
 * @author liaojy
 * @date 2023/11/17 - 0:02
 * 该类用于代替SpringMVC的配置文件
 */
public class SpringMVCConfig {
}

14.3.3、创建代替web.xml的初始化类

14、SpringMVC之注解配置

package online.liaojy.config;

import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.filter.HiddenHttpMethodFilter;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

import javax.servlet.Filter;

/**
 * @author liaojy
 * @date 2023/11/17 - 0:04
 */
public class WebInit extends AbstractAnnotationConfigDispatcherServletInitializer {

    // 指定代替 Spring 配置文件的配置类(可以按功能或需要来划分多个)
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{SpringConfig.class};
    }

    // 指定代替 SpringMVC 配置文件的配置类(可以按功能或需要来划分多个)
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{SpringMVCConfig.class};
    }

    // 设置 SpringMVC 的前端控制器 DispatcherServlet 需要处理的请求路径(即 url-pattern )
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }

    // 设置过滤器
    @Override
    protected Filter[] getServletFilters() {

        // 配置编码过滤器
        CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
        characterEncodingFilter.setEncoding("UTF-8");
        characterEncodingFilter.setForceEncoding(true);

        // 配置处理请求方式的过滤器
        // 注意该过滤器所在的包路径为 org.springframework.web.filter.HiddenHttpMethodFilter
        HiddenHttpMethodFilter hiddenHttpMethodFilter = new HiddenHttpMethodFilter();

        // 配置要使用的过滤器
        return new Filter[]{characterEncodingFilter,hiddenHttpMethodFilter};

    }
}

14.4、SpringMVC配置类的详细配置

14.4.1、将类标识为配置类

14、SpringMVC之注解配置

// @Configurable 注解:将类标识为配置类
@Configurable

14.4.2、实现 WebMvcConfigurer 接口

14、SpringMVC之注解配置

14.4.3、配置扫描组件

14、SpringMVC之注解配置

先创建一个需要扫描的包及组件

package online.liaojy.controller;

import org.springframework.stereotype.Controller;

/**
 * @author liaojy
 * @date 2023/11/19 - 16:56
 */
@Controller
public class TestController {
}

14、SpringMVC之注解配置

// @ComponentScan 注解:用于扫描指定包的组件
@ComponentScan("online.liaojy.controller")

14.4.4、配置默认servlet处理器

14、SpringMVC之注解配置

    // 配置默认servlet处理器
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

14.4.5、配置mvc注解驱动

14、SpringMVC之注解配置

// @EnableWebMvc 注解:开启mvc的注解驱动
@EnableWebMvc

14.4.6、配置视图控制器

14、SpringMVC之注解配置

    // 配置视图控制器
    public void addViewControllers(ViewControllerRegistry registry) {
        // addViewController 设置视图控制器要处理的请求路径,setViewName 设置匹配请求路径的逻辑视图
        registry.addViewController("/").setViewName("index");
    }

14.4.7、配置文件上传解析器

14、SpringMVC之注解配置

    // 配置文件上传解析器
    // @Bean 注解:用于将所标识方法的返回值作为一个 bean 来进行管理,bean的id为方法名
    @Bean
    public CommonsMultipartResolver multipartResolver(){
        return new CommonsMultipartResolver();
    }

14.4.8、配置拦截器

14、SpringMVC之注解配置

    // 配置拦截器
    public void addInterceptors(InterceptorRegistry registry) {
        AAAInterceptor aaaInterceptor = new AAAInterceptor();
        // addInterceptor 设置要使用的拦截器,
        // addPathPatterns 设置该拦截器要拦截的请求路径( /** 表示所有路径),excludePathPatterns 设置要排除的拦截路径
        registry.addInterceptor(aaaInterceptor).addPathPatterns("/**").excludePathPatterns("/abc");
    }

14.4.9、配置异常解析器

14、SpringMVC之注解配置

    // 配置异常解析器
    public void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {

        // 创建 SimpleMappingExceptionResolver 异常解析器,来对控制器方法出现的异常进行自定义异常处理
        SimpleMappingExceptionResolver simpleMappingExceptionResolver = new SimpleMappingExceptionResolver();

        // 设置异常和错误提示页面的映射关系
        Properties properties = new Properties();
        properties.setProperty("java.lang.ArithmeticException", "errorPage");
        simpleMappingExceptionResolver.setExceptionMappings(properties);

        // 设置共享到域对象中的异常信息的属性名
        simpleMappingExceptionResolver.setExceptionAttribute("exceptionMessage");

        // 添加要使用的异常解析器器
        resolvers.add(simpleMappingExceptionResolver);
    }

14.4.10、配置视图解释器

14、SpringMVC之注解配置

配置视图解释器,无论是通过xml还是配置类都比较复杂;一般直接都是复制配置模板,然后根据实际修改视图前缀及后缀即可

    //配置生成模板解析器
    @Bean
    public ITemplateResolver templateResolver() {

        WebApplicationContext webApplicationContext = ContextLoader.getCurrentWebApplicationContext();
        // ServletContextTemplateResolver 需要一个 ServletContext 作为构造参数,可通过 WebApplicationContext 的方法获得
        ServletContextTemplateResolver templateResolver =
                new ServletContextTemplateResolver(webApplicationContext.getServletContext());

        templateResolver.setPrefix("/WEB-INF/templates/");
        templateResolver.setSuffix(".html");
        templateResolver.setCharacterEncoding("UTF-8");
        templateResolver.setTemplateMode(TemplateMode.HTML);
        return templateResolver;

    }

    //生成模板引擎并为模板引擎注入模板解析器
    @Bean
    public SpringTemplateEngine templateEngine(ITemplateResolver templateResolver) {
        SpringTemplateEngine templateEngine = new SpringTemplateEngine();
        templateEngine.setTemplateResolver(templateResolver);
        return templateEngine;
    }

    //生成视图解析器并为解析器注入模板引擎
    @Bean
    public ViewResolver viewResolver(SpringTemplateEngine templateEngine) {
        ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
        viewResolver.setCharacterEncoding("UTF-8");
        viewResolver.setTemplateEngine(templateEngine);
        return viewResolver;
    }

14.4.11、全配置汇总

package online.liaojy.config;

import online.liaojy.interceptor.AAAInterceptor;
import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.web.context.ContextLoader;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.*;
import org.springframework.web.servlet.handler.SimpleMappingExceptionResolver;
import org.thymeleaf.spring5.SpringTemplateEngine;
import org.thymeleaf.spring5.view.ThymeleafViewResolver;
import org.thymeleaf.templatemode.TemplateMode;
import org.thymeleaf.templateresolver.ITemplateResolver;
import org.thymeleaf.templateresolver.ServletContextTemplateResolver;

import java.util.List;
import java.util.Properties;

/**
 * @author liaojy
 * @date 2023/11/17 - 0:02
 * 该类用于代替SpringMVC的配置文件
 */

// @Configurable 注解:将类标识为配置类
@Configurable
// @ComponentScan 注解:用于扫描指定包的组件
@ComponentScan("online.liaojy.controller")
// @EnableWebMvc 注解:开启mvc的注解驱动
@EnableWebMvc
public class SpringMVCConfig implements WebMvcConfigurer {

    // 配置默认servlet处理器
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

    // 配置视图控制器
    public void addViewControllers(ViewControllerRegistry registry) {
        // addViewController 设置视图控制器要处理的请求路径,setViewName 设置匹配请求路径的逻辑视图
        registry.addViewController("/").setViewName("index");
    }

    // 配置文件上传解析器
    // @Bean 注解:用于将所标识方法的返回值作为一个 bean 来进行管理,bean的id为方法名
    @Bean
    public CommonsMultipartResolver multipartResolver(){
        return new CommonsMultipartResolver();
    }

    // 配置拦截器
    public void addInterceptors(InterceptorRegistry registry) {
        AAAInterceptor aaaInterceptor = new AAAInterceptor();
        // addInterceptor 设置要使用的拦截器,
        // addPathPatterns 设置该拦截器要拦截的请求路径( /** 表示所有路径),excludePathPatterns 设置要排除的拦截路径
        registry.addInterceptor(aaaInterceptor).addPathPatterns("/**").excludePathPatterns("/abc");
    }

    // 配置异常解析器
    public void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {

        // 创建 SimpleMappingExceptionResolver 异常解析器,来对控制器方法出现的异常进行自定义异常处理
        SimpleMappingExceptionResolver simpleMappingExceptionResolver = new SimpleMappingExceptionResolver();

        // 设置异常和错误提示页面的映射关系
        Properties properties = new Properties();
        properties.setProperty("java.lang.ArithmeticException", "errorPage");
        simpleMappingExceptionResolver.setExceptionMappings(properties);

        // 设置共享到域对象中的异常信息的属性名
        simpleMappingExceptionResolver.setExceptionAttribute("exceptionMessage");

        // 添加要使用的异常解析器器
        resolvers.add(simpleMappingExceptionResolver);
    }

    //配置生成模板解析器
    @Bean
    public ITemplateResolver templateResolver() {

        WebApplicationContext webApplicationContext = ContextLoader.getCurrentWebApplicationContext();
        // ServletContextTemplateResolver 需要一个 ServletContext 作为构造参数,可通过 WebApplicationContext 的方法获得
        ServletContextTemplateResolver templateResolver =
                new ServletContextTemplateResolver(webApplicationContext.getServletContext());

        templateResolver.setPrefix("/WEB-INF/templates/");
        templateResolver.setSuffix(".html");
        templateResolver.setCharacterEncoding("UTF-8");
        templateResolver.setTemplateMode(TemplateMode.HTML);
        return templateResolver;

    }

    //生成模板引擎并为模板引擎注入模板解析器
    @Bean
    public SpringTemplateEngine templateEngine(ITemplateResolver templateResolver) {
        SpringTemplateEngine templateEngine = new SpringTemplateEngine();
        templateEngine.setTemplateResolver(templateResolver);
        return templateEngine;
    }

    //生成视图解析器并为解析器注入模板引擎
    @Bean
    public ViewResolver viewResolver(SpringTemplateEngine templateEngine) {
        ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
        viewResolver.setCharacterEncoding("UTF-8");
        viewResolver.setTemplateEngine(templateEngine);
        return viewResolver;
    }

}

14.5、测试效果

14、SpringMVC之注解配置

14、SpringMVC之注解配置文章来源地址https://www.toymoban.com/news/detail-746696.html

到了这里,关于14、SpringMVC之注解配置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Nginx 学习(九)集群概述与LVS工作模式的配置

    通过高速网络将很多服务器集中起来一起提供同一种服务,在客户端看来就像是只有一个服务器,可以在付出较低成本的情况下获得在性能、可靠性、灵活性方面的相对较高的收益,任务调度是集群系统中的核心技术。 提高性能。如计算密集型应用,如:天气预报、核试验模

    2024年02月09日
    浏览(52)
  • Spring 注解 和SpringMVC注解

    Spring和Spring MVC是两个紧密相关但又不同的框架,它们都使用一系列注解来简化开发。以下是Spring和Spring MVC中一些常用的注解: ### Spring 注解: 1. **`@Component`:**    - 用于将类标记为Spring容器中的组件,由Spring自动扫描并进行管理。    - 具体的派生注解有`@Service`、`@Reposit

    2024年01月23日
    浏览(53)
  • 【SpringMVC】| SpringMVC执行流程原理 | 常用注解 剥析

    MVC全称Model View Controller,是一种设计创建Web应用程序的模式。这三个单词分别代表Web应用程序的三个部分: Model (模型):指数据模型。用于存储数据以及处理用户请求的业务逻辑。在Web应用中,JavaBean对象,业务模型等都属于Model。 View (视图):用于展示模型中的数据的

    2024年02月06日
    浏览(50)
  • SpringMVC概述、SpringMVC 的入门

      MVC是一种设计模式,将软件按照模型、视图、控制器来划分: M:Model,模型层,指工程中的JavaBean,作用是处理数据 JavaBean分为两类: 一类称为数据承载Bean:专门存储业务数据的,如 Student、User 等 一类称为业务处理Bean:指 Service 或 Dao 对象,专门用于处理业务逻辑和数据

    2024年01月16日
    浏览(36)
  • 注解开发SpringMVC

               

    2024年02月16日
    浏览(34)
  • SpringMVC之@RequestMapping注解

    @RequestMapping注解 (1)@RequestMapping注解的作用就是将请求和处理请求的控制器方法关联起来,建立映射关系。 (2)SpringMVC 接收到指定的请求,就会来找到在映射关系中对应的控制器方法来处理这个请求。 (3)在SpringMVC中如何被使用:浏览器发送请求,若请求地址符合前端控

    2024年02月12日
    浏览(51)
  • 【SpringMVC】自定义注解

    🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟在这里,我要推荐给大家我的专栏《Spring MVC》。🎯🎯 🚀无论你是编程小白,还是有一定基础的程序员,这个专栏都能满足你的需求。我会用最简单易懂的语言,带你走进Spring MV

    2024年02月07日
    浏览(35)
  • SpringMVC中的注解

    @RequestMapping中的value属性 @RequestMapping :既可以标识在方法上也可以标识在类上 将@RequestMapping注解标识在方法上表示设置请求映射的具体信息( / :会被解析成http://localhost:8080/上下文/) 将@RequestMapping注解标识在方法上表示设置请求映射的初始信息 如果@RequestMapping注解标识在方

    2024年01月24日
    浏览(31)
  • SpringMVC之自定义注解

    目录 前言 一、自定义注解 1.Java注解简介 2. 注解的用处 3. 为什么要用注解 4.自定义注解的应用场景 5. 注解的分类 6.如何定义并使用自定义注解 7.自定义注解三种使用案例 案例一: 案例二: 案例三: 二、Aop自定义注解的应用   1 .自定义注解类 2.切面类 3.Controller层 随着We

    2024年02月07日
    浏览(50)
  • SpringMVC----自定义注解

    目录 自定义注解 是什么 作用  JDK元注解  测试案列  案例一(获取类与方法上的注解值) 案例二(获取类属性上的注解属性值)   案例三(获取参数修饰注解对应的属性值) 五.Aop自定义注解的应用 Mylog前置通知 SpringMVC自定义注解是指开发者根据自己的需求,在SpringMVC框

    2024年02月07日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包