ActionContext,ServletContext和ServletActionContext有什么区别?

本文详细比较了JavaEE中的ServletContext与Struts框架中的ActionContext和ServletActionContext的区别。介绍了它们各自的功能及应用场景,帮助读者理解不同框架间的交互方式。

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



他们之间有很多区别。

ServletContext

ServletContext的包( javax.servlet.ServletContext )我们可以知道它是标准的JavaEE WebApplication类库。

ServletContext提供了标准的Servlet运行时环境。 实际上是servlet与web容器进行通信的一些方法。

 public interface ServletContext { // Returns the URL prefix for the ServletContext. public String getServletContextName(); //Returns the context-path for the web-application. public String getContextPath(); //Returns the ServletContext for the uri. public ServletContext getContext(String uri); //Returns the real file path for the given uri. public String getRealPath(String uri); public RequestDispatcher getNamedDispatcher(String servletName); public RequestDispatcher getRequestDispatcher(String uri); 

ServletContext包含在ServletConfig中,ServletConfig通常从servlet或filter的init()方法读取:

 servletConfig.getServletContext() filterConfig.getServletContext() 

ActionContext

来自Struts,但是起初来自Struts1和Struts2,它们是不同的。

从Struts1: 
一个servlet (servlet org.apache.struts.action.ActionServlet)处理所有的*.do动作。

从Struts2: 
filter (org.apache.struts2.dispatcher.FilterDispatcher)处理所有请求。

因为struts1属于servlet范围。 struts1动作本质上是servlet。 
struts2动作是普通的Java bean,出了servlet限制。 
在strtus2动作出来之后,ActionContext构成了丢失的WEB环境。

ActionContext主要功能:

  • 提供WEB上下文。
  • 解决线程安全问题。
  • 解决与其他Framework不兼容的问题(如:webLogic))

ServletActionContext

正如你所说,ServletActionContext是ActionContext的子类。 它的功能是从ActionContext开始,封装方法,使其更加简单直观。

我们还可以研究其源代码:

 public class ServletActionContext extends ActionContext implements StrutsStatics { //HTTP servlet request public static void setRequest(HttpServletRequest request) { ActionContext.getContext().put(HTTP_REQUEST, request); } public static HttpServletRequest getRequest() { return (HttpServletRequest) ActionContext.getContext().get(HTTP_REQUEST); } //HTTP servlet response public static void setResponse(HttpServletResponse response) { ActionContext.getContext().put(HTTP_RESPONSE, response); } public static HttpServletResponse getResponse() { return (HttpServletResponse) ActionContext.getContext().get(HTTP_RESPONSE); } //servlet context. public static ServletContext getServletContext() { return (ServletContext) ActionContext.getContext().get(SERVLET_CONTEXT); } public static void setServletContext(ServletContext servletContext) { ActionContext.getContext().put(SERVLET_CONTEXT, servletContext); } 

从上面我们可以知道ServletActionContext扩展了ActionContext。

他们之间有很多区别。

ServletContext

ServletContext的包( javax.servlet.ServletContext )我们可以知道它是标准的JavaEE WebApplication类库。

ServletContext提供了标准的Servlet运行时环境。 实际上是servlet与web容器进行通信的一些方法。

 public interface ServletContext { // Returns the URL prefix for the ServletContext. public String getServletContextName(); //Returns the context-path for the web-application. public String getContextPath(); //Returns the ServletContext for the uri. public ServletContext getContext(String uri); //Returns the real file path for the given uri. public String getRealPath(String uri); public RequestDispatcher getNamedDispatcher(String servletName); public RequestDispatcher getRequestDispatcher(String uri); 

ServletContext包含在ServletConfig中,ServletConfig通常从servlet或filter的init()方法读取:

 servletConfig.getServletContext() filterConfig.getServletContext() 

ActionContext

来自Struts,但是起初来自Struts1和Struts2,它们是不同的。

从Struts1: 
一个servlet (servlet org.apache.struts.action.ActionServlet)处理所有的*.do动作。

从Struts2: 
filter (org.apache.struts2.dispatcher.FilterDispatcher)处理所有请求。

因为struts1属于servlet范围。 struts1动作本质上是servlet。 
struts2动作是普通的Java bean,出了servlet限制。 
在strtus2动作出来之后,ActionContext构成了丢失的WEB环境。

ActionContext主要功能:

  • 提供WEB上下文。
  • 解决线程安全问题。
  • 解决与其他Framework不兼容的问题(如:webLogic))

ServletActionContext

正如你所说,ServletActionContext是ActionContext的子类。 它的功能是从ActionContext开始,封装方法,使其更加简单直观。

我们还可以研究其源代码:

 public class ServletActionContext extends ActionContext implements StrutsStatics { //HTTP servlet request public static void setRequest(HttpServletRequest request) { ActionContext.getContext().put(HTTP_REQUEST, request); } public static HttpServletRequest getRequest() { return (HttpServletRequest) ActionContext.getContext().get(HTTP_REQUEST); } //HTTP servlet response public static void setResponse(HttpServletResponse response) { ActionContext.getContext().put(HTTP_RESPONSE, response); } public static HttpServletResponse getResponse() { return (HttpServletResponse) ActionContext.getContext().get(HTTP_RESPONSE); } //servlet context. public static ServletContext getServletContext() { return (ServletContext) ActionContext.getContext().get(SERVLET_CONTEXT); } public static void setServletContext(ServletContext servletContext) { ActionContext.getContext().put(SERVLET_CONTEXT, servletContext); } 

从上面我们可以知道ServletActionContext扩展了ActionContext。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值