В чем разница между 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.