一、簡單說明
本篇springMVC的配置涉及到springMVC配置、sitemesh配置、log4j2的配置
二、相關庫文件
根據myeclipse中創建gradle web項目建立完成後(建議使用idea進行,本系列也已用idea進行分析),在build.gradle中添加下面庫文件
- apply plugin: 'java'
- apply plugin: 'war'
- sourceCompatibility = 1.5
- version = '1.0'
- jar {
- manifest {
- attributes 'Implementation-Title': 'Gradle Quickstart',
- 'Implementation-Version': version
- }
- }
- repositories {
- jcenter()
- mavenCentral()
- }
- dependencies {
- compile group: 'commons-collections', name: 'commons-collections', version: '3.2'
- testCompile group: 'junit', name: 'junit', version: '4.+'
- //servlet
- providedCompile group: 'javax.servlet', name: 'javax.servlet-api', version: '3.1.0' //在配置apply plugin: 'war'纔可用
- runtime("jstl:jstl:1.2")
- //spring
- def springVersion = "4.3.2.RELEASE";
- compile "org.springframework:spring-context:$springVersion"
- compile "org.springframework:spring-core:$springVersion"
- compile "org.springframework:spring-webmvc:$springVersion"
- //sitemesh
- compile "org.sitemesh:sitemesh:3.0.0"
- //log4j2
- def log4j_version = "2.2";
- compile "org.apache.logging.log4j:log4j-api:$log4j_version"
- compile "org.apache.logging.log4j:log4j-core:$log4j_version"
- compile "org.apache.logging.log4j:log4j-slf4j-impl:$log4j_version"
- }
- test {
- systemProperties 'property': 'value'
- }
- uploadArchives {
- repositories {
- flatDir {
- dirs 'repos'
- }
- }
- }
三、web.xml
雖然spring從3.1版本後可以採用Java配置的方式配置springMVC(具體可參見《spring實戰第四版》)。但本文還是採用傳統的web.xml配置方式
- <?xml version="1.0" encoding="UTF-8"?>
- <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">
- <display-name>SpringMango</display-name>
- <!--==================== LISTENER Spring容器====================-->
- <context-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>classpath*:applicationContext-*.xml</param-value>
- </context-param>
- <listener>
- <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
- </listener>
- <!-- 防止內存泄漏 -->
- <listener>
- <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
- </listener>
- <!--==================== SERVLET Spring MVC====================-->
- <servlet>
- <servlet-name>Mango</servlet-name>
- <servlet-class>
- org.springframework.web.servlet.DispatcherServlet
- </servlet-class>
- <load-on-startup>1</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>Mango</servlet-name>
- <url-pattern>/</url-pattern>
- </servlet-mapping>
- <!--START 設置字符編碼過濾器-->
- <filter>
- <description>字符集過濾器</description>
- <filter-name>encodingFilter</filter-name>
- <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
- <init-param>
- <description>字符集編碼</description>
- <param-name>encoding</param-name>
- <param-value>UTF-8</param-value>
- </init-param>
- </filter>
- <filter-mapping>
- <filter-name>encodingFilter</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- <!--END 設置字符編碼過濾器-->
- <!--sitemesh裝飾器-->
- <filter>
- <filter-name>sitemesh</filter-name>
- <filter-class>
- org.sitemesh.config.ConfigurableSiteMeshFilter
- </filter-class>
- <init-param>
- <param-name>ignore</param-name>
- <param-value>true</param-value>
- </init-param>
- <init-param>
- <param-name>encoding</param-name>
- <param-value>GBK</param-value>
- </init-param>
- </filter>
- <filter-mapping>
- <filter-name>sitemesh</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- </web-app>
DispatcherServlet配置文件採用默認從/WEB-INF/下Mango-servlet.xml加載的方式,也可以通過contextConfigLocation指定xml文件路徑:
- <servlet>
- <servlet-name>Mango</servlet-name>
- <servlet-class>
- org.springframework.web.servlet.DispatcherServlet
- </servlet-class>
- <init-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>classpath*:Mango-servlet.xml</param-value>
- </init-param>
- <load-on-startup>1</load-on-startup>
- </servlet>
四、servlet配置文件:Mango-servlet.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:context="http://www.springframework.org/schema/context"
- xmlns:mvc="http://www.springframework.org/schema/mvc"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context.xsd
- http://www.springframework.org/schema/mvc
- http://www.springframework.org/schema/mvc/spring-mvc.xsd">
- <!-- 掃描web包,應用Spring的註解 -->
- <mvc:annotation-driven/>
- <context:component-scan base-package="com.mango.jtt.controller"/>
- <!-- jsp視圖 -->
- <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
- <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
- <property name="prefix" value="/WEB-INF/views/jsp/"/>
- <property name="suffix" value=".jsp"/>
- </bean>
- <!-- 靜態資源不走controller -->
- <mvc:resources mapping="/resources/**" location="/resources/" />
- <!-- or <mvc:default-servlet-handler/> 與上面mvc:resources標籤選其一即可,這裏如果配置,必須配置<mvc:annotation-driven/>其他controller纔可正常工作-->
- </beans>
通過<mvc:annotation-driven/>啓用springMVC的註解配置,該標籤註冊了多個特性:包括JSR-303校驗支持,信息轉換以及對域格式化的支持。
<context:component-scan/>標籤時查找對應支持的註解類並註冊到容器中的bean
<mvc:resources/>標籤配置靜態資源文件不需要走控制器,直接映射到mapping下,該標籤3.0.4及以後纔有
五、controller
- /**
- *
- */
- package com.mango.jtt.controller;
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.RequestMapping;
- /**
- * @author HHL
- *
- * @date 2016年11月22日
- */
- @Controller
- public class PageController {
- /**
- * 首頁 映射/和/index路徑
- *
- * @return
- * @throws Exception
- */
- @RequestMapping({ "/", "/index" })
- public String index() throws Exception {
- return "index";
- }
- }
六、index.jsp
採用了sitemesh裝飾器
- <%@ page language="java" pageEncoding="UTF-8" contentType="text/html;charset=UTF-8"%>
- <%@ include file="../includes/taglibs.jsp"%>
- <!DOCTYPE html>
- <html>
- <head>
- <title>Mango-Index</title>
- <meta name="menu" content="home" />
- </head>
- <body>
- <h1>歡迎光臨!</h1>
- <div style="text-align:center"><img src="<c:url value='/resources/images/team.jpg'/>" /></div>
- </body>
- </html>
裝飾器sitemesh3.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <sitemesh>
- <mapping path="/" decorator="/WEB-INF/views/decorators/default.jsp" />
- <mapping path="/index" decorator="/WEB-INF/views/decorators/default.jsp" />
- </sitemesh>
default.jsp
- <%@ page language="java" pageEncoding="UTF-8" contentType="text/html;charset=UTF-8"%>
- <%@ include file="../includes/taglibs.jsp"%>
- <!doctype html>
- <html>
- <head>
- <title><sitemesh:write property='title' /></title>
- <meta http-equiv="Content-Type" content="text/html; charset=GBK"/>
- <link rel="stylesheet" type="text/css" href="<c:url value='/resources/css/style.css'/>" />
- <sitemesh:write property='head' />
- <script type="text/javascript" src="<c:url value='/resources/js/jquery.js'/>"></script>
- </head>
- <div id="page">
- <div id="header">
- <jsp:include page="../includes/header.jsp"/>
- </div>
- <div id="content">
- <ul id="tabmenu">
- <li><a href="<c:url value='/'/>" class="current">首頁</a></li>
- </ul>
- <div id="tabcontent">
- <sitemesh:write property='body'></sitemesh:write>
- </div>
- </div>
- <div id="footer">
- <jsp:include page="../includes/footer.jsp"/>
- </div>
- </div>
- </body>
- </html>
順帶着提下log4j2.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <Configuration status="WARN">
- <Appenders>
- <Console name="Console" target="SYSTEM_OUT">
- <PatternLayout pattern="%d{YYYY-MM-dd HH:mm:ss.SSS} [%t] %-5level %l %msg%n"/>
- </Console>
- <RollingFile name="test_logger" filename="${sys:catalina.home}/logs/test_logger.log"
- filepattern="${sys:catalina.home}/logs/test_logger.%d{yyyy-MM-dd-HH}.log">
- <PatternLayout pattern="%d{YYYY-MM-dd HH:mm:ss.SSS} %5p [%t] %c(%F:%L) - %msg%n" />
- <Policies>
- <!-- 文件大小配置 -->
- <SizeBasedTriggeringPolicy size="100 KB"/>
- </Policies>
- <!-- 共存log文件數量 -->
- <DefaultRolloverStrategy max="20"/>
- </RollingFile>
- </Appenders>
- <Loggers>
- <Root level="info">
- <AppenderRef ref="Console"/>
- </Root>
- <!-- springMVC log配置 -->
- <Logger name="org.springframework.web" level="info" additivity="false">
- <AppenderRef ref="Console"/>
- </Logger>
- <!-- log文件配置 -->
- <Logger name="test_logger" level="info" additivity="true">
- <AppenderRef ref="test_logger"/>
- </Logger>
- </Loggers>
- </Configuration>
七、異常處理(具體可參見《spring實戰第四版》)
這裏配置全局異常處理APPWideExceptionHandler.java
- /**
- *
- */
- package com.mango.jtt.controller;
- import org.springframework.web.bind.annotation.ControllerAdvice;
- import org.springframework.web.bind.annotation.ExceptionHandler;
- /**
- * 全局異常處理器
- *
- * @author HHL
- *
- * @date 2016年11月23日
- */
- @ControllerAdvice
- public class APPWideExceptionHandler {
- @ExceptionHandler(Exception.class)
- public String exceptionHandler(){
- return "errorPage/404";
- }
- }
404.jsp
- <h2>Sorry, that page doesn't exist!</h2>
八、運行效果如下:
九、springMVC框架圖