可能有人给我解释一下什么是获得这种方式的区别ServletContext
的HttpServlet
?
doGet( HttpServletRequest request, ... ){
getServletConfig( ).getServletContext( );
request.getSession( ).getServletContext( );
getServletContext( );
}
性能或上下文本身是否有差异?如果是这样,那是最好的方法?还有其他检索上下文的方法吗?
还有一个。
request.getServletContext();
从技术上讲,性能没有区别,只有request.getSession()
会隐式创建HTTP会话对象(如果尚未创建)。因此,如果尚未完成,那么如果尚未创建会话,则通过会话获取servlet上下文可能要花费几纳秒的时间。
返回的上下文也没有区别。这些方法只是为了方便起见,获取上下文的方法取决于上下文;)您当前所处的位置。
如果你坐在一个方法调用由servlet的service()
(如doGet()
,doPost()
等),那么就使用继承的getServletContext()
方法。其他方式只是不必要地在源代码中添加了更多字符。
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
ServletContext context = getServletContext();
// ...
}
如果您使用的是servlet的init(ServletConfig)
方法,那么getServletContext()
只要您尚未调用,继承的方法就不可用super.init(config)
。您需要从中获取它ServletConfig
。
@Override
public void init(ServletConfig config) {
ServletContext context = config.getServletContext();
// ...
}
但是更好的是改写init()
。在一个体面的servlet中,通常不需要重写init(ServletConfig)
。
@Override
public void init() {
ServletContext context = getServletContext();
// ...
}
如果您不是坐在servlet中,而是在一个缺少继承方法的过滤器中,getServletContext()
而只有一个ServletRequest
手头,那么您可以从那里获取它。
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
ServletContext context = request.getServletContext();
// ...
}
请注意,这是自Servlet 3.0以来的新增功能。以前,您必须从会话中获取它。
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
ServletContext context = request.getSession().getServletContext();
// ...
}
但是,如果您担心不必要的会话创建,那么这不是很好。因此,引入了ServletRequest#getServletContext()
-尽管您也可以简单地从中提取它FilterConfig
(嘿,还有另一种方法!)。
private FilterConfig config;
@Override
public void init(FilterConfig config) {
this.config = config;
}
@Override
html" target="_blank">public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
ServletContext context = config.getServletContext();
// ...
}
然后有HTTP会话侦听器,您可以在其中监听ao会话销毁。除了通过之外,没有其他方法可以获取servlet上下文HttpSession#getServletContext()
。
@Override
public void sessionDestroyed(HttpSessionEvent event) {
ServletContext context = event.getSession().getServletContext();
// ...
}
在这里,您不必担心不必要的会话创建,因为它已经预先创建了很长时间。请注意,没有ServletRequest
任何地方,因为在服务器端会话超时期间不一定存在活动的HTTP请求。
最后,还有ServletContext#getContext()
一个返回ServletContext
部署到同一服务器的不同Web应用程序的返回(仅当服务器配置为在目标Web应用程序上启用跨上下文访问时才有效)。
ServletContext otherContext = context.getContext("/otherContextPath");
但这已经需要电流ServletContext
开始,您现在应该已经知道了使用哪种方法来获取电流。
据我所知,基于Spring的web应用程序初始化如下: 步骤1:定位的实现,即。 步骤2:< code > SpringServletContainerInitializer 创建< code>DispatcherServlet和< code > context loader listener 第3步:创建。创建。 步骤 1 由 Servlet 3.0 规范定义。步骤2,3完全由Spring定义。
要查看此问题的完整代码,请参阅此github https://github.com/mobiusinversion/web-application 我正在使用Jersey 2.15开发。这是一个嵌入式的Jetty应用程序,它被遮蔽到一个单独的罐子中。 在防波堤起动器(主类)中: 我有一个通过提供程序包含的过滤器 则在筛选器中:
设置如下--我有一个定时任务,它将发送验证电子邮件,以便用户: 如果我可以在这里设置thymeleaf模板解析器来处理这些链接,也会有所帮助,但为此我需要,它需要的实例。
问题内容: 我有一个带有applicationContext.xml和dispatcher-servlet.xml配置的Spring Web应用程序。我已经在applicationContext.xml中定义了,但是当我运行我的应用程序时,除非同时添加到dispatcher-servlet.xml中,否则找不到控制器。我在两个中都使用了相同的基本软件包,所以这不是问题。 我很困惑,因为我认为 ap
我有一个带有applicationcontext.xml和dispatcher-servlet.xml配置的Spring web应用程序。我已经在applicationcontext.xml中定义了,但是当我运行应用程序时,没有找到控制器,除非我还将添加到dispatcher-servlet.xml。我在两个软件包中使用了相同的基包,所以这不是问题所在。 我感到困惑,因为我以为applicatio
本文向大家介绍php获取文章上一页与下一页的方法,包括了php获取文章上一页与下一页的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php获取文章上一页与下一页的方法。分享给大家供大家参考。具体方法如下: 今天发现一个站的上一页与下一页出现问题,上一页没有问题但是在下一页是直接到了本频道最新发布的文章了,按原理应该是文章本身ID的前与后的ID才是上下页吧,下面我来与大家详细讲述一下.