SpringMVC基于代码的配置方式(零配置,无web.xml)

基于配置文件的web项目维护起来可能会更方便,但是有时候我们会有一些特殊的需求,比如防止客户胡乱更改配置,这时候我们需要给配置隐藏到代码中。

1.创建一个动态web项目(无需web.xml)

2.右键项目添加几个package: com.easyweb.config (保存项目配置) com.easyweb.controller (保存springMvc controller)

3.在 com.easyweb.config 新建一个类 WebApplicationStartup ,这个类实现WebApplicationInitializer 接口,是项目的入口,作用类似于web.xml,具体代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
<code class = "hljs" java= "" > package com.easyweb.config;
 
import javax.servlet.MultipartConfigElement;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration.Dynamic;
 
import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;
 
/**
  * 服务器启动入口类
  *
  * @author Administrator
  *
  */
public class WebApplicationStartup implements WebApplicationInitializer {
 
   private static final String SERVLET_NAME = Spring-mvc;
 
   private static final long MAX_FILE_UPLOAD_SIZE = 1024 * 1024 * 5 ; // 5 Mb
 
   private static final int FILE_SIZE_THRESHOLD = 1024 * 1024 ; // After 1Mb
 
   private static final long MAX_REQUEST_SIZE = -1L; // No request size limit
 
   /**
    * 服务器启动调用此方法,在这里可以做配置 作用与web.xml相同
    */
   @Override
   public void onStartup(ServletContext servletContext) throws ServletException {
     // 注册springMvc的servlet
     this .addServlet(servletContext);
     // 注册过滤器
     // servletContext.addFilter(arg0, arg1)
     // 注册监听器
     // servletContext.addListener(arg0);
   }
 
   /**
    * 注册Spring servlet
    *
    * @param servletContext
    */
   private void addServlet(ServletContext servletContext) {
     // 构建一个application context
     AnnotationConfigWebApplicationContext webContext = createWebContext(SpringMVC. class , ViewConfiguration. class );
     // 注册spring mvc 的 servlet
     Dynamic dynamic = servletContext.addServlet(SERVLET_NAME, new DispatcherServlet(webContext));
     // 添加springMVC 允许访问的Controller后缀
     dynamic.addMapping(*.html, *.ajax, *.css, *.js, *.gif, *.jpg, *.png);
     // 全部通过请用 “/”
     // dynamic.addMapping(/);
     dynamic.setLoadOnStartup( 1 );
     dynamic.setMultipartConfig( new MultipartConfigElement( null , MAX_FILE_UPLOAD_SIZE, MAX_REQUEST_SIZE, FILE_SIZE_THRESHOLD));
   }
 
   /**
    * 通过自定义的配置类来实例化一个Web Application Context
    *
    * @param annotatedClasses
    * @return
    */
   private AnnotationConfigWebApplicationContext createWebContext(Class<!--?-->... annotatedClasses) {
     AnnotationConfigWebApplicationContext webContext = new AnnotationConfigWebApplicationContext();
     webContext.register(annotatedClasses);
 
     return webContext;
   }
 
}</code>

4.在com.easyweb.config 下添加类 SpringMVC 继承 WebMvcConfigurerAdapter,这个类的作用是进行SpringMVC的一些配置,代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<code class = "hljs" java= "" > package com.easyweb.config;
 
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
 
@Configuration
@EnableWebMvc
//指明controller所在的包名
@ComponentScan (basePackages = {com.easyweb.controller})
public class SpringMVC extends WebMvcConfigurerAdapter {
 
   /**
    * 非必须
    */
   @Override
   public void configureDefaultServletHandling( final DefaultServletHandlerConfigurer configurer) {
     configurer.enable();
   }
 
   /**
    * 如果项目的一些资源文件放在/WEB-INF/resources/下面
    * 在浏览器访问的地址就是类似:http://host:port/projectName/WEB-INF/resources/xxx.css
    * 但是加了如下定义之后就可以这样访问:
    * http://host:port/projectName/resources/xxx.css
    * 非必须
    */
   @Override
   public void addResourceHandlers( final ResourceHandlerRegistry registry) {
     registry.addResourceHandler(/resources /**/ *).addResourceLocations(/WEB-INF/resources/);
   }
}</code>

5.添加view配置文件com.easyweb.config下新建类ViewConfiguration,里面可以根据自己的需要定义视图拦截器:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<code avrasm= "" class = "hljs" > package com.easyweb.config;
 
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.view.JstlView;
import org.springframework.web.servlet.view.UrlBasedViewResolver;
import org.springframework.web.servlet.view.tiles2.TilesConfigurer;
import org.springframework.web.servlet.view.tiles2.TilesView;
 
@Configuration
public class ViewConfiguration {
 
     @Bean
     public ViewResolver urlBasedViewResolver() {
         UrlBasedViewResolver viewResolver;
         viewResolver = new UrlBasedViewResolver();
         viewResolver.setOrder( 2 );
         viewResolver.setPrefix(/WEB-INF/);
         viewResolver.setSuffix(.jsp);
         viewResolver.setViewClass(JstlView. class );
         // for debug envirment
         viewResolver.setCache( false );
         return viewResolver;
     }
     @Bean
     public ViewResolver tilesViewResolver() {
         UrlBasedViewResolver urlBasedViewResolver = new UrlBasedViewResolver();
         urlBasedViewResolver.setOrder( 1 );
         urlBasedViewResolver.setViewClass(TilesView. class );
         //urlBasedViewResolver.
         return urlBasedViewResolver;
     }
     @Bean
     public TilesConfigurer tilesConfigurer() {
         TilesConfigurer tilesConfigurer = new TilesConfigurer();
         tilesConfigurer.setDefinitions( new String[] { classpath:tiles.xml });
         return tilesConfigurer;
     }
}</code>

6.本例中还用了tiles视图解析器,替换了原始的include方式

转载于:https://www.cnblogs.com/yasepix/p/7364342.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值