【转】jsp Session 在struts 2.0使用

来源:互联网 发布:php isset 编辑:程序博客网 时间:2024/06/05 03:38
一、安装Struts 2.0
可以从Struts官方网站 http://struts.apache.org/ 下载Struts2的发行包。将发行包中lib文件夹下的下列jar文件复制到应用的/WEB-INF/lib下。这些jar文件是运行简单Struts2应用的最小集合。
struts-core-2.1.2.jar
xwork-2.1.1.jar
ognl-2.6.11.jar
commons-logging-1.0.4.jar
commons-fileupload-1.2.1.jar
freemarker-2.3.12.jar
二、配置FilterDispatcher过滤器
在web.xml中按如下配置: 
   ... ... ...
   <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>
   ... ... ...
    FilterDispatcher是Struts2提供的过滤器,可以看成Struts2的前端控制器,它将截获所有请求。针对形如“*.action”的请求,Struts2最终将调用合适的action组件实现业务流程处理,例如:若用户的请求为:“.../logon.action”将最终调用名为logon的Action类的execute方法。
   由于采用了动态代理机制,Struts2的Action不在需要继承Struts提供的类(Struts1的Action需要继承org.apache.struts.action.Action类),Struts2的Action可以是一个普通的Java类,称之为POJO(普通而平凡的Java类),这正是时下盛行的“低侵入性”的体现。
三、配置Action
    Struts2需要有struts.xml配置文件用于指定action等配置信息,该文件应置于应用类路径(/WEB-INF/classes)中,如果使用Eclipse开发工具,在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>
      <package name="some" extends="struts-default" namespace="/test">
        <action name="logon" class="action.LogonAction">
          <result name="success">/view/success.jsp</result>
          <result name="error">/view/logon_form.jsp</result>
       </action>
     </package>
   </struts>
   ... ... ...
       
    其中package元素用于定义包,Struts2中的包类似于Struts1的模块,一个包可以包含多个action、interceptor等组件的的定义。一个包看成一系列action、interceptor等组件的集合。package元素的主要属性有name、extends和namespace。
  1. name属性用于指定该包的名称,是用于引用该包的标识。
  2. extends属性用于指定该包所继承的包,一个包继承另外一个包就拥有了另外一个包的所有定义。此处名为some的包继承了Struts自定义的struts-default包,这是必要的,因为struts-default包定义了应用必须使用到的一些组件。struts-default包的定义在struts-default.xml文件中,该文件位于struts-core-2.1.2.jar中,在应用启动时被自动加载。
  3. namespace属性用于定义该包的命名空间。一个包如果定义了命名空间后,该包中的所有action的对应的URI为: “/应用名/所在包的命名空间名/acion名.action” 例如,上述文件中名为logon的acion所对应的URI为“/应用名/test/logon.action”。如果不指定namespace属性,则默认的namespace属性值为“”,其对应包中的action的URI为“/应用名/acion名.action”。
    元素的定义Action组件,其主要属性name和class:
  1. name属性用于指定action的名称,用于标识该action,与该action对应的URI为“.../action名称.action”。
  2. class属性用于指定该action对应的类名,该类可以是一个普通的POJO,通过execute方法封装业务处理流程。
    元素的子元素类似于Struts1中的forward定义。将action所转向的页面地址映射为字符串名称。action类的execute方法将返回一个字符串,即表示所定义的页面名称,Struts2将转向到该名称所对应的页面地址。上述配置文件中的两个分别表示登录成功(success)和失败(error)后所转向的地址。
四.action类
   与Struts1不同,Struts2的Action类可以不需要ActionForm为其传送表单数据。Struts2的Action类可以通过自己属性获得表单数据,例如下面LogonAction,当用户请求“../test/logon.action”时,Struts2将创建LogonAction实例,并调用setter方法填充其username和password属性。LogonAction的message属性用于记录向页面输出的结果,将存放在request中。
   另外,Struts1的Action以单实例的方式工作,而Struts2会为每次请求创建新的Action实例,不存在线程安全的问题。
    Action的execute方法用于处理业务流程。该方法应返回一个字符串参数,与相应action配置的result元素对应,表示应转向的页面地址。
  需要注意的是,虽然Struts2的Action采取了与HTTPServlet低耦合的设计方式,但需要访问Servlet API的情况还是经常有的。可以通过ActionContext类获得对request,session等Servlet API进行访问的途径,如:下面类中的 “ctx.getSession().put("username", username);”用于在HTTPSession对象中存入数据。
import com.opensymphony.xwork2.ActionContext;
public class LogonAction {
    private String username;
    private String password;
    private String message;
    //getter and setter
    ... ... ...
   public String execute() {
        if ("whatisjava".equals(username) && "java".equals(password)) {
            ActionContext ctx = ActionContext.getContext();
            ctx.getSession().put("username", username);
            setMessage("
成功登入");
            return "success";
        } else {
            setMessage("
用户名或密码错误");
            return "error";
        }
    }
}

 
五、JSP页面
   logon_form.jsp为登录表单,success.jsp为登录后的成功页面,此处没有使用Struts2所提供的标签库,与普通JSP没有相比无特殊之处,注意:通过EL“${requestScope.message}”显示Action的输出信息。
   logon_form.jsp主要内容如下:
   ... ... ...
    <form action="test/logon.action" method="post">
      <table cellpadding="0" cellspacing="0" border="0"
       class="form_table">
       <tr>
        <td valign="middle" align="right">
        
用户名:
        </td>
        <td valign="middle" align="left">
         <input type="text" class="inputgri" name="username" />
        </td>
       </tr>
       <tr>
        <td valign="middle" align="right">
        
密码:
        </td>
        <td valign="middle" align="left">
         <input type="password" class="inputgri" name="password" />
        </td>
       </tr>
      </table>
      <p>
       <input type="submit" class="button" value="
提交 &raquo;" />
      </p>
     </form>
     <p>
      ${requestScope.message}
     </p>

     ... ... ...
  
    success.jsp主要内容如下:
   ... ... ...
    <div id="content">
     <p id="whereami">
     </p>
     <h1>
      ${requestScope.message}
     </h1>
     <p>
欢迎你,${sessionScope.username}</p>
    </div>
    ... ... ...
原创粉丝点击