В чем разница между ActionContext,ServletContext и ServletActionContext?

В Java EE мы часто используем ActionContext,ServletContext а также ServletActionContextУ них похожее имя, но я не знаю разницы между ними.

Я знаю только ServletActionContext наследовать ActionContext, Кто-то может их объяснить?

1 ответ

Там есть много различий между ними.

ServletContext

От ServletContextпакет (javax.servlet.ServletContext) мы можем знать, что это стандартная библиотека классов JavaEE WebApplication.

ServletContext предоставляет стандартную среду выполнения Servlet. На самом деле есть несколько способов взаимодействия сервлета с веб-контейнером.

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 часто читается из сервлета или фильтра 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 принадлежит области действия сервлета. По сути, действие Struts1 - это сервлет.
Действие struts2 - это обычный Java-бин, вне ограничений сервлета.
ActionContext восполняет потерянную веб-среду после действия strtus2 из среды сервлетов stand.

Основная функция ActionContext:

  • Предоставьте веб-контекст.
  • Решите проблему безопасности потока.
  • Решить проблему несовместимости с другими 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.

Другие вопросы по тегам