gpt4 book ai didi

java - 简单的 Servlet 应用程序,在哪里存储我可以引用的配置设置?

转载 作者:行者123 更新时间:2023-12-01 16:37:00 25 4
gpt4 key购买 nike

我有一个简单的 Servlet 应用程序。

我是否将配置相关信息存储在 web.xml 文件中?

我的 servlet 中是否有一个事件触发,我应该将配置值保存到静态只读变量中?

我现在有一个 servlet,但是是否还有另一个文件,生命周期在全局级别开始?

就像在 .net 中一样,您有自己的页面,但有一个 global.asax.cs 类会在特定事件时触发,例如:

application_startup
application_shutdown
application_beginRequest
application_endRequest

servlet 是否有此功能,还是基于每个 servlet?

最佳答案

application_startup
application_shutdown

实现ServletContextListener .

@WebListener
public class ApplicationListener implements ServletContextListener {

@Override
public void contextInitialized(ServletContextEvent event) {
// Do your job here on application startup.
}

@Override
public void contextDestroyed(ServletContextEvent event) {
// Do your job here on application shutdown.
}

}

您可以将应用程序范围的变量存储为 ServletContext 的属性.

event.getServletContext().setAttribute("foo" new Foo());

它可以通过继承的 getServletContext() 方法在 servlet 中使用。

Foo foo = (Foo) getServletContext().getAttribute("foo");

在 JSP 中仅由 EL 实现。

${foo.someProperty}
<小时/>
application_beginRequest
application_endRequest

实现ServletRequestListener :

@WebListener
public class RequestListener implements ServletRequestListener {

@Override
public void requestInitialized(ServletRequestEvent event) {
// Do your job here on request begin.
}

@Override
public void requestDestroyed(ServletRequestEvent event) {
// Do your job here on request end.
}

}

您可以将请求范围的变量存储为 ServletRequest 的属性.

event.getServletRequest().setAttribute("foo" new Foo());

它可以通过传入的 HttpServletRequest 参数在 servlet 中使用。

Foo foo = (Foo) request.getAttribute("foo");

在 JSP 中仅由 EL 实现。

${foo.someProperty}
<小时/>

您甚至可以在单个类中实现这两个接口(interface):

@WebListener
public class GlobalListener implements ServletContextListener, ServletRequestListener {
// ...
}

或者,更常见的是,如果您希望能够更全局地修改/控制请求,则 Filter :

@WebFilter(urlPatterns={"/some/*"})
public class SomeFilter implements Filter {

@Override
public void init(FilterConfig config) throws ServletException {
// Do here your application startup job.

// If you have any <init-param> in web.xml, then you could get them
// here by config.getInitParameter("name") and assign it as field.
}

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// Do here your request/response preprocessing job.

// Continue the request/response (if you haven't already forwarded/redirected the request/response beforehand).
chain.doFilter(request, response);

// Do here your request/response postprocessing job.
}

@Override
public void destroy() {
// Do here your application shutdown job.

// If you have assigned any expensive resources as field of
// this Filter class, then you could clean/close them here.
}

}

另请参阅https://stackoverflow.com/tags/servlet-filters/info .

Servlet API 的所有其他监听器都可以在 the javax.servlet package 中作为接口(interface)找到。 。了解在 Javadocs 中找到适合自己的方法。

关于java - 简单的 Servlet 应用程序,在哪里存储我可以引用的配置设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7975162/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com