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,具体代码如下:

<code class="hljs java has-numbering"><span class="hljs-keyword">package</span> com.easyweb.config;

<span class="hljs-keyword">import</span> javax.servlet.MultipartConfigElement;
<span class="hljs-keyword">import</span> javax.servlet.ServletContext;
<span class="hljs-keyword">import</span> javax.servlet.ServletException;
<span class="hljs-keyword">import</span> javax.servlet.ServletRegistration.Dynamic;

<span class="hljs-keyword">import</span> org.springframework.web.WebApplicationInitializer;
<span class="hljs-keyword">import</span> org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
<span class="hljs-keyword">import</span> org.springframework.web.servlet.DispatcherServlet;

<span class="hljs-javadoc">/**
 * 服务器启动入口类
 * 
 *<span class="hljs-javadoctag"> @author</span> Administrator
 *
 */</span>
<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">WebApplicationStartup</span> <span class="hljs-keyword">implements</span> <span class="hljs-title">WebApplicationInitializer</span> {</span>

  <span class="hljs-keyword">private</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">final</span> String SERVLET_NAME = <span class="hljs-string">"Spring-mvc"</span>;

  <span class="hljs-keyword">private</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">final</span> <span class="hljs-keyword">long</span> MAX_FILE_UPLOAD_SIZE = <span class="hljs-number">1024</span> * <span class="hljs-number">1024</span> * <span class="hljs-number">5</span>; <span class="hljs-comment">// 5 Mb</span>

  <span class="hljs-keyword">private</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">final</span> <span class="hljs-keyword">int</span> FILE_SIZE_THRESHOLD = <span class="hljs-number">1024</span> * <span class="hljs-number">1024</span>; <span class="hljs-comment">// After 1Mb</span>

  <span class="hljs-keyword">private</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">final</span> <span class="hljs-keyword">long</span> MAX_REQUEST_SIZE = -<span class="hljs-number">1</span>L; <span class="hljs-comment">// No request size limit</span>

  <span class="hljs-javadoc">/**
   * 服务器启动调用此方法,在这里可以做配置 作用与web.xml相同
   */</span>
  <span class="hljs-annotation">@Override</span>
  <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">onStartup</span>(ServletContext servletContext) <span class="hljs-keyword">throws</span> ServletException {
    <span class="hljs-comment">// 注册springMvc的servlet</span>
    <span class="hljs-keyword">this</span>.addServlet(servletContext);
    <span class="hljs-comment">// 注册过滤器</span>
    <span class="hljs-comment">// servletContext.addFilter(arg0, arg1)</span>
    <span class="hljs-comment">// 注册监听器</span>
    <span class="hljs-comment">// servletContext.addListener(arg0);</span>
  }

  <span class="hljs-javadoc">/**
   * 注册Spring servlet
   * 
   *<span class="hljs-javadoctag"> @param</span> servletContext
   */</span>
  <span class="hljs-keyword">private</span> <span class="hljs-keyword">void</span> <span class="hljs-title">addServlet</span>(ServletContext servletContext) {
    <span class="hljs-comment">// 构建一个application context</span>
    AnnotationConfigWebApplicationContext webContext = createWebContext(SpringMVC.class, ViewConfiguration.class);
    <span class="hljs-comment">// 注册spring mvc 的 servlet</span>
    Dynamic dynamic = servletContext.addServlet(SERVLET_NAME, <span class="hljs-keyword">new</span> DispatcherServlet(webContext));
    <span class="hljs-comment">// 添加springMVC 允许访问的Controller后缀</span>
    dynamic.addMapping(<span class="hljs-string">"*.html"</span>, <span class="hljs-string">"*.ajax"</span>, <span class="hljs-string">"*.css"</span>, <span class="hljs-string">"*.js"</span>, <span class="hljs-string">"*.gif"</span>, <span class="hljs-string">"*.jpg"</span>, <span class="hljs-string">"*.png"</span>);
    <span class="hljs-comment">// 全部通过请用 “/”</span>
    <span class="hljs-comment">// dynamic.addMapping("/");</span>
    dynamic.setLoadOnStartup(<span class="hljs-number">1</span>);
    dynamic.setMultipartConfig(<span class="hljs-keyword">new</span> MultipartConfigElement(<span class="hljs-keyword">null</span>, MAX_FILE_UPLOAD_SIZE, MAX_REQUEST_SIZE, FILE_SIZE_THRESHOLD));
  }

  <span class="hljs-javadoc">/**
   * 通过自定义的配置类来实例化一个Web Application Context
   * 
   *<span class="hljs-javadoctag"> @param</span> annotatedClasses
   *<span class="hljs-javadoctag"> @return</span>
   */</span>
  <span class="hljs-keyword">private</span> AnnotationConfigWebApplicationContext <span class="hljs-title">createWebContext</span>(Class<?>... annotatedClasses) {
    AnnotationConfigWebApplicationContext webContext = <span class="hljs-keyword">new</span> AnnotationConfigWebApplicationContext();
    webContext.register(annotatedClasses);

    <span class="hljs-keyword">return</span> webContext;
  }

}</code>

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

