Struts2笔记:
一:简单的例子
1. 导入jar包Struts2-core-2.0.6.jar、xwork-2.0.1.jar和ognl-2.6.11.jar
2. 配置web.xml
<display-name>Struts 2.0 Hello World</display-name>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3. 在src中加入struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<!-- Struts 2的Action必须放在指定的包空间下定义 -->
<package name="com.dyp.struts2" extends="struts-default">
<!-- 定义login的Action,该Action的实现类为lee.Action类 -->
<action name="Login" class="com.dyp.struts2.action.LoginAction">
<!-- 定义处理结果和资源之间映射关系。 -->
<result name="error">/error.jsp</result>
<result name="success">/welcome.jsp</result>
<!-- 定义input的逻辑视图名,对应login.jsp页面 -->
<result name="input">/login.jsp</result>
</action>
<action name="Friend" class="com.dyp.struts2.action.FriendAction">
<!-- 如果处理结果返回login,进入login.jsp页面 -->
<result name="login">/login.jsp</result>
<!-- 如果处理结果返回success,进入showBook.jsp页面 -->
<result name="success">/showFriend.jsp</result>
</action>
</package>
</struts>
4. 登录jsp
<!-- 使用form标签生成表单元素 -->
<s:form action="Login">
<!-- 生成一个用户名文本输入框 -->
<s:textfield name="username" label="用户名" />
<!-- 生成一个密码文本输入框 -->
<s:textfield name="password" label="密 码" />
<!-- 生成一个提交按钮 -->
<s:submit value="登录" />
</s:form>
5. Action
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport {
public void validate() {
//如果用户名为空,或者用户名为空字符串
if (getUsername() == null || getUsername().trim().equals(""))
{
//添加表单校验错误
addFieldError("username", "user.required");
}
//当密码为空,或者密码为空字符串时,添加表单校验错误
if (getPassword() == null || getPassword().trim().equals(""))
{
addFieldError("password", "pass.required");
}
}
//下面是Action内用于封装用户请求参数的两个属性
private String username;
private String password;
//username属性对应的getter方法
public String getUsername()
{
return username;
}
//username属性对应的setter方法
public void setUsername(String username)
{
this.username = username;
}
//password属性对应的getter方法
public String getPassword()
{
return password;
}
//password属性对应的setter方法
public void setPassword(String password)
{
this.password = password;
}
//处理用户请求的execute方法
public String execute() throws Exception
{
//当用户请求参数的username等于scott,密码请求参数为tiger时,返回success字符串
//否则返回error字符串
if (getUsername().equals("scott")
&& getPassword().equals("tiger") )
{
ActionContext.getContext().getSession().put("user" , getUsername());
return "success";
}
else
{
return "error";
}
}
}
6. welcome界面
<h2>欢迎${sessionScope.user},您已经登录!</h2>
<h2><a href="Friend.action">查看好友</a></h2>
7. FriendAction
import com.dyp.struts2.services.FriendServices;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
public class FriendAction implements Action {
private String[] friends;
public String[] getFriends() {
return friends;
}
public void setFriends(String[] friends) {
this.friends = friends;
}
public String execute() throws Exception {
//获取Session中的user属性
String user = (String)ActionContext.getContext().getSession().
get("user");
//如果user属性不为空,且该属性值为scott
if (user != null && user.equals("scott"))
{
FriendServices fs = new FriendServices();
//将业务逻辑组件的返回值设置成该Action的属性
this.setFriends(fs.getFriends());
return SUCCESS;
}
else
{
return LOGIN;
}
}
}
8. 业务处FriendServices
public class FriendServices {
//以一个常量数组模拟了从持久存储设备(数据库)中取出的数据
private String[] users =
new String[]{
"dyp" ,
"祝叶",
"dypzy",
"dt"
};
//业务逻辑方法,该方法返回全部图书
public String[] getFriends()
{
return users;
}
}
9. showFriend.jsp
<caption>
${sessionScope.user}的好友
</caption>
<s:iterator value="friends" status="index">
<!-- 判断序号是否为奇数 -->
<s:if test="#index.odd == true">
<tr style="background-color: #cccccc">
</s:if>
<!-- 判断迭代元素的序号是否不为偶数 -->
<s:else>
<tr>
</s:else>
<td>
书名:
</td>
<td>
<s:property />
</td>
</tr>
</s:iterator>
</table>
如果不用struts2的标签,那么需要用下面的处理方式
<%@page import="java.util.*,com.opensymphony.xwork2.util.*"%>
<%
//获取封装输出信息的ValueStack对象
ValueStack vs = (ValueStack) request
.getAttribute("struts.valueStack");
//调用ValueStack的fineValue方法获取Action中的books属性值
String[] friends = (String[]) vs.findValue("friends");
//迭代输出全部图书信息
for(int i=0;i<friends.length;i++)
{
%>
<tr>
<td>
姓名:
</td>
<td><%=friends[i]%></td>
</tr>
<%
}
%>