您当前的位置: 首页 >  servlet

Charge8

暂无认证

  • 3浏览

    0关注

    447博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Struts2访问Servlet API的三种方式

Charge8 发布时间:2018-07-16 22:31:21 ,浏览量:3

  方式一: 让当前 Action 实现感知接口:

ServletRequestAware:  感知HttpServletRequest对象;

ServletResponseAware:感知HttpServletResponse对象;

ServletContextAware:    感知ServletContext对象;

struts2框架(servletConfig拦截器(优先于Action执行))会判断当前Action是否实现感知接口,不推荐,和ServletAPI耦合严重

//实现感知接口方式: 和ServletAPI耦合严重
/*
 * struts2框架(servletConfig拦截器(优先于Action执行))会判断当前Action是否实现感知接口, 
 *	是则通过set方法获取对应的ServletAPI
*/
public class UserAction extends ActionSupport implements ServletRequestAware,ServletResponseAware,ServletContextAware{
	HttpServletRequest request;
	HttpServletResponse response;
	ServletContext application;
	
	public String login() {
		Map params = request.getParameterMap();
		for (Map.Entry entry : params.entrySet()) {
			System.out.println("key:" + entry.getKey() + ", value:" + Arrays.toString(entry.getValue()));
		}
		return "success";
		
	}
	@Override
	public void setServletRequest(HttpServletRequest arg0) {
		this.request = arg0;
	}
	@Override
	public void setServletResponse(HttpServletResponse response) {
		this.response = response;
	}
	@Override
	public void setServletContext(ServletContext context) {
		this.application = context;
	}
}
  方式二: 通过ServletActionContext工具类:

通过ServletActionContext类中的静态方法,得到Servlet相关的Api

如果用参数来接受 依然和ServletAPI有耦合, 不接受直接用则不耦合。推荐使用

//通过ServletActionContext工具类: 和ServletAPI耦合严重
public class UserAction extends ActionSupport {
	public String login() {
		// 如果用参数来接受 依然和ServletAPI有耦合, 不接受直接用则不耦合。。
		//HttpServletRequest request = ServletActionContext.getRequest();
		Map params = ServletActionContext.getRequest().getParameterMap();
		for (Map.Entry entry : params.entrySet()) {
			System.out.println("key:" + entry.getKey() + ", value:" + Arrays.toString(entry.getValue()));
		}
        
		//获得 session对象
		ServletActionContext.getRequest().getSession().setAttribute("username", "admin");;
				
		//获得response对象
		ServletActionContext.getResponse();
		
		//获得application对象
		ServletActionContext.getServletContext();
		
		//获取当前项目的绝对路径
		String realPath = ServletActionContext.getServletContext().getRealPath("");
		System.out.println(realPath);
                //获得远程的ip地址: 127.0.0.1
		System.out.println(ServletActionContext.getRequest().getRemoteAddr());
		return "success";
	}
}

 

方式三: 通过ActionContext工具类: Struts2将作用域对象重新使用Map集合进行了封装,所以现在操作作用域中的共享数据就是直接操作对应的Map集合, 存取值比较方便,  推荐使用

在ActionContext中把request,session,application三大作用域都作为Map对象.

1):获取请求参数.

     原始:Map params = request.getParameterMap();

     现在:Map params = ctx.getParameters();

2):操作request作用域:

     原始:request.setAttribute(String name, Object value);   

Object val = request.getAttribtue(String name);

     现在:ctx.put(String key,Object value);                                

Object val = ctx.get(String name);

3):操作session作用域:

     原始:HttpSession  session =request.getSession();

     现在:Map session = ctx.getSession();

4):操作servletContext(application)作用域:

     原始:ServletContext ctx = request.getServletContext();

     现在:Map app = ctx.getApplication();

//通过ActionContext工具类: 完全和ServletAPI不耦合
public class UserAction extends ActionSupport {
	public String login() {
		//获取ActionContext对象
		ActionContext actionContext = ActionContext.getContext();
		//获取所有请求值
		Map params = actionContext.getParameters();
		for (Map.Entry entry : params.entrySet()) {
			System.out.println("key:" + entry.getKey() + ", value:" + Arrays.toString((String[])entry.getValue()));
		}
		
		//获得request作用域中的值
		Map request = (Map) actionContext.get("request");
		
		Map session = actionContext.getSession();
		session.put("username", "admin");
		session.get("username");
		
		Map application = actionContext.getApplication();
		
		return "success";
	}
}

 

 

关注
打赏
1664721914
查看更多评论
立即登录/注册

微信扫码登录

0.0359s