SpringMVC使用注解配置方式(常用springmvc注解)

网友投稿 289 2022-07-27


目录SpringMVC注解配置方式一、创建初始化类二、spring的配置类三、WebConfig 配置类剩余配置

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 {

/**

* 指定spring的配置类

* @return

*/

@Override

protected Class>[] getRootConfigClasses() {

return new Class[]{SpringConfig.class};

}

/**

* 指定SpringMVC的配置类

* @return

*/

@Override

protected Class>[] getServletConfigClasses() {

return new Class[]{WebConfig.class};

}

/**

* 指定DispatcherServlet的映射规则,即url-pattern

* @return

*/

@Override

protected String[] getServletMappings() {

return new String[]{"/"};

}

/**

* 添加过滤器

* @return

*/

@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 配置类

EyJNHhp

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

扫描组件视图解析器view-controllerdefault-servlet-handlermvc注解驱动文件上传解析器异常处理拦截器

// 标识当前类为配置类

@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类。

控制器:

@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 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注解配置的资料请关注我们其它相关文章!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:小项目改造快速引入 mybatis的流程分析
下一篇:SpringBoot2学习之springboot与spring区别分析(springboot与springboot2.0)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~