12、Struts2高级技术

来源:互联网 发布:python高手之路 第3版 编辑:程序博客网 时间:2024/06/14 05:29

对应第15章

操作普通属性和方法的例子
例:

配置web.xml写类 public class Student{}  (P351)//  创建Action类 OGNLAction.javapackage 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.javapackage 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>

界面如图:
这里写图片描述

0 0