首页 > 代码库 > Struts2中的Action类(解耦方式,耦合方式)
Struts2中的Action类(解耦方式,耦合方式)
一.解耦方式
特点:对web资源进行了封装,便于单元测试。
实现:ActionContext和接口方式
1.ActionContext
特点:Action执行的上下文对象。保存了执行Action所需要的所有对象
使用:1.获取ActionContext 2.获取application,session。request,parameter资源 3.打印显示
1.获取ActionContext
ActionContext.getContext()
调用自身的静态方法得到实例
采用的是单例模式
可以再次放入新的键值对,put()
2.session的同application。
3.获取request资源
得到封装request的集合
不能访问得到集合之前的request的属性值
可以使用put()放入新的键值对
4.直接获取传递的参数getParameters
object是String[]类型,为了接收同名的不同参数,使用put放入新值无效
2.接口方式
特点
实现接口方法,由Struts2自动放入web资源
不需要重复获取
注意:该类要继承ApplicationAware ,SessionAware, RequestAware,ParameterAware。
必须有相对应的私有map集合的属性
实现以上四种借口的方法
访问读取
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!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>Insert title here</title> </head> <body> 添加测试用的web资源 <% application.setAttribute("app1", "测试的application"); session.setAttribute("set1", "测试的session"); request.setAttribute("req1", "测试的request"); %> <br> <a href="http://www.mamicode.com/testAction?user=sb&user=tom">测试Action类访问web资源</a> <br><br> <a href="http://www.mamicode.com/testActionAware?user=sb&user=tom">以Aware方式测试Action类访问web资源</a> </body> </html>
<?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> <!-- 覆盖默认的过滤的扩展名 --> <constant name="struts.action.extension" value="http://www.mamicode.com/do,action,,"></constant> <!-- 定义包 --> <package name="text" extends="struts-default" > <action name="testAction" class ="com.hanqi.action.TestAction" method="testWeb"> <result type="redirect" name="success">test.jsp</result> </action> <!-- 解耦的接口方式 --> <action name="testActionAware" class="com.hanqi.action.TestActionAware" method="testAware"> <result>test.jsp</result> </action> </package> </struts>
解耦方式
package com.hanqi.action; import java.util.Map; import com.opensymphony.xwork2.ActionContext; public class TestAction { //解耦方式 //封装了web资源 //使用ActionContext public String testWeb() { //访问web资源 System.out.println("经过了Action"); //单利模式 //Action实例的上下文对象 ActionContext ac = ActionContext.getContext(); //1.获取application资源 Map<String, Object> mapApp = ac.getApplication(); System.out.println("app1="+mapApp.get("app1")); //放入新的键值对 mapApp.put("app2", "新放入的application"); //2.获取session资源 Map<String, Object> mapses = ac.getSession(); System.out.println("set1="+mapses.get("set1")); //放入新的session mapses.put("set2", "放入的新的session"); //清除 mapses.remove("set1"); //3.获取request资源 Map<String, Object> mapReq = (Map<String, Object>)ac.get("request"); System.out.println("req1="+mapReq.get("req1"));//不能获取之前的request属性 //可以放入新的 mapReq.put("req2", "放入的新的request"); //4.直接获取传递的参数 Map<String, Object> mapPer = ac.getParameters(); //参数值被封装成String[] String [] str = (String[])mapPer.get("user"); for(String t : str) { System.out.println("user="+t); } //放入新的参数,不能被获取到 mapPer.put("pw",new String[]{"123456"}); return "success"; } }
接口方式
package com.hanqi.action; import java.util.Map; import org.apache.struts2.dispatcher.mapper.ActionMapping; import org.apache.struts2.interceptor.ApplicationAware; import org.apache.struts2.interceptor.ParameterAware; import org.apache.struts2.interceptor.RequestAware; import org.apache.struts2.interceptor.SessionAware; public class TestActionAware implements ApplicationAware , SessionAware, RequestAware,ParameterAware{ private Map<String, Object> mapApp; private Map<String, Object> mapses; private Map<String, Object> mapReq; private Map<String, String[]> mappar; //实现ApplicationAware接口的方法 //提供给Struts2 进行调用,放入Application的数据集合 @Override public void setApplication(Map<String, Object> arg0) { // 接收 mapApp =arg0; } public String testAware() { //访问application System.out.println("app1="+mapApp.get("app1")); mapApp.put("app2","以Aware方式放入的application"); //访问session System.out.println("set1="+mapses.get("set1")); mapses.put("set2", "以Aware方式放入的session"); //访问request System.out.println("req1="+mapReq.get("req1")); mapReq.put("req2", "以Aware方式放入的request"); //访问parameter String [] str =mappar.get("user"); for(String t : str) { System.out.println("user="+t); } mappar.put("pw", new String[]{"1234"}); return "success"; } @Override public void setSession(Map<String, Object> arg0) { // TODO 自动生成的方法存根 mapses = arg0; } @Override public void setRequest(Map<String, Object> arg0) { mapReq=arg0; } @Override public void setParameters(Map<String, String[]> arg0) { // mappar=arg0; } }
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!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>Insert title here</title> </head> <body> 显示application的属性 <br> app1=${app1} <br> app2=${applicationScope.app2}<br><br> 显示session的属性<br> set1=${set1 } <br> set2=${sessionScope.set2} <br><br> 显示request对象<br> req1=${req1 } <br> req2=${req2}<br> <br><br> <% out.println("set2===="+session.getAttribute("set2")); String user = request.getParameter("user"); out.print("<br>user="+user); String pw =request.getParameter("pw"); out.print("<br>pw="+pw); %> </body> </html>
Struts2中的Action类(解耦方式,耦合方式)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。