步骤
- 导入jar包,核心包struts2-core.xxx.jar、xwork-core.xxx.jar。
-
在Web项目上,支持Struts2特性:在web.xml中定义一个filter。这个filter就是FilterDispatcher类的具体实现类:StrutsPrepareAndExecuteFilter
1 2 3 4 5 6 7 8 9 10
<filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter </filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
- 创建视图层,我们使用JSP技术,创建了三个不同的页面。
- 创建Action模型类,PersonAction类。
- 创建配置文件struts.xml文件,名字默认“struts.xml”。
- 过滤器会读取“struts.xml”。
-
struts.xml文件中,继承struts-default。
1
<package name="person" namespace="/person" extends="struts-default">
相当于我们有了Struts2提供的默认的拦截器或拦截器栈配置。例如:
- 处理乱码
- 封装请求数据
- 国际化
- ServletContext
- ServletConfig
- Session
- Request
- 配置action,对应url和action类;以及返回的result视图。
- 启动Tomcat。
目录结构
web.xml
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
<?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_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>Struts2MVCDemo</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
struts.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
<!-- 不需要默认Spring容器管理Struts -->
<constant name="struts.objectFactory"
value="com.opensymphony.xwork2.ObjectFactory"></constant>
<!-- hello1请求
必须要指定name属性;
namespace命名空间
package就是要区分请求包名
-->
<package name="person" namespace="/person" extends="struts-default">
<action name="hello1" class="com.bbs.action.PersonAction">
<result name="success">/WEB-INF/success.jsp</result>
</action>
</package>
</struts>
PersonAction.java
1
2
3
4
5
6
7
8
9
10
11
12
package com.bbs.action;
// struts2 Action层
public class PersonAction {
// 默认执行
public String execute() {
// 返回result结果,视图名字
return "success";
}
}
index.jsp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index页面</title>
</head>
<body>
index
<a href="http://localhost:8080/Struts2MVCDemo/person/hello1">
请求链接-------PersonAction中的方法
</a>
</body>
</html>
success.jsp
1
2
3
4
5
6
7
8
9
10
11
12
13
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Success页面</title>
</head>
<body>
success
</body>
</html>
error.jsp
1
2
3
4
5
6
7
8
9
10
11
12
13
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Error页面</title>
</head>
<body>
success
</body>
</html>
异常
由于我们使用的是独立的Struts2的jar包,所以关闭使用Spring的管理即可解决以上异常。正常的项目中是不需要关闭的。
1
2
3
<!-- 不需要默认Spring容器管理struts -->
<constant name="struts.objectFactory"
value="com.opensymphony.xwork2.ObjectFactory"></constant>