广告
返回顶部
首页 > 资讯 > 后端开发 > Python >分析讲解SpringMVC注解配置如何实现
  • 275
分享到

分析讲解SpringMVC注解配置如何实现

2024-04-02 19:04:59 275人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录简介注解类代替WEB.xml注解类代替spring-mvc.xml简介 使用配置类和注解代替web.xml和springMVC配置文件的功能 在Servlet3.0环境中,容器会

简介

使用配置类和注解代替web.xml和springMVC配置文件的功能

在Servlet3.0环境中,容器会在类路径中查找实现javax.servlet.ServletContainerInitializer接口的类,如果找到的话就用它来配置Servlet容器。 Spring提供了这个接口的实现,名为SpringServletContainerInitializer,这个类又会查找实现WebApplicationInitializer的类并将配置的任务交给它们来完成。Spring3.2引入了一个便利的WebApplicationInitializer基础实现,名为AbstractAnnotationConfigDispatcherServletInitializer,当我们的类扩展了AbstractAnnotationConfigDispatcherServletInitializer并将其部署到Servlet3.0容器的时候,容器会自动发现它,并用它来配置Servlet上下文。

意思就是容器会自动发现继承了AbstractAnnotationConfigDispatcherServletInitializer的子类,并用它来配置servlet上下文。(用来代替web.xml)

注解类代替web.xml

package com.hxut.rj1192.annoation;
import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.filter.HiddenHttpMethodFilter;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
import javax.servlet.Filter;
//代替web.xml   filter过滤器   spring  springmvc的配置类    dispracture的映射路径
public class webXml extends AbstractAnnotationConfigDispatcherServletInitializer {
    //    指定spring配置类
    @Override
    protected Class<?>[] getRootConfiGClasses() {
        return new Class[] {SpringConfig.class};
    }
    //    指定springmvc配置类
    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{SpringMvcConfig.class};
    }
    //    指定dispracture的映射路径 即url-pattern
    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
//注册编码过滤器
    @Override
    protected Filter[] getServletFilters() {
        CharacterEncodingFilter encodingFilter = new CharacterEncodingFilter();
        encodingFilter.setEncoding("UTF-8");
        encodingFilter.setForceRequestEncoding(true);
        HiddenHttpMethodFilter hiddenHttpMethodFilter = new HiddenHttpMethodFilter();
        return new Filter[]{encodingFilter, hiddenHttpMethodFilter};
    }
}

注解类代替Spring-mvc.xml

Spring-mvc配置文件(不管是xml还是注解的类)有如下八个功能

  • 视图解析器  
  • 扫描包的范围(组件扫描)  
  • view-controller(只返回视图的控制方法)  
  • defalut-servlet-handler  静态资源处理
  • mvc注解驱动  
  • 文件上传解析器  
  • 异常处理  
  • 拦截器
package com.hxut.rj1192.annoation;
import com.hxut.rj1192.InterceptorReGIStry01;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
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.HandlerInterceptor;
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;
//1视图解析器   2扫描包的范围(组件扫描)  3view-controller(只返回视图的控制方法)  4defalut-servlet-handler  静态资源处理和
//5  mvc注解驱动  6文件上传解析器   7异常处理   8拦截器
//代替springmvc的配置文件
//扫描包的范围(组件扫描)
@ComponentScan("com.hxut.rj1192")
//开启MVC注解驱动
@EnableWebMvc
@Configuration
public class SpringMvcConfig implements WebMvcConfigurer {
    //配置视图解析器
//    这个注解是将类放进ioc容器中  因为web.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;
    }
//default-servlet configuure
    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        WebMvcConfigurer.super.configureDefaultServletHandling(configurer);
    }
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        InterceptorRegistry01 interceptorRegistry=new InterceptorRegistry01();
//        addPathPatterns("/");是设置拦截的url
//        excludePathPatterns(); 是设置不拦截的url
        registry.addInterceptor(interceptorRegistry).addPathPatterns("/");
    }
//视图控制器
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
      registry.addViewController("/hello").setViewName("succes");
    }
    //配置文件上传解析器
    @Bean
    public CommonsMultipartResolver multipartResolver(){
        CommonsMultipartResolver commonsMultipartResolver=new CommonsMultipartResolver();
        return commonsMultipartResolver;
    }
    //配置异常映射
    @Override
    public void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {
        SimpleMappingExceptionResolver exceptionResolver = new SimpleMappingExceptionResolver();
        Properties prop = new Properties();
        prop.setProperty("java.lang.ArithmeticException", "error");
        //设置异常映射
        exceptionResolver.setExceptionMappings(prop);
        //设置共享异常信息的键
        exceptionResolver.setExceptionAttribute("ex");
        resolvers.add(exceptionResolver);
    }
}

 全用xml写:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
      <!--2.扫描包的范围(组件扫描)-->
    <context:component-scan base-package="com.hxut.rj1192.zyk"/>
    <!-- 1.配置Thymeleaf视图解析器 -->
    <bean id="viewResolver" class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
        <property name="order" value="1"/>
        <property name="characterEncoding" value="UTF-8"/>
        <property name="templateEngine">
            <bean class="org.thymeleaf.spring5.SpringTemplateEngine">
                <property name="templateResolver">
                    <bean class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">
                        <property name="prefix" value="/WEB-INF/templates/"/>
                        <property name="suffix" value=".html"/>
                        <property name="templateMode" value="HTML5"/>
                        <property name="characterEncoding" value="UTF-8"/>
                    </bean>
                </property>
            </bean>
        </property>
    </bean>
    <!--4.静态资源处理-->
    <mvc:default-servlet-handler/>
    <!--5.mvc注解驱动-->
    <mvc:annotation-driven/>
<mvc:interceptors>
    <bean class="com.hxut.rj1192.zyk.interceptor.interceptor01"/>
</mvc:interceptors>
    <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
        <property name="exceptionMappings">
            <props>
                <prop key="java.lang.ArithmeticException">error</prop>
            </props>
        </property>
        <property name="exceptionAttribute" value="ex"></property>
    </bean>
<! --3.view-controller-->
<mvc:view-controller path="/testView" view-name="success"></mvc:view-controller>
<! --4.文件上传解析器-->
    <bean id="multipartResolver"
          class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    </bean>
<! --7.异常处理-->
    <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
            <property name="exceptionMappings">
                <props>
                    <prop key="java.lang.ArithmeticException">error</prop>
                </props>
            </property>
            <!--        将错误信息放到ex这个变量中,并放进model中-->
            <property name="exceptionAttribute" value="ex"></property>
        </bean>
<! --8.拦截器-->
 <mvc:interceptors>
        <ref bean="first"></ref>
        <ref bean="second"></ref>
    </mvc:interceptors>
</beans>

拦截器文件

package com.hxut.rj1192;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class InterceptorRegistry01 implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("prehandle 执行");
        return true;
    }
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("posthandle 执行");
        HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
    }
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("afterhandle 执行");
        HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
    }
}

到此这篇关于分析讲解SpringMVC注解配置如何实现的文章就介绍到这了,更多相关SpringMVC注解配置内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 分析讲解SpringMVC注解配置如何实现

本文链接: https://www.lsjlt.com/news/148848.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 分析讲解SpringMVC注解配置如何实现
    目录简介注解类代替web.xml注解类代替Spring-mvc.xml简介 使用配置类和注解代替web.xml和SpringMVC配置文件的功能 在Servlet3.0环境中,容器会...
    99+
    2022-11-13
  • Vuerouter配置与使用分析讲解
    目录说明一、安装及配置二、在html中使用HTMLrouter-linkrouter-view三、路由的基本使用四、动态路由的添加说明 本教程适用于vue3中的路由vue-route...
    99+
    2022-12-23
    Vue router配置 Vue router使用方法
  • Vue项目配置router.js流程分析讲解
    目录一、查看版本号二、下载或者卸载已有版本三、引入vue-router四、router-view视图五、举个例子总结一、查看版本号 查看vue-router依赖版本号,防止后面出现版...
    99+
    2022-12-08
    Vue项目配置router.js Vue router.js
  • SpringBoot示例分析讲解自动化装配机制核心注解
    目录1. 自动化装配介绍2. Spring Boot 自动化配置UML图解3. Spring Boot 自动化配置核心注解分析3.1 @Inherited3.2 @SpringBoo...
    99+
    2022-11-13
  • Java之Spring注解配置bean实例代码解析
    前面几篇均是使用xml配置bean,如果有上百个bean,这是不可想象的。故而,请使用注解配置bean !!!【1】注解类别@Component : 基本注解, 标识了一个受 Spring(点击这里可以下载《Spring应用开发完全手册》)...
    99+
    2023-05-31
    java spring bean
  • Spring深入分析讲解BeanUtils的实现
    目录背景DOBODTOVO数据实体转换使用方式原理&源码分析属性赋值类型擦除总结背景 DO DO是Data Object的简写,叫做数据实体,既然是数据实体,那么也就是和存储...
    99+
    2022-11-13
  • Spring Boot 详细分析Conditional自动化配置注解
    目录1. Spring Boot Condition功能与作用2. Conditional条件化系列注解介绍3. Conditional条件化注解的实现原理4. Conditiona...
    99+
    2022-11-13
  • Moosefs分布式文件系统集群讲解配置的示例分析
    这篇文章给大家介绍Moosefs分布式文件系统集群讲解配置的示例分析,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1 管理服务器(master-server):负责各个数据存储服务器的...
    99+
    2022-10-19
  • 详解Spring Boot中如何自定义SpringMVC配置
    目录前言一、SpringBoot 中 SpringMVC 配置概述二、WebMvcConfigurerAdapter 抽象类三、WebMvcConfigurer 接口四、WebMvc...
    99+
    2022-11-12
  • Golang分布式注册中心实现流程讲解
    目录动手实现一个分布式注册中心日志服务log/Server.golog/Client.go主启动程序LogService服务启动与注册service/service.go服务注册与发...
    99+
    2023-05-19
    Golang分布式注册中心 Golang注册中心
  • springboot如何配置注解扫描
    在Spring Boot中,你可以使用`@ComponentScan`注解来配置注解扫描。`@ComponentScan`可以用在主...
    99+
    2023-08-23
    springboot
  • channel如何解析和配置
    这篇文章主要为大家展示了“channel如何解析和配置”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“channel如何解析和配置”这篇文章吧。 RMAN ch...
    99+
    2022-10-18
  • 如何解析squid的配置
    本篇文章为大家展示了如何解析squid的配置,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1常用的配置选项 因为缺省的配置文件有问题,所以我们必须首先修改该配置文件的有关内容,以便让squid跑起来...
    99+
    2023-06-13
  • 详解SpringMVC的拦截器链实现及拦截器链配置
    目录1、拦截器链实现2、拦截器链的执行顺序1、拦截器链实现 只需定义多个拦截器的 bean,然后在拦截器的配置类中将其逐一添加即可 第一个拦截器的定义: @Component pub...
    99+
    2022-11-13
  • 使用Spring MVC4 如何配置注解
    使用Spring MVC4 如何配置注解?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。在传统的Spring项目中,我们要写一堆的XML文件。而这些XML文件格式...
    99+
    2023-05-31
    springmvc 注解配置
  • vmvare如何配置域名解析
    在vmvare中配置域名解析的方法首先,启动vmvare,并在vmvare进行虚拟机操作界面;进入到虚拟机操作界面后,在虚拟机中打开系统磁盘;系统磁盘打开后,在磁盘中查找到“host”文件,host文件地址:C:\WINDOWS\syste...
    99+
    2022-10-06
  • SpringBoot中@ConfigurationProperties注解怎么实现配置绑定
    本篇内容介绍了“SpringBoot中@ConfigurationProperties注解怎么实现配置绑定”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能...
    99+
    2023-06-30
  • Python实现解析yaml配置文件的示例详解
    目录楔子字典数组标量引用生成 yaml 文件楔子 前面我们介绍了 ini 格式的配置文件,本次来看看 yaml,它的表达能力相比 ini 更加的强大。yaml 文件以 .yml 结尾...
    99+
    2022-11-11
  • Python实现解析ini配置文件的示例详解
    目录楔子ini 文件特殊格式小结楔子 在开发过程中,配置文件是少不了的,只不过我们有时会将 py 文件作为配置文件(config.py),然后在其它的模块中直接导入。这样做是一个好主...
    99+
    2022-11-11
  • Spring 中的事务管理如何使用注解实现配置
    Spring 中的事务管理如何使用注解实现配置?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。使用步骤:步骤一、在spring配置文件中引入<tx:>命名空间&l...
    99+
    2023-05-31
    spring 注解 事务管理
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作