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

123 篇文章 0 订阅
27 篇文章 3 订阅

一、简单说明

本篇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>


八、运行效果如下:

九、完整代码下载:

https://github.com/honghailiang/SpringMango


十、springMVC框架图










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值