Struts2总结--Struts2 Action的简单使用

一、加入jar包

asm-3.3.jar,asm-commons-3.3.jar,asm-tree-3.3.jar,commons-fileupload-1.3.1.jar

commons-io-2.2.jar,commons-lang3-3.2.jar,commons-logging-1.1.3.jar,freemarker-2.3.22.jar

javassist-3.11.0.GA.jar,log4j-api-2.2.jar,log4j-core-2.2.jar,ognl-3.0.6.jar,struts2-core-2.3.24.jar,xwork-core-2.3.24.jar

 

二、web.xml文件中配置struts

<!-- 配置Struts -->
  <filter>
    <filter-name>struts2</filter-name> 
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> 
  </filter>
  <filter-mapping>
    <filter-name>struts2</filter-name> 
    <url-pattern>/*</url-pattern> 
  </filter-mapping>
  

注:本质就是配置一个Struts2的Filter过滤器,进行拦截所有请求,交给Struts2处理

三、添加一个Action类

package zhuojing.struts;

import java.util.Map;

import org.apache.struts2.dispatcher.SessionMap;

import com.opensymphony.xwork2.ActionContext;

public class TestActionContextAction {

	public String execute() {
		
        //0.获取ActionContext
		//ActionContext是Action上下文对象,可以获取Action的一切信息
		ActionContext actionContext = ActionContext.getContext();
		
		//1.获取application 对应的Map,并向其中添加一个属性
		Map<String, Object> applicationMap = actionContext.getApplication();
		applicationMap.put("applicationkey", "applicationValue");
		System.out.println(applicationMap.get("applicationkey"));
		
		//2.session
		Map<String, Object> sessionMap = actionContext.getSession();
		sessionMap.put("sessionKey", "sessionValue");
		if(sessionMap instanceof SessionMap){
			SessionMap sm = (SessionMap) sessionMap;	
			sm.invalidate();
			System.out.println("session 失效了");
			
		}

		//3.request
		Map<String, Object> requestMap = (Map<String, Object>)actionContext.get("request");
		requestMap.put("requestKey", "requestValue");
		
		//4.获取请求参数对应的Map,并获取指定的参数值,
		//键 : 请求参数的名字   值:请求参数对应的字符串数组
		Map<String, Object> paramterMap = actionContext.getParameters();
		System.out.println(((String[])paramterMap.get("name"))[0]);
		return "success";
		
	}
}

注:在请求时Action中Struts会调用Action的execute方法,然后根据execute返回值和struts.xml配置文件的配置进行页面的跳转

ActionContext是Action上下文对象,可以获取Action的一切信息

 

四、struts.xml文件的配置

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
    
    <package name="default" extends="struts-default">
        <action name="TestActionContext" class="zhuojing.struts.TestActionContextAction" method="execute">
           <result name="success">/test/test-actionContext.jsp</result>
       </action>
    </package>
</struts>

注:属性说明(action标签):

       name:action名称(请求是访问用的,访问地址为localhost:8080/项目名/TestActionContext.action,或者localhost:8080/项目名/TestActionContext),若想修改后缀则:

   <!-- 配置Struts 可以受理的请求的扩展名 -->
    <constant name="struts.action.extension" value="action,do,,"></constant>

     action标签的method属性:表示请求action是调用的方法名称,默认是execute

     result :一个action 节点可以配置第一个result 子节点,result 的name属性对应着action 方法可能有点一个返回值,name默认是success

    result的type属性的值说明
         a:chain:转发到一个action
         b;dispatcher:转发(默认是这个):不能通过dispatcher实现chain
         c:redirect:重定向:使用redirect 也能便捷的 实现 redirectAction 的功能
         d:redirectAction:重定向到一个action:
              使用param来实现重定向到一个action(注意必须有一个namespace相同的action,param name属性还有其他值)
              eg:<result name="result_c" type="redirectAction">
                    <param name="actionName">redirectActionTest</param>
                    <param name="namespace">/zhuojing</param>
                 </result> 
         e:stream:文件上传下载的时候使用:跟redirectAction使用方法类似

五、Action返回JSON

package zhuojing.struts;

public class StrutsJson {

	public String userName;
	public String passWord;
	
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getPassWord() {
		return passWord;
	}
	public void setPassWord(String passWord) {
		this.passWord = passWord;
	}
	
	public String testJson(){
		
		System.out.println(userName+"-->"+passWord);
		return "testJson";
	}
	
}

注:会将name和password作为json输出,并且可以通过getter,setter获取请求参数

<!-- 使用ajax -->
   <package name="ajax" extends="json-default">
        <action name="testJson" class="zhuojing.struts.StrutsJson" method="testJson">
           <result name="testJson" type="json"></result>
        </action>
    </package>

访问:http://localhost:8080/项目名/testJson.action?userName=11则返回 {"passWord":null,"userName":"11"}字符串

返回字符串:result标签中配置 <param name="root">userName</param>则:

访问:http://localhost:8080/项目名/testJson.action?userName=11则返回 11字符串

 

注:

我们为了方便实现Action,大多数情况下都会继承com.opensymphony.xwork2.ActionSupport类, 并重载(Override)此类里的String execute()方法,因为ActionSupport已经实现了Action接口, 还实现了Validateable接口,提供了数据校验功能。通过继承该ActionSupport类,可以简化Struts 2的Action开发。  

 Action 跟 Actionsupport 的区别: 当我们在写action的时候,可以实现Action接口,也可以继承Actionsupport这个类.到底这两个有什么区别呢?   

Action接口有:   

 public static final Java.lang.String SUCCESS = "success";  

 public static final java.lang.String NONE = "none";  

public static final java.lang.String ERROR = "error";  

 public static final java.lang.String INPUT = "input"; 

  public static final java.lang.String LOGIN = "login"; 

  public abstract java.lang.String execute() throws java.lang.Exception;  

  而Actionsupport这个工具类在实现了Action接口的基础上还定义了一个validate()方法, 重写该方法,它会在execute()方法之前执行,如校验失败,会转入input处, 必须在配置该Action时配置input属性。 

  另外,Actionsupport还提供了一个getText(String key)方法还实现国际化,该方法从资源文件上获取国际化信息. 这样在自定义标签时可以定义一个变量为new actionsupport对象实现国际化。  

ActionSupport类的作用 struts2不要求我们自己设计的action类继承任何的struts基类或struts接口, 但是我们为了方便实现我们自己的action,大多数情况下都会继承com.opensymphony.xwork2.ActionSupport类,并重写此类里的public String execute() throws Exception方法。 因为此类中实现了很多的实用借口,提供了很多默认方法,这些默认方法包括国际化信息的方法、默认的处理用户请求的方法等,这样可以大大的简化Acion的开发。 

   Struts2中通常直接使用Action来封装HTTP请求参数,因此,Action类里还应该包含与请求参数对应的属性,并且为属性提供对应的getter和setter方法

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值