<code class="hljs avrasm has-numbering">package <span class="hljs-keyword">com</span><span class="hljs-preprocessor">.easyweb</span><span class="hljs-preprocessor">.config</span><span class="hljs-comment">;</span>

import org<span class="hljs-preprocessor">.springframework</span><span class="hljs-preprocessor">.context</span><span class="hljs-preprocessor">.annotation</span><span class="hljs-preprocessor">.Bean</span><span class="hljs-comment">;</span>
import org<span class="hljs-preprocessor">.springframework</span><span class="hljs-preprocessor">.context</span><span class="hljs-preprocessor">.annotation</span><span class="hljs-preprocessor">.Configuration</span><span class="hljs-comment">;</span>
import org<span class="hljs-preprocessor">.springframework</span><span class="hljs-preprocessor">.web</span><span class="hljs-preprocessor">.servlet</span><span class="hljs-preprocessor">.ViewResolver</span><span class="hljs-comment">;</span>
import org<span class="hljs-preprocessor">.springframework</span><span class="hljs-preprocessor">.web</span><span class="hljs-preprocessor">.servlet</span><span class="hljs-preprocessor">.view</span><span class="hljs-preprocessor">.JstlView</span><span class="hljs-comment">;</span>
import org<span class="hljs-preprocessor">.springframework</span><span class="hljs-preprocessor">.web</span><span class="hljs-preprocessor">.servlet</span><span class="hljs-preprocessor">.view</span><span class="hljs-preprocessor">.UrlBasedViewResolver</span><span class="hljs-comment">;</span>
import org<span class="hljs-preprocessor">.springframework</span><span class="hljs-preprocessor">.web</span><span class="hljs-preprocessor">.servlet</span><span class="hljs-preprocessor">.view</span><span class="hljs-preprocessor">.tiles</span>2<span class="hljs-preprocessor">.TilesConfigurer</span><span class="hljs-comment">;</span>
import org<span class="hljs-preprocessor">.springframework</span><span class="hljs-preprocessor">.web</span><span class="hljs-preprocessor">.servlet</span><span class="hljs-preprocessor">.view</span><span class="hljs-preprocessor">.tiles</span>2<span class="hljs-preprocessor">.TilesView</span><span class="hljs-comment">;</span>

@Configuration
public class ViewConfiguration {

    @Bean
    public ViewResolver urlBasedViewResolver() {
        UrlBasedViewResolver viewResolver<span class="hljs-comment">;</span>
        viewResolver = new UrlBasedViewResolver()<span class="hljs-comment">;</span>
        viewResolver<span class="hljs-preprocessor">.setOrder</span>(<span class="hljs-number">2</span>)<span class="hljs-comment">;</span>
        viewResolver<span class="hljs-preprocessor">.setPrefix</span>(<span class="hljs-string">"/WEB-INF/"</span>)<span class="hljs-comment">;</span>
        viewResolver<span class="hljs-preprocessor">.setSuffix</span>(<span class="hljs-string">".jsp"</span>)<span class="hljs-comment">;</span>
        viewResolver<span class="hljs-preprocessor">.setViewClass</span>(JstlView<span class="hljs-preprocessor">.class</span>)<span class="hljs-comment">;</span>
        // for debug envirment
        viewResolver<span class="hljs-preprocessor">.setCache</span>(false)<span class="hljs-comment">;</span>
        return viewResolver<span class="hljs-comment">;</span>
    }
    @Bean
    public ViewResolver tilesViewResolver() {
        UrlBasedViewResolver urlBasedViewResolver = new UrlBasedViewResolver()<span class="hljs-comment">;</span>
        urlBasedViewResolver<span class="hljs-preprocessor">.setOrder</span>(<span class="hljs-number">1</span>)<span class="hljs-comment">;</span>
        urlBasedViewResolver<span class="hljs-preprocessor">.setViewClass</span>(TilesView<span class="hljs-preprocessor">.class</span>)<span class="hljs-comment">;</span>
        //urlBasedViewResolver.
        return urlBasedViewResolver<span class="hljs-comment">;</span>
    }
    @Bean
    public TilesConfigurer tilesConfigurer() {
        TilesConfigurer tilesConfigurer = new TilesConfigurer()<span class="hljs-comment">;</span>
        tilesConfigurer<span class="hljs-preprocessor">.setDefinitions</span>(new String[] { <span class="hljs-string">"classpath:tiles.xml"</span> })<span class="hljs-comment">;</span>
        return tilesConfigurer<span class="hljs-comment">;</span>
    }
}</code>

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值