对应第15章
操作普通属性和方法的例子
例:
配置web.xml
写类 public class Student{} (P351)
// 创建Action类 OGNLAction.java
package com.lyq.action;
import java.util.Map;
import com.lyq.bean.Student;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class OGNLAction extends ActionSupport {
private static final long serialVersionUID = 1L;
// 普通属性name
private String name;
// 学生对象
private Student student ;
// Map类型的request
Map<String, Object> request;
// 构造方法
@SuppressWarnings("unchecked")
public OGNLAction(){
// 实例化学生对象
student = new Student();
// 对学号赋值
student.setId(1);
// 对学生姓名赋值
student.setName("张三");
// 对name赋值
name = "tom";
// 获取Map类型的request
request = (Map<String, Object>) ActionContext.getContext().get("request");
}
// 请求处理方法
@Override
public String execute() throws Exception {
// 向request添加值
request.put("info", "request测试");
// 返回SUCCESS
return SUCCESS;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Student getStudent() {
return student;
}
public void setStudent(Student student) {
this.student = student;
}
}
// struts.xml----------------------------------------------
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
"http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<!-- 声明常量 -->
<constant name="struts.devMode" value="true"></constant>
<package name="myPackage" extends="struts-default" namespace="/">
<!-- 定义action -->
<action name="ognl" class="com.lyq.action.OGNLAction">
<!-- 结果映射 -->
<result name="success">success.jsp</result>
</action>
</package>
</struts>
// success.jsp-------------------------------------
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ 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>OGNL操作普通属性</title>
</head>
<body>
<div>
<h1>操作普通属性</h1>
属性name值:<s:property value="name"/>
<br><hr>
学号:<s:property value="student.id"/><br>
<!--
也可以使用<s:property value="student['id']"/>
-->
姓名:<s:property value="student.name"/><br>
say()方法:<s:property value="student.say()"/>
<br><hr>
rquest中的inof值:<s:property value="#request['info']"/>
<br>
rquest中的inof值:<%= request.getAttribute("info") %>
</div>
</body>
</html>
// index.jsp------------------------------
.........
<body>
<a href="ognl.action">测试</a>
</body>
拦截器
拦截器是个接口,代码如下:
public interface Interceptor extends Serializable{
void destory();
void init();
String intercept(ActionInvocation invocation) throws Exception;
不好用,自己写拦截器时可以继承系统的拦截器抽象类AbstractInterceptor。
案例:为Action对象配置输出执行时间的拦截器,查看执行Action所学的时间。
将Struts2的包放入,配置web.xml在里面添加:
<!-- Struts2过滤器 -->
<filter>
<!-- 过滤器名称 -->
<filter-name>struts2</filter-name>
<!-- 过滤器类 -->
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<!-- Struts2过滤器映射 -->
<filter-mapping>
<!-- 过滤器名称 -->
<filter-name>struts2</filter-name>
<!-- 过滤器映射 -->
<url-pattern>/*</url-pattern>
</filter-mapping>
// TestAction.java-----------------------------
package com.lyq.action;
import com.opensymphony.xwork2.ActionSupport;
public class TestAction extends ActionSupport {
private static final long serialVersionUID = 1L;
public String execute() throws Exception{
// 线程睡眠1秒
Thread.sleep(1000);
return SUCCESS;
}
}
// struts.xml---------------------
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
"http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<!-- 声明常量(开发模式) -->
<constant name="struts.devMode" value="true" />
<!-- 声明常量(在Struts2的配置文件修改后,自动加载) -->
<constant name="struts.configuration.xml.reload" value="true" />
<!-- 声明包 -->
<package name="myPackge" extends="struts-default">
<!-- 配置Action -->
<action name="testAction" class="com.lyq.action.TestAction">
<!-- 配置拦截器,此处的timer拦截器是Struts的内置拦截器-->
<interceptor-ref name="timer" />
<!-- 配置返回页面 -->
<result>success.jsp</result>
</action>
</package>
</struts>
// index.jsp
<body>
<a href="testAction.action">测试</a>
</body>
// success.jsp
<body>
测试成功,请查看控制台程序的用时。
</body>
***注:执行Action所用时间可以在控制台看到。
案例:struts标签下的用户注册
将Struts2的包放入,配置web.xml在里面添加内容和上面的差不多。
// UserAction.java
package com.lyq.action;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport{
private static final long serialVersionUID = 1L;
// 用户名
private String name;
// 密码
private String password;
// 描述
private String description;
// 性别
private int sex = 0;
// 省份
private String province;
// 爱好
private String[] hobby;
// 用户注册
public String execute() throws Exception {
return SUCCESS;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
。。。。。。。。。。。。。。。。。
public int getSex() {
return sex;
}
public void setSex(int sex) {
this.sex = sex;
}
public String getProvince() {
return province;
}
public void setProvince(String province) {
this.province = province;
}
public String[] getHobby() {
return hobby;
}
public void setHobby(String[] hobby) {
this.hobby = hobby;
}
}
// struts.xml
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
"http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<!-- 声明常量(开发模式) -->
<constant name="struts.devMode" value="true" />
<!-- 声明包 -->
<package name="myPackge" extends="struts-default">
<action name="userAction" class="com.lyq.action.UserAction">
<result>success.jsp</result>
</action>
</package>
</struts>
// index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
........
<body>
<h2>用户注册</h2>
<s:form action="userAction" method="post">
<s:textfield name="name" label="用户名" required="true" requiredposition="left"></s:textfield>
<s:password name="password" label="密码" required="true" requiredposition="left"></s:password>
<s:radio name="sex" list="#{1 : '男', 0 : '女'}" label="性别" required="true" requiredposition="left"></s:radio>
<s:select list="{'请选择省份','吉林','广东','山东','河南'}" name="province" label="省份"></s:select>
<s:checkboxlist list="{'足球','羽毛球','乒乓球','蓝球'}" name="hobby" label="爱好"></s:checkboxlist>
<s:textarea name="description" cols="30" rows="5" label="描述"></s:textarea>
<s:submit value="注册"></s:submit>
<s:reset value="重置"></s:reset>
</s:form>
</body>
// success.jsp
<body>
<h3>恭喜您,注册成功!</h3>
<ul>
<li>用户名:<s:property value="name"/></li>
<li>密码:<s:property value="password"/></li>
<li>性别:<s:if test="sex==0">女</s:if><s:else>男</s:else></li>
<li>省份:<s:property value="province"/></li>
<li>爱好:<s:property value="hobby"/></li>
<li>描述:<s:property value="description"/></li>
</ul>
</body>
界面如图:
本文介绍Struts2框架的应用实践,包括配置web.xml、创建Action类处理请求、使用OGNL表达式操作属性及方法,同时演示了如何通过自定义拦截器记录Action执行时间,并展示了用户注册的具体实现。
658

被折叠的 条评论
为什么被折叠?



