如何在 Tomcat 启动时加载任意类?我看到load-on-startup
了文件的标签web.xml
,但我可以使用它吗?我应该如何实现我的类?
<servlet-name>??</servlet-name>
<servlet-class>??</servlet-class>
<load-on-startup>10</load-on-startup>
如何在 Tomcat 启动时加载任意类?我看到load-on-startup
了文件的标签web.xml
,但我可以使用它吗?我应该如何实现我的类?
<servlet-name>??</servlet-name>
<servlet-class>??</servlet-class>
<load-on-startup>10</load-on-startup>
这些是为了指定 servlet 的加载顺序。然而,servlet 更倾向于控制、预处理和/或后处理 HTTP 请求/响应,而您听起来更像是在寻找 webapp 启动的钩子。在这种情况下,你宁愿想要一个ServletContextListener
.
@WebListener
public class Config implements ServletContextListener {
public void contextInitialized(ServletContextEvent event) {
// Do your thing during webapp's startup.
}
public void contextDestroyed(ServletContextEvent event) {
// Do your thing during webapp's shutdown.
}
}
如果您还没有使用 Servlet 3.0(因此不能使用@WebListener
),那么您需要手动注册它,web.xml
如下所示:
<listener>
<listener-class>com.example.Config</listener-class>
</listener>
元素load-on-startup 表示应该在 Web 应用程序启动时加载(实例化并调用它的 init())这个 servlet。该元素的元素内容必须是一个整数,表示加载servlet的顺序。换句话说,容器以升序的整数值加载servlet。将首先加载 0 值,然后加载 1、2、3 等等。
让我们尝试通过下面给出的示例来理解它:
web.xml
<web-app>
....
//=====================servlet 1==============
<servlet>
<servlet-name>servlet1</servlet-name>
<servlet-class>com.javatpoint.FirstServlet</servlet-class>
<load-on-startup>0</load-on-startup> //value given 0(zero)
</servlet>
//=====================servlet 2==============
<servlet>
<servlet-name>servlet2</servlet-name>
<servlet-class>com.javatpoint.SecondServlet</servlet-class>
<load-on-startup>1</load-on-startup> //value given 1(one)
</servlet>
...
</web-app>
定义了 2 个 servlet,两个 servlet 都将在项目部署或服务器启动时加载。但是,servlet1 将首先加载,然后是 servlet2。
传递负值: 如果传递负值,servlet 将在请求时加载,在第一次请求时。
加缀,
您的 XML 看起来不错。
您应该在您的 servlet 类中放置一个 init() 方法,该方法会在您的服务器启动时调用。doGet、doPost 和 do 方法仅在有传入请求时调用。
public class YourServlet extends HttpServlet
{
public void init()
{
//initialize( or add a log statement to debug)
}
}
这是 Tomcat 7.0 第 1 步的解决方案:为您的 webapp/servlet 创建 war 文件。如果您使用的是 Eclipse,则 File->Export->Web->WAR 文件,并将其保存到已知位置。
第 2 步:找出您的 tomcat 的主文件夹。为此,转到 tomcat/apache-tomcat-7.0.41/bin 并执行 ./startup.sh 这将打印出几个全局变量名称。记下 CATALINA_HOME 的那个。
第 3 步:从 CATALINA_HOME/webapps 中的第 1 步复制战争文件
第 4 步:接下来,在 CATALINA_HOME/conf/{Engine}/localhost/MyServlets.xml 中创建一个 xml 文件:
<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
<Context deployOnStartup="true" docBase="/home/ubuntu/Downloads/apache-tomcat-7.0.42/webapps/" reloadable="true">
<Manager pathname=""/>
</Context>
更改 docBase 以指向您在步骤 3 中复制 war 文件的位置。
现在,你可以去 tomcat/apache-tomcat-7.0.41/bin 并执行 ./startup.sh。您的 servlet 将自动启动。希望这可以帮助。