还有一个。
request.getServletContext();
从技术上讲,性能没有区别,只有
request.getSession()会隐式创建HTTP会话对象(如果尚未创建)。因此,如果尚未完成,那么如果尚未创建会话,则通过会话获取servlet上下文可能要花费几纳秒的时间。
返回的上下文也没有区别。这些方法只是为了方便起见,获取上下文的方法取决于上下文;)您当前所处的位置。
如果你坐在一个方法调用由servlet的
service()(如
doGet(),
doPost()等),那么就使用继承的
getServletContext()方法。其他方式只是不必要地在源代码中添加了更多字符。
@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) { ServletContext context = getServletContext(); // ...}
如果您使用的是servlet的
init(ServletConfig)方法,那么
getServletContext()只要您尚未调用,继承的方法就不可用
super.init(config)。您需要从中获取它
ServletConfig。
@Overridepublic void init(ServletConfig config) { ServletContext context = config.getServletContext(); // ...}
但是更好的是改写
init()。在一个体面的servlet中,通常不需要重写
init(ServletConfig)。
@Overridepublic void init() { ServletContext context = getServletContext(); // ...}
如果您不是坐在servlet中,而是在一个缺少继承方法的过滤器中,
getServletContext()而只有一个
ServletRequest手头,那么您可以从那里获取它。
@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) { ServletContext context = request.getServletContext(); // ...}
请注意,这是自Servlet 3.0以来的新增功能。以前,您必须从会话中获取它。
@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) { ServletContext context = request.getSession().getServletContext(); // ...}
但是,如果您担心不必要的会话创建,那么这不是很好。因此,引入了
ServletRequest#getServletContext()-尽管您也可以简单地从中提取它
FilterConfig(嘿,还有另一种方法!)。
private FilterConfig config;@Overridepublic void init(FilterConfig config) { this.config = config;}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) { ServletContext context = config.getServletContext(); // ...}
然后有HTTP会话侦听器,您可以在其中监听ao会话销毁。除了通过之外,没有其他方法可以获取servlet上下文
HttpSession#getServletContext()。
@Overridepublic void sessionDestroyed(HttpSessionEvent event) { ServletContext context = event.getSession().getServletContext(); // ...}
在这里,您不必担心不必要的会话创建,因为它已经预先创建了很长时间。请注意,没有
ServletRequest任何地方,因为在服务器端会话超时期间不一定存在活动的HTTP请求。
最后,还有
ServletContext#getContext()一个返回
ServletContext部署到同一服务器的不同Web应用程序的返回(仅当服务器配置为在目标Web应用程序上启用跨上下文访问时才有效)。
ServletContext otherContext = context.getContext("/otherContextPath");
但这已经需要电流
ServletContext开始,您现在应该已经知道了使用哪种方法来获取电流。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)