Struts2中对Servlet API的访问

本文介绍在Struts框架中如何通过不同方式获取Servlet API并操作请求、会话及应用三大作用域数据,包括使用特定接口、ServletActionContext工具类及ActionContext对象等方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 通过接口进行对象注入,action必须是实现相应的接口,struts就可以将指定的对象传递给action类
ServletContextAware接口:可以获得ServletContext对象
ServletResponseAware接口:可以获得ServletResponse对象
ServletRequestAware接口:可以获得ServletRequest对象
request.getSession获得session对象

public class ServletAction extends ActionSupport implements ServletRequestAware{

	private HttpServletRequest request;
	
	@Override
	public void setServletRequest(HttpServletRequest request) {
		this.request = request;
	}
	@Override
	public String execute() throws Exception {
		System.out.println(request.getContextPath());
		return SUCCESS;
	}	
}

执行结果:
这里写图片描述

2 ServletActionContext 工具类,struts 的action类中获得servlet的api
获得servlet 对象,可以操作域数据,可以调用其他api
HttpServletRequest ServletActionContext.getRequest();
HttpSession ServletActionContext.getRequest().getSession();
ServletContext ServletActionContext.getServletContext();

public class ServletAction extends ActionSupport {	
	
	@Override
	public String execute() throws Exception {
		ServletActionContext.getResponse();
		ServletActionContext.getRequest().setAttribute("sac", "ServletActionContext_request");
		ServletActionContext.getRequest().getSession().setAttribute("sac", "ServletActionContext_session");
		ServletActionContext.getServletContext().setAttribute("sac", "ServletActionContext_application");
		
		return SUCCESS;
	}
	
}

jsp代码:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <body>
   <h3>获得3作用域内容 -- ServletActionContext</h3>
	${requestScope.sac} <br/>
	${sessionScope.sac} <br/>
	${applicationScope.sac} <br/>
  </body>
</html>

执行结果:
这里写图片描述

3 通过Action上下文对象ActionContext,可以间接对servlet 域数据进行操作,实现了解耦,不依赖于servlet api
获得ActionContext实例:ActionContext.getContext()
间接操作域数据

public class ServletAction extends ActionSupport {
	@Override
	public String execute() throws Exception {		
		ActionContext.getContext().put("ac", "ActionContext_request");  
		ActionContext.getContext().getSession().put("ac", "ActionContext_session");
		ActionContext.getContext().getApplication().put("ac", "ActionContext_application");
		
		
		return SUCCESS;
	}
}


jsp代码:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <body>	
	<h3>获得3作用域内容-- ActionContext</h3>
	${requestScope.ac} <br/>
	${sessionScope.ac} <br/>
	${applicationScope.ac} <br/>
  </body>
</html>

执行结果:
这里写图片描述

Coding Diary

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值