1
2
3
4
5
6
7
8
9
10
11
|
<web-app>
<servlet>
<servlet-name>example</servlet-name>
<servlet-
class
>org.springframework.web.servlet.DispatcherServlet</servlet-
class
>
<load-on-startup>
1
</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>example</servlet-name>
<url-pattern>*.form</url-pattern>
</servlet-mapping>
</web-app>
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<servlet>
<servlet-name>springMVC</servlet-name>
<servlet-
class
>org.springframework.web.servlet.DispatcherServlet</servlet-
class
>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:/springMVC.xml</param-value>
</init-param>
<load-on-startup>
1
</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
|
1
2
3
|
<listener>
<listener-
class
>org.springframework.web.context.ContextLoaderListener</listener-
class
>
</listener>
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
<!-- 自动扫描的包名 -->
<context:component-scanbase-
package
=
"com.app,com.core,JUnit4"
></context:component-scan>
<!-- 默认的注解映射的支持 -->
<mvc:annotation-driven/>
<!-- 视图解释类 -->
<beanclass=
"org.springframework.web.servlet.view.InternalResourceViewResolver"
>
<propertyname=
"prefix"
value=
"/WEB-INF/jsp/"
/>
<propertyname=
"suffix"
value=
".jsp"
/><!--可为空,方便实现自已的依据扩展名来选择视图解释类的逻辑 -->
<propertyname=
"viewClass"
value=
"org.springframework.web.servlet.view.JstlView"
/>
</bean>
<!-- 拦截器 -->
<mvc:interceptors>
<beanclass=
"com.core.mvc.MyInteceptor"
/>
</mvc:interceptors>
<!-- 对静态资源文件的访问 方案一 (二选一) -->
<mvc:
default
-servlet-handler/>
<!-- 对静态资源文件的访问 方案二 (二选一)-->
<mvc:resourcesmapping=
"/images/**"
location=
"/images/"
cache-period=
"31556926"
/>
<mvc:resourcesmapping=
"/js/**"
location=
"/js/"
cache-period=
"31556926"
/>
<mvc:resourcesmapping=
"/css/**"
location=
"/css/"
cache-period=
"31556926"
/>
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<servlet-mapping>
<servlet-name>
default
</servlet-name>
<url-pattern>*.jpg</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>
default
</servlet-name>
<url-pattern>*.js</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>
default
</servlet-name>
<url-pattern>*.css</url-pattern>
</servlet-mapping>
要配置多个,每种文件配置一个
|
1
|
<beanclass=
"org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"
></bean>
|
1
2
3
|
publicclass MyInteceptor
implements
HandlerInterceptor {
略。。。
}
|
1
2
3
|
<mvc:interceptors>
<bean
class
=
"com.app.mvc.MyInteceptor"
/>
</mvc:interceptors>
|
1
2
3
4
5
6
|
<mvc:interceptors>
<mvc:interceptor>
<mvc:mappingpath=
"/user/*"
/><!-- /user/* -->
<beanclass=
"com.mvc.MyInteceptor"
></bean>
</mvc:interceptor>
</mvc:interceptors>
|
1
2
3
4
5
6
7
|
<beanclass=
"org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"
>
<propertyname=
"interceptors"
>
<list>
<beanclass=
"com.mvc.MyInteceptor"
></bean>
</list>
</property>
</bean>
|
1
2
3
4
5
6
7
8
9
10
11
12
|
<!-- 总错误处理-->
<beanid=
"exceptionResolver"
class
=
"org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"
>
<propertyname=
"defaultErrorView"
>
<value>/error/error</value>
</property>
<propertyname=
"defaultStatusCode"
>
<value>
500
</value>
</property>
<propertyname=
"warnLogCategory"
>
<value>org.springframework.web.servlet.handler.SimpleMappingExceptionResolver</value>
</property>
</bean>
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
<%@ page language=
"java"
contentType=
"text/html; charset=GBK"
pageEncoding=
"GBK"
%>
<%@ page
import
=
"java.lang.Exception"
%>
<!DOCTYPE html PUBLIC
"-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"
>
<html>
<head>
<metahttp-equiv=
"Content-Type"
content=
"text/html; charset=GBK"
>
<title>错误页面</title>
</head>
<body>
<h1>出错了</h1>
<%
Exception e = (Exception)request.getAttribute(
"exception"
);
out.print(e.getMessage());
%>
</body>
</html>
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
package
test;
import
javax.servlet.http.HttpServletRequest;
import
javax.servlet.http.HttpServletResponse;
import
org.junit.BeforeClass;
import
org.springframework.mock.web.MockServletContext;
import
org.springframework.web.context.WebApplicationContext;
import
org.springframework.web.context.support.XmlWebApplicationContext;
import
org.springframework.web.servlet.HandlerAdapter;
import
org.springframework.web.servlet.HandlerExecutionChain;
import
org.springframework.web.servlet.HandlerMapping;
import
org.springframework.web.servlet.ModelAndView;
import
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter;
import
org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping;
/**
* 说明: JUnit测试action时使用的基类
*
*/
publicclass JUnitActionBase {
privatestatic HandlerMapping handlerMapping;
privatestatic HandlerAdapter handlerAdapter;
/**
* 读取spring3 MVC配置文件
*/
@BeforeClass
publicstaticvoid setUp() {
if
(handlerMapping ==
null
) {
String[] configs = {
"file:src/springConfig/springMVC.xml"
};
XmlWebApplicationContext context =
new
XmlWebApplicationContext();
context.setConfigLocations(configs);
MockServletContext msc =
new
MockServletContext();
context.setServletContext(msc); context.refresh();
msc.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, context);
handlerMapping = (HandlerMapping) context
.getBean(DefaultAnnotationHandlerMapping.
class
);
handlerAdapter = (HandlerAdapter) context.getBean(context.getBeanNamesForType(AnnotationMethodHandlerAdapter.
class
)[
0
]);
}
}
/**
* 执行request对象请求的action
*
* @param request
* @param response
* @return
* @throws Exception
*/
public
ModelAndView excuteAction(HttpServletRequest request, HttpServletResponse response)
throws
Exception {
HandlerExecutionChain chain = handlerMapping.getHandler(request);
final
ModelAndView model = handlerAdapter.handle(request, response,
chain.getHandler());
return
model;
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
package
test.com.app.user;
import
org.junit.Assert;
import
org.junit.Test;
import
org.springframework.mock.web.MockHttpServletRequest;
import
org.springframework.mock.web.MockHttpServletResponse;
import
org.springframework.web.servlet.ModelAndView;
import
test.JUnitActionBase;
/**
* 说明: 测试OrderAction的例子
*
*/
publicclass TestOrderAction
extends
JUnitActionBase {
@Test
publicvoid testAdd()
throws
Exception {
MockHttpServletRequest request =
new
MockHttpServletRequest();
MockHttpServletResponse response =
new
MockHttpServletResponse();
request.setRequestURI(
"/order/add"
);
request.addParameter(
"id"
,
"1002"
);
request.addParameter(
"date"
,
"2010-12-30"
);
request.setMethod(
"POST"
);
// 执行URI对应的action
final
ModelAndView mav =
this
.excuteAction(request, response);
// Assert logic
Assert.assertEquals(
"order/add"
, mav.getViewName());
String msg=(String)request.getAttribute(
"msg"
);
System.out.println(msg);
}
}
|