Web.xml 配置替换为 LoadOnStartup 的注解
Web.xml configuration replaced with Anotations for LoadOnStartup
规格
Tomcat 8.0.20,O/s:赢 7,Java:1.8
1) Servlet StartServletInit 扩展了 HttpServlet
2) StartServletInit 只有 1 个方法 "public void init(ServletConfig
config)" 它在类路径中读取 "properties file" 并打印
在控制台上控制台注入 key/value 对。
3) Web.xml 的标题条目如下
version="3.1"
**metadata-complete="false"**
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
3) Web.xml 启动时加载为
<servlet>
<servlet-name>StartServletInit</servlet-name>
<servlet-class>org.web.init.StartServletInit</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
O/p:完美执行并在控制台上打印。 ===> :)
问题
注释[注释了 web.xml 的 loadOnStartup 并注释了代码]
"@WebServlet(名称 = "StartServletInit",loadOnStartup = 1)
O/p :不 - 将 key/value 打印到控制台。 ===> :(
我认为您不能为同一个 servlet 混合 web.xml 配置和注释。您可以使用 web.xml 或注释,但不能同时使用。
尝试从 web.xml 中完全删除 servlet 定义和 servlet 映射,并将 servlet 映射的 url-pattern 的值作为 "value" 属性放在注释中。使用注释时,servlet 名称并不是很有用。
示例:
@WebServlet(value="/your_url_pattern", loadOnStartup=1)
首先要尝试的是将 loadOnStartup 设置为“0”,这意味着立即加载 servlet。
如果您想 运行 在启动时编写代码,最好使用 ServletContextListener。这就是它的用途,而 servlet 大部分时间都在侦听请求:
@WebListener
public class BootListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
// handle app start ...
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
// handle app stop ...
}
}
不要混淆注释和 web.xml 声明,使用其中任何一个。 metadata-complete="false" 将告诉 servlet 容器扫描类路径以获取注释。这可能适用于也可能不适用于不同的环境,而 web.xml 中的静态条目将始终有效。
规格 Tomcat 8.0.20,O/s:赢 7,Java:1.8
1) Servlet StartServletInit 扩展了 HttpServlet
2) StartServletInit 只有 1 个方法 "public void init(ServletConfig config)" 它在类路径中读取 "properties file" 并打印 在控制台上控制台注入 key/value 对。
3) Web.xml 的标题条目如下
version="3.1"
**metadata-complete="false"**
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
3) Web.xml 启动时加载为
<servlet>
<servlet-name>StartServletInit</servlet-name>
<servlet-class>org.web.init.StartServletInit</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
O/p:完美执行并在控制台上打印。 ===> :)
问题
注释[注释了 web.xml 的 loadOnStartup 并注释了代码] "@WebServlet(名称 = "StartServletInit",loadOnStartup = 1)
O/p :不 - 将 key/value 打印到控制台。 ===> :(
我认为您不能为同一个 servlet 混合 web.xml 配置和注释。您可以使用 web.xml 或注释,但不能同时使用。
尝试从 web.xml 中完全删除 servlet 定义和 servlet 映射,并将 servlet 映射的 url-pattern 的值作为 "value" 属性放在注释中。使用注释时,servlet 名称并不是很有用。
示例:
@WebServlet(value="/your_url_pattern", loadOnStartup=1)
首先要尝试的是将 loadOnStartup 设置为“0”,这意味着立即加载 servlet。
如果您想 运行 在启动时编写代码,最好使用 ServletContextListener。这就是它的用途,而 servlet 大部分时间都在侦听请求:
@WebListener
public class BootListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
// handle app start ...
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
// handle app stop ...
}
}
不要混淆注释和 web.xml 声明,使用其中任何一个。 metadata-complete="false" 将告诉 servlet 容器扫描类路径以获取注释。这可能适用于也可能不适用于不同的环境,而 web.xml 中的静态条目将始终有效。