博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ActionContext,ServletContext和ServletActionContext有什么区别?
阅读量:3586 次
发布时间:2019-05-20

本文共 4617 字,大约阅读时间需要 15 分钟。

他们之间有很多区别。

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。

转载地址:http://mkpwn.baihongyu.com/

你可能感兴趣的文章
剑指offer 43.左旋转字符串
查看>>
剑指offer 47. 求1 + 2 + 3 + .... + n
查看>>
分布式和集群的区别
查看>>
本科毕设完整流程和注意事项
查看>>
不要想着憋大招,先完成每个小招
查看>>
ps中怎么把一张图片的一种颜色全部替换成另外一种颜色
查看>>
答辩PPT撰写和答辩注意事项
查看>>
第二次实习的实习总结
查看>>
PPT的一些常用操作
查看>>
Java面试题解析(基础篇,附答案)
查看>>
Spring 常用的三种注入方式
查看>>
MyBatis 一级缓存在分布式下的坑你知道吗?
查看>>
2020年2月JVM面试的30个知识点
查看>>
在家办公7天整理Spring Cloud知识点大全
查看>>
看看这些Java代码开发规范吧!你好,我好,大家好!
查看>>
2020年3月,47个经典Spring面试题详解(附带答案)
查看>>
python实现Mapreduce的wordcount
查看>>
Linux字符设备驱动编(步骤,框架(面向对象),分层)
查看>>
linux高级字符驱动之输入子系统
查看>>
代理与反射
查看>>