我的编程空间,编程开发者的网络收藏夹
学习永远不晚

SpringMVC使用注解配置方式

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

SpringMVC使用注解配置方式

SpringMVC注解配置方式

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

一、创建初始化类

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

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

Spring3.2 引入了一个便利的WebApplicationInitializer基础实现,名为AbstractAnnotationConfigDispatcherServletInitializer,
当我们的类扩展了AbstractAnnotationConfigDispatcherServletInitializer并将其部署到 Servlet3.0 容器的时候,容器会自动发现它,并用它来配置 Servlet 上下文。

这里新建一个工程来演示。

pom.xml里的依赖可以复制之前的内容,web.xml 和 SpringMVC 已经不需要再进行创建了。

package com.pingguo.mvc.config;
import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.filter.HiddenHttpMethodFilter;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
import javax.servlet.Filter;
public class WebInit extends AbstractAnnotationConfigDispatcherServletInitializer {
    
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{SpringConfig.class};
    }
    
    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{WebConfig.class};
    }
    
    @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的配置类、SpringMVC的配置类,给创建出来即可,记得带上@Configuration注解,标记为配置类。

其实就是把之前各种配置文件里的内容转到配置类里了,这些都会在项目启动时候初始化。另外,返回的都是数组,所以每个类里都可以返回多个配置。

二、spring的配置类

当使用ssm整合之后,spring的配置信息写在spring的配置类中,这里暂时用不到,写出来无妨。

package com.pingguo.mvc.config;
import org.springframework.context.annotation.Configuration;
@Configuration
public class SpringConfig {
}

三、WebConfig 配置类

这个配置类是代替之前 springMVC.xml 配置文件里的内容:

  • 扫描组件
  • 视图解析器
  • view-controller
  • default-servlet-handler
  • mvc注解驱动
  • 文件上传解析器
  • 异常处理
  • 拦截器
// 标识当前类为配置类
@Configuration
// 扫描组件
@ComponentScan("com.pingguo.mvc")
// mvc 注解驱动
@EnableWebMvc
public class WebConfig {
    //配置生成模板解析器
    @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;
    }
}

有了这几样,就可以写一个index页面测试一下了,写出页面和controller类。

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

控制器:

@Controller
public class TestController {
    @RequestMapping("/")
    public String index() {
        return "index";
    }
}

设置下部署,启动可以打开首页。

剩余配置

接下来,需要 WebConfig 类实现一个接口WebMvcConfigurer,来重写里面的方法。

配置 default-servlet-handler

@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
    //使用默认的servlet处理静态资源 default-servlet-handler
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }
... ...

配置 拦截器

继续增加。

... ... 
    //配置拦截器
    public void addInterceptors(InterceptorRegistry registry) {
        TestInterceptor firstInterceptor = new TestInterceptor();
        registry.addInterceptor(firstInterceptor).addPathPatterns("/**");
    }
... ...

拦截器还是要像之前的那样创建,这里就创建了一个拦截器 TestInterceptor :

public class TestInterceptor 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 {
    }
}

配置 view-controller

当仅做视图跳转时候可以使用这个配置。

//配置视图控制
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/").setViewName("index");
    }

配置文件上传解析器

... ...
    //配置文件上传解析器
    @Bean
    public MultipartResolver multipartResolver(){
        CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver();
        return commonsMultipartResolver;
    }
... ...

配置异常处理

//配置异常映射
    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);
    }

里面的功能与之前使用配置文件实现的一样,可以逐一测试一下。

以上就是SpringMVC使用注解配置方式的详细内容,更多关于SpringMVC注解配置的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

SpringMVC使用注解配置方式

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

下载Word文档

猜你喜欢

SpringMVC使用注解配置方式是什么

本篇内容主要讲解“SpringMVC使用注解配置方式是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SpringMVC使用注解配置方式是什么”吧!SpringMVC注解配置方式使用配置类和注
2023-06-30

详解SpringMVC拦截器配置及使用方法

本文介绍了SpringMVC拦截器配置及使用方法,分享给大家,具体如下:常见应用场景1、日志记录:记录请求信息的日志,以便进行信息监控、信息统计、计算PV(Page View)等。 2、权限检查:如登录检测,进入处理器检测检测是否登录,如果
2023-05-31

Quartz注解方式怎么配置

本篇内容主要讲解“Quartz注解方式怎么配置”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Quartz注解方式怎么配置”吧!一:目录结构二:统一配置文件context-datasource.p
2023-06-04

MyBatis中怎么使用注解方式配置映射关系

在 MyBatis 中使用注解方式配置映射关系可以通过使用 @Select, @Insert, @Update, @Delete 等注解来配置 SQL 语句,并通过 @Results, @Result, @ResultMap 等注解来配置结
MyBatis中怎么使用注解方式配置映射关系
2024-03-07

SpringMVC @RequestMapping注解怎么使用

这篇文章主要讲解了“SpringMVC @RequestMapping注解怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringMVC @RequestMapping注解怎么使用
2023-06-22

SpringMVC中@InitBinder注解怎么使用

这篇文章主要讲解了“SpringMVC中@InitBinder注解怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringMVC中@InitBinder注解怎么使用”吧!简介@Co
2023-07-02

SpringMVC中RequestBody注解的List参数传递方式

这篇文章主要介绍了SpringMVC中RequestBody注解的List参数传递方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2022-11-13

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录