Struts2最新版(2.5.12)快速入门(二) Struts2之Action

来源:互联网 发布:淘宝店怎么发布宝贝 编辑:程序博客网 时间:2024/05/20 03:45

Struts2之Action


1、action与servlet


  在struts1中 一个Action类完全等同于一个servlet类,但在struts2中,你也可以把它看作是一个servlet类,因为其处理业务逻辑方式和servlet大致相同,但是其本质却和servlet没半毛钱关系。我们使用servlet处理业务逻辑的话,如果一个servlet类里面有多个处理业务逻辑请求的话就需要做很多的请求判断。这样一来不仅我们项目的性能会大打折扣,而且对于后期项目的维护也是特别蛋疼的,因为你自己都不知道哪些功能是哪些代码实现的!


使用Action的好处在于,一个Action类不仅可以包含多个处理业务逻辑的方法,而且只需要我们在Struts.xml中配置一下action,相应的请求就可以进入指定处理业务逻辑的方法。也可以通过返回特定的值,然后在struts.xml中配置action的result即可跳至jsp或action。还可以“零配置”使用Annotation(注解) 来让我们的请求动态找到处理该业务逻辑的方法,并返回至相应的jsp或action。



2、配置action


action类创建方式
1、无依赖创建方式

action类

[java] view plain copy
  1. package com.example;  
  2.     import javax.servlet.http.HttpServletRequest;  
  3.     import org.apache.struts2.ServletActionContext;   
  4.     public class LoginAction {  
  5.         public String login(){  
  6.             //在我们的action类里面我们可以通过struts2的ServletActionContext  
  7.             //类来获取request、response...  
  8.             HttpServletRequest   request=ServletActionContext.getRequest();  
  9.             request.setAttribute("test","123");  
  10.             return "success";  
  11.         }  
  12.     }         

struts.xml配置

[html] view plain copy
  1.  <action name="index" class="com.example.login" method="login">   
  2.             <result name="success">/index.jsp</result>  
  3.             <result name="error" type="redirect">/error.jsp</result>  
  4.  </action 

在浏览器中我们想请求到这个action 只需要我们name设置的值+.action 例如“index.action” 即可请求到这个action。class是这个action对应的Java类。也就是说我们请求到这个action所访问的java类,method是指定我们访问哪一个方法。result是代表我们返回所做的操作,里面有 name和 type两个属性。


1、name是我们的返回值,也就是说我们处理完action类后所返回的值,我们这里是返回的“success” 那    它就会跳到我们的index.jsp页面去
2、type代表我们跳至目标的类型
type常用属性值
dispatcher (默认)转发:以转发的方式跳至目标页面
redirect 重定向:以重定向的方式跳至目标页面
chain将action的带着原来的状态请求转发到新的action
redirect-action重定向到另一个Action,参数与chain用法相同,允许将原Action中的属性指定新名称带入新Action 中,可以在Result标签中添加 <param name="b”>${a} </param>,这表示原Action中的变量a的值被转给b,下一个Action可以在值栈中使用b来操作,注意如果值是中文,需要做一些编码处理,因为Tomcat默认是不支持URL直接传递中文的!


 2、继承ActionSupport重写execute方法
action类
[java] view plain copy
  1. package com.example;  
  2. import javax.servlet.http.HttpServletRequest;  
  3. import org.apache.struts2.ServletActionContext;  
  4. import com.opensymphony.xwork2.ActionSupport;  
  5. public class LoginAction extends ActionSupport{  
  6. @Override  
  7.         public String execute() throws Exception {  
  8.             // TODO Auto-generated method stub  
  9.             HttpServletRequest  request=ServletActionContext.getRequest();  
  10.             request.setAttribute("test","123");  
  11.             return "error";  
  12.             }  
  13.         } 


struts.xml配置
[html] view plain copy
  1.  <action name="index" class="com.example.login" >   
  2.                <result name="success">/index.jsp</result>  
  3.                <result name="error" type="redirect">/error.jsp</result>  
  4.         </action>
 使用这种方式,我们的struts.xml配置可以不用method指定我们的方法,如果没有method他会自动去找execute方法
   好处:
 1、能够使用struts预设的返回字符串,如SUCCESS,INPUT等等。
 2、重写方法,更方便的实现验证、国际化等等功能。
 3、与struts2的功能结合紧密,方便开发。
 
3、Action通配符"*"动态调用方法
struts.xml配置
例如、
[html] view plain copy
  1.  <package name="basic-struts2" extends="struts-default">  
  2.          <global-allowed-methods>login,register</global-allowed-methods  
  3.              <action name="login*" class="com.example.LoginAction" method="{1}">  
  4.                   <result name="success">/WEB-INF/index.jsp</result>  
  5.                   <result name="error">/WEB-INF/error.jsp</result>  
  6.               </action>  
  7.    </package

注:因为我们本次使用的是struts2最新2.5的版本,它为了提升安全性,新增了一个<global-allowed-methods>属性,该属性的作用是指定可被调用的方法 

1、 指定可以访问的方法名

如: <global-allowed-methods>login,register</global-allowed-methods> 这样就指定访问login和register方法
2、然后在我们的action的name属性中设置 "前缀+*"  如 " login*"  ,然后method属性值设为“{1}”

3、在浏览器中输入http://localhost:8080/项目名/login+方法名.action,即可动态访问到该方法。如 loginlogin.action