参考文献:https://www.w3cschool.cn/struts_2/
Struts2
在Struts2 的web应用程序里点击一个超链接或提交一个HTML表单时,会由控制器收集输入并发送一个叫Actions的Java类。Action被执行后,Result会选择一个资源给予响应。这个资源通常是一个JSP,也可以是一个PDF文件,一个Excel表格,或者是一个Java小程序窗口。
第一个程序helloworld
四个组件1
2
3
4Action(操作):创建一个动作类,包含完整的业务逻辑并控制用户、模型以及视图间的交互。
Interceptors(拦截器):这是控制器的一部分,可依据需求创建拦截器,或使用现有的拦截器。
View(视图):创建一个JSP与用户进行交互,获取输入并呈现最终信息。
Configuration Files(配置文件):创建配置文件来连接动作、视图以及控制器,这些文件分别是struts.xml、web.xml以及struts.properties。
需导入的jar包(lib目录下)
PS:第三个和第四个jar包一定要导入,缺一不可(因为这个扣了三天。。)
项目结构
代码
创建Aciton类(
HelloWorldAction.java
)1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18import com.opensymphony.xwork2.ActionSupport;
public class HelloWorldAction extends ActionSupport {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String execute() throws Exception {
if ("SECRET".equals(name))
{
return SUCCESS;
}else{
return ERROR;
}
}创建视图(
hello.jsp
)1
2
3
4
5
6
7
8
9
10
11<%@ taglib prefix="s" uri="/struts-tags" %>
<!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>Hello World</title>
</head>
<body>
Hello World, <s:property value="name"/>
</body>
</html>创建视图(
AccessDenied.jsp
)1
2
3
4
5
6<head>
<title>Access Denied</title>
</head>
<body>
You are not authorized to view this page.
</body>创建主页(
index.jsp
)1
2
3
4
5
6
7
8<body>
<h1>Hello World From Struts2</h1>
<form action="hello">
<label for="name">Please enter your name</label><br/>
<input type="text" name="name"/>
<input type="submit" value="Say Hello"/>
</form>
</body>配置文件(
struts.xml
)1
2
3
4
5
6
7
8
9
10
11
12<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.devMode" value="true" />
<package name="helloworld" extends="struts-default">
<action name="hello" class="cn.sheng.struts.HelloWorldAction">
<result name="success">/hello.jsp</result>
<result name="error">/AccessDenied.jsp</result>
</action>
</package>
</struts>web.xml
(为每个web应用程序提供接入点)1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20<filter>
<filter-name>strutsprepare</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareFilter</filter-class>
</filter>
<filter>
<filter-name>struts-execute</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>strutsprepare</filter-name>
<!--所有的url都会被Struts过滤器解析-->
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts-execute</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
运行结果
- 输入网址http://localhost:8080/HelloStruts/index.jsp
- 输入
SECRET
,得到Hello World, SECRET
- 输入
sheng
,得到You are not authorized to view this page.
验证框架
Action类
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
30private String name;
private int age;
public String execute() {
return SUCCESS;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
<!-- 验证内容 -->
public void validate()
{
if (name == null || name.trim().equals(""))
{
addFieldError("name","The name is required");
}
if (age < 28 || age > 65)
{
addFieldError("age","Age must be in between 28 and 65");
}
}
}创建视图(
success.jsp
)1
2
3
4
5
6<head>
<title>Success</title>
</head>
<body>
Employee Information is captured successfully.
</body>创建主页(
idnex.jsp
)1
2
3
4
5
6
7
8
9
10<head>
<title>Employee Form</title>
</head>
<body>
<s:form action="empinfo" method="post">
<s:textfield name="name" label="Name" size="20" />
<s:textfield name="age" label="Age" size="20" />
<s:submit name="submit" label="Submit" align="center" />
</s:form>
</body>配置文件(
struts.xml
)1
2
3
4
5
6
7
8
9<struts>
<constant name="struts.devMode" value="true" />
<package name="helloworld" extends="struts-default">
<action name="empinfo" class="cn.sheng.struts.HelloWorldAction">
<result name="input">/index.jsp</result>
<result name="success">/success.jsp</result>
</action>
</package>
</struts>web.xml
同上不用换
运行结果
- 输入网址http://localhost:8080/HelloStruts/index.jsp
- 输入的内容不符合上面的验证的时候会报错。