基于配置文件的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方式