【Spring实战】----springMVC4.3.2的配置

来源:互联网 发布:怎样修改导航仪端口 编辑:程序博客网 时间:2024/06/03 19:55

一、简单说明

本篇springMVC的配置涉及到springMVC配置、sitemesh配置、log4j2的配置

二、相关库文件

根据myeclipse中创建gradle web项目建立完成后(建议使用idea进行,本系列也已用idea进行分析),在build.gradle中添加下面库文件

[html] view plain copy
  1. apply plugin: 'java'  
  2. apply plugin: 'war'  
  3.   
  4. sourceCompatibility = 1.5  
  5. version = '1.0'  
  6. jar {  
  7.     manifest {  
  8.         attributes 'Implementation-Title': 'Gradle Quickstart',  
  9.                    'Implementation-Version': version  
  10.     }  
  11. }  
  12.   
  13. repositories {  
  14.     jcenter()  
  15.     mavenCentral()  
  16. }  
  17.   
  18. dependencies {  
  19.     compile group: 'commons-collections', name: 'commons-collections', version: '3.2'  
  20.     testCompile group: 'junit', name: 'junit', version: '4.+'  
  21.       
  22.     //servlet  
  23.     providedCompile group: 'javax.servlet', name: 'javax.servlet-api', version: '3.1.0'    //在配置apply plugin: 'war'才可用  
  24.     runtime("jstl:jstl:1.2")  
  25.       
  26.     //spring  
  27.     def springVersion = "4.3.2.RELEASE";   
  28.     compile "org.springframework:spring-context:$springVersion"    
  29.     compile "org.springframework:spring-core:$springVersion"    
  30.     compile "org.springframework:spring-webmvc:$springVersion"  
  31.       
  32.     //sitemesh  
  33.     compile "org.sitemesh:sitemesh:3.0.0"  
  34.       
  35.     //log4j2  
  36.     def log4j_version = "2.2";  
  37.     compile "org.apache.logging.log4j:log4j-api:$log4j_version"  
  38.     compile "org.apache.logging.log4j:log4j-core:$log4j_version"  
  39.     compile "org.apache.logging.log4j:log4j-slf4j-impl:$log4j_version"  
  40.   
  41. }  
  42.   
  43. test {  
  44.     systemProperties 'property': 'value'  
  45. }  
  46.   
  47. uploadArchives {  
  48.     repositories {  
  49.        flatDir {  
  50.            dirs 'repos'  
  51.        }  
  52.     }  
  53. }  


三、web.xml

虽然spring从3.1版本后可以采用Java配置的方式配置springMVC(具体可参见《spring实战第四版》)。但本文还是采用传统的web.xml配置方式

[html] view plain copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">  
  3.   <display-name>SpringMango</display-name>  
  4.     <!--==================== LISTENER Spring容器====================-->  
  5.     <context-param>  
  6.       <param-name>contextConfigLocation</param-name>  
  7.       <param-value>classpath*:applicationContext-*.xml</param-value>  
  8.     </context-param>  
  9.     <listener>  
  10.       <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  11.     </listener>  
  12.       
  13.     <!-- 防止内存泄漏 -->  
  14.     <listener>  
  15.         <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>  
  16.     </listener>  
  17.       
  18.     <!--==================== SERVLET Spring MVC====================-->  
  19.     <servlet>  
  20.         <servlet-name>Mango</servlet-name>  
  21.         <servlet-class>  
  22.             org.springframework.web.servlet.DispatcherServlet  
  23.         </servlet-class>  
  24.         <load-on-startup>1</load-on-startup>  
  25.     </servlet>  
  26.     <servlet-mapping>  
  27.         <servlet-name>Mango</servlet-name>  
  28.         <url-pattern>/</url-pattern>  
  29.     </servlet-mapping>  
  30.       
  31.     <!--START 设置字符编码过滤器-->  
  32.     <filter>  
  33.         <description>字符集过滤器</description>  
  34.         <filter-name>encodingFilter</filter-name>  
  35.         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
  36.         <init-param>  
  37.             <description>字符集编码</description>  
  38.             <param-name>encoding</param-name>  
  39.             <param-value>UTF-8</param-value>  
  40.         </init-param>  
  41.     </filter>  
  42.     <filter-mapping>  
  43.         <filter-name>encodingFilter</filter-name>  
  44.         <url-pattern>/*</url-pattern>  
  45.     </filter-mapping>  
  46.     <!--END 设置字符编码过滤器-->  
  47.       
  48.     <!--sitemesh装饰器-->  
  49.     <filter>  
  50.         <filter-name>sitemesh</filter-name>  
  51.         <filter-class>  
  52.             org.sitemesh.config.ConfigurableSiteMeshFilter  
  53.         </filter-class>  
  54.             <init-param>  
  55.             <param-name>ignore</param-name>  
  56.             <param-value>true</param-value>  
  57.         </init-param>  
  58.         <init-param>  
  59.             <param-name>encoding</param-name>  
  60.             <param-value>GBK</param-value>  
  61.         </init-param>  
  62.     </filter>  
  63.     <filter-mapping>  
  64.         <filter-name>sitemesh</filter-name>  
  65.         <url-pattern>/*</url-pattern>  
  66.     </filter-mapping>  
  67.   
  68. </web-app>  

DispatcherServlet配置文件采用默认从/WEB-INF/下Mango-servlet.xml加载的方式,也可以通过contextConfigLocation指定xml文件路径:

[html] view plain copy
  1. <servlet>  
  2.         <servlet-name>Mango</servlet-name>  
  3.         <servlet-class>  
  4.             org.springframework.web.servlet.DispatcherServlet  
  5.         </servlet-class>  
  6.         <init-param>  
  7.             <param-name>contextConfigLocation</param-name>  
  8.             <param-value>classpath*:Mango-servlet.xml</param-value>  
  9.         </init-param>  
  10.         <load-on-startup>1</load-on-startup>  
  11.     </servlet>  


四、servlet配置文件:Mango-servlet.xml

[html] view plain copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.        xmlns:context="http://www.springframework.org/schema/context"  
  5.        xmlns:mvc="http://www.springframework.org/schema/mvc"  
  6.        xsi:schemaLocation="http://www.springframework.org/schema/beans  
  7.        http://www.springframework.org/schema/beans/spring-beans.xsd  
  8.        http://www.springframework.org/schema/context  
  9.        http://www.springframework.org/schema/context/spring-context.xsd  
  10.        http://www.springframework.org/schema/mvc  
  11.        http://www.springframework.org/schema/mvc/spring-mvc.xsd">  
  12.   
  13.   
  14.     <!-- 扫描web包,应用Spring的注解 -->  
  15.     <mvc:annotation-driven/>  
  16.     <context:component-scan base-package="com.mango.jtt.controller"/>  
  17.       
  18.      
  19.     <!-- jsp视图 -->  
  20.     <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
  21.         <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />  
  22.         <property name="prefix" value="/WEB-INF/views/jsp/"/>  
  23.         <property name="suffix" value=".jsp"/>  
  24.     </bean>  
  25.       
  26.     <!-- 静态资源不走controller -->  
  27.     <mvc:resources mapping="/resources/**" location="/resources/" />  
  28.     <!-- or  <mvc:default-servlet-handler/> 与上面mvc:resources标签选其一即可,这里如果配置,必须配置<mvc:annotation-driven/>其他controller才可正常工作-->  
  29.       
  30. </beans>  

通过<mvc:annotation-driven/>启用springMVC的注解配置,该标签注册了多个特性:包括JSR-303校验支持,信息转换以及对域格式化的支持。

 <context:component-scan/>标签时查找对应支持的注解类并注册到容器中的bean

<mvc:resources/>标签配置静态资源文件不需要走控制器,直接映射到mapping下,该标签3.0.4及以后才有


五、controller

[java] view plain copy
  1. /** 
  2.  *  
  3.  */  
  4. package com.mango.jtt.controller;  
  5.   
  6. import org.springframework.stereotype.Controller;  
  7. import org.springframework.web.bind.annotation.RequestMapping;  
  8.   
  9. /** 
  10.  * @author HHL 
  11.  * 
  12.  * @date 2016年11月22日 
  13.  */  
  14. @Controller  
  15. public class PageController {  
  16.   
  17.     /** 
  18.      * 首页 映射/和/index路径 
  19.      *  
  20.      * @return 
  21.      * @throws Exception 
  22.      */  
  23.     @RequestMapping({ "/""/index" })  
  24.     public String index() throws Exception {  
  25.         return "index";  
  26.     }  
  27.   
  28. }  


六、index.jsp

采用了sitemesh装饰器

[java] view plain copy
  1. <%@ page language="java" pageEncoding="UTF-8" contentType="text/html;charset=UTF-8"%>  
  2. <%@ include file="../includes/taglibs.jsp"%>  
  3. <!DOCTYPE html>  
  4. <html>  
  5. <head>  
  6.     <title>Mango-Index</title>  
  7.     <meta name="menu" content="home" />      
  8. </head>  
  9.   
  10. <body>  
  11.   
  12. <h1>欢迎光临!</h1>  
  13.   
  14. <div style="text-align:center"><img src="<c:url value='/resources/images/team.jpg'/>" /></div>  
  15.   
  16. </body>  
  17. </html>  

装饰器sitemesh3.xml

[html] view plain copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <sitemesh>  
  3.     <mapping path="/" decorator="/WEB-INF/views/decorators/default.jsp" />  
  4.     <mapping path="/index" decorator="/WEB-INF/views/decorators/default.jsp" />  
  5. </sitemesh>  


default.jsp

[java] view plain copy
  1. <%@ page language="java" pageEncoding="UTF-8" contentType="text/html;charset=UTF-8"%>  
  2. <%@ include file="../includes/taglibs.jsp"%>  
  3. <!doctype html>  
  4. <html>  
  5. <head>  
  6.     <title><sitemesh:write property='title' /></title>  
  7.     <meta http-equiv="Content-Type" content="text/html; charset=GBK"/>  
  8.     <link rel="stylesheet" type="text/css" href="<c:url value='/resources/css/style.css'/>" />  
  9.     <sitemesh:write property='head' />  
  10.     <script type="text/javascript" src="<c:url value='/resources/js/jquery.js'/>"></script>  
  11. </head>         
  12.     <div id="page">  
  13.         <div id="header">  
  14.             <jsp:include page="../includes/header.jsp"/>  
  15.         </div>  
  16.         <div id="content">  
  17.             <ul id="tabmenu">  
  18.                 <li><a href="<c:url value='/'/>" class="current">首页</a></li>  
  19.             </ul>  
  20.             <div id="tabcontent">  
  21.                 <sitemesh:write property='body'></sitemesh:write>  
  22.             </div>  
  23.         </div>  
  24.         <div id="footer">  
  25.             <jsp:include page="../includes/footer.jsp"/>  
  26.         </div>  
  27.     </div>  
  28. </body>  
  29. </html>  


顺带着提下log4j2.xml

[html] view plain copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <Configuration status="WARN">  
  3.   <Appenders>  
  4.     <Console name="Console" target="SYSTEM_OUT">  
  5.       <PatternLayout pattern="%d{YYYY-MM-dd HH:mm:ss.SSS} [%t] %-5level %l %msg%n"/>  
  6.     </Console>  
  7.       
  8.     <RollingFile name="test_logger" filename="${sys:catalina.home}/logs/test_logger.log"  
  9.       filepattern="${sys:catalina.home}/logs/test_logger.%d{yyyy-MM-dd-HH}.log">  
  10.     <PatternLayout pattern="%d{YYYY-MM-dd HH:mm:ss.SSS} %5p [%t] %c(%F:%L) - %msg%n" />  
  11.       <Policies>  
  12.         <!-- 文件大小配置 -->  
  13.         <SizeBasedTriggeringPolicy size="100 KB"/>  
  14.       </Policies>   
  15.        <!-- 共存log文件数量 -->  
  16.        <DefaultRolloverStrategy max="20"/>  
  17.     </RollingFile>  
  18.       
  19.   </Appenders>  
  20.     
  21.   <Loggers>  
  22.     <Root level="info">  
  23.       <AppenderRef ref="Console"/>  
  24.     </Root>  
  25.     <!-- springMVC log配置 -->  
  26.     <Logger name="org.springframework.web" level="info" additivity="false">  
  27.       <AppenderRef ref="Console"/>  
  28.     </Logger>  
  29.     <!-- log文件配置 -->  
  30.     <Logger name="test_logger" level="info" additivity="true">  
  31.       <AppenderRef ref="test_logger"/>  
  32.     </Logger>  
  33.   </Loggers>  
  34. </Configuration>  

七、异常处理(具体可参见《spring实战第四版》)

这里配置全局异常处理APPWideExceptionHandler.java

[java] view plain copy
  1. /** 
  2.  *  
  3.  */  
  4. package com.mango.jtt.controller;  
  5.   
  6. import org.springframework.web.bind.annotation.ControllerAdvice;  
  7. import org.springframework.web.bind.annotation.ExceptionHandler;  
  8.   
  9. /** 
  10.  * 全局异常处理器 
  11.  *  
  12.  * @author HHL 
  13.  *  
  14.  * @date 2016年11月23日 
  15.  */  
  16. @ControllerAdvice  
  17. public class APPWideExceptionHandler {  
  18.   
  19.     @ExceptionHandler(Exception.class)  
  20.     public String exceptionHandler(){  
  21.         return "errorPage/404";  
  22.     }  
  23. }  

404.jsp

[java] view plain copy
  1. <h2>Sorry, that page doesn't exist!</h2>  


八、运行效果如下:


九、springMVC框架图


原创粉丝点击