您的位置:首页 > 编程语言 > Java开发

Struts2中访问ServletAPI的四种方式

2017-06-06 20:35 309 查看
一:  使用Struts2中ActionContext(Action的上下文)解耦和的方式

 package cn.mldn.controller;

import java.util.Map;

import com.opensymphony.xwork2.ActionContext;

//不与ServletAPI相耦合,测试struts2中ActionContext(Action上下文)这个类的方法

public class TestActionContextAction {
public String execute()
{
//0:获取ActionContext对象,是Action的上下文
ActionContext actionContext=ActionContext.getContext();
//1:获取application对应的Map,为其添加属性
Map<String, Object> applicationMap=actionContext.getApplication();
//设置属性
applicationMap.put("applicationKey","applicationValue");
//获取属性
Object date=applicationMap.get("date");
System.out.println("date: "+date);
//2:获取session对应的Map,为其添加属性
Map<String, Object> sessionMap=actionContext.getSession();
sessionMap.put("sessionKey","sessionValue");
//3:获取request对应的Map,为其添加属性
Map<String, Object> requestMap=(Map<String, Object>) actionContext.get("request");
requestMap.put("requestKey","requestValue");
//4:获取请求参数对应的Map,并获取指定的参数值
Map<String,Object> parameters=actionContext.getParameters();
//键:请求参数的名字,值:请求参数对应的字符串数组
System.out.println("params: "+((String[])parameters.get("name"))[0]);
return "success";
}

}

二:实现XXX_Aware接口,是解耦和的方式

package cn.mldn.controller;

import java.util.Map;

import org.apache.struts2.dispatcher.SessionMap;

import org.apache.struts2.interceptor.ApplicationAware;

import org.apache.struts2.interceptor.ParameterAware;

import org.apache.struts2.interceptor.SessionAware;

//不与ServletAPI相耦合,测试struts2中ServletXXXAware(Action上下文)这个类的方法

public class TestAwareAction implements ApplicationAware,SessionAware,ParameterAware{
private Map<String, Object> applicationMap=null;
private Map<String,String[]> parameters=null;
private Map<String, Object> sessionMap=null;
public String execute()
{
//1:向application中加入一个属性:applicationKey2->applicationValue2
applicationMap.put("applicationKey2","applicationValue2");
sessionMap.put("sessionKey2", "sessionValue2");
//2:从application中读取一个属性date
Object date=applicationMap.get("date");
System.out.println("date:"+date);
System.out.println("session:"+sessionMap.getClass());
//  SesionMap类中有 public void invalidate()方法让session失效
if(sessionMap instanceof SessionMap)
{
SessionMap sessionMap2=(SessionMap<String, Object>)sessionMap;
//sessionMap2.invalidate();//让session会话失效
//System.out.println("session失效了!");
}

//键:请求参数的名字,值:请求参数对应的字符串数组
System.out.println("params: "+parameters.get("name2")[0]);
return "success";
}

@Override
public void setApplication(Map<String, Object> applicationMap) {
this.applicationMap=applicationMap;
}

@Override
public void setParameters(Map<String, String[]> parameters) {
this.parameters=parameters;
}

@Override
public void setSession(Map<String, Object> session) {
this.sessionMap=session;

}

}

 三:  使用ServletActionContex,与ServletAPI相耦合

package cn.mldn.controller;

import javax.servlet.ServletContext;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;

//与ServletAPI相耦合,测试ServletActionContext这个类,可以获取HttpServletRequet

public class TestServletActionContextAction {
public String execute()
{
HttpServletRequest request=ServletActionContext.getRequest();
HttpSession session=ServletActionContext.getRequest().getSession();
ServletContext application=ServletActionContext.getServletContext();
application.setAttribute("applicationKey3", "applicationValue3");
session.setAttribute("sessionKey3", "sessionValue3");
request.setAttribute("requestKey3", "requestValue3");
System.out.println("execute...");
return "success";
}

}

四:实现ServletXXX-Aware接口,与ServletAPI相耦合

package cn.mldn.controller;

import javax.servlet.ServletContext;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;

import org.apache.struts2.interceptor.ServletRequestAware;

import org.apache.struts2.util.ServletContextAware;

//与ServletAPI相耦合,测试ServletAwareAction这个类,可以获取HttpServletRequet

public class TestServletAwareAction implements ServletRequestAware,ServletContextAware{
private HttpServletRequest request=null;
private ServletContext application=null;
public String execute()
{
HttpSession session=ServletActionContext.getRequest().getSession();
application.setAttribute("applicationKey4", "applicationValue4");
session.setAttribute("sessionKey4", "sessionValue4");
request.setAttribute("requestKey4", "requestValue4");
System.out.println("execute...");
return "success";
}
@Override
public void setServletRequest(HttpServletRequest request) {
this.request=request;

}
@Override
public void setServletContext(ServletContext context) {
this.application=context;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: