【问题标题】:Init method not firing JSP Servlet初始化方法不触发 JSP Servlet
【发布时间】:2014-04-16 02:13:30
【问题描述】:

我正在使用 Eclipse IDE、一个简单的 HelloServlet.java 文件和一个简单的 index.jsp 文件。当我运行本地服务器时,程序启动但以下代码不执行:

   /**
     * @see Servlet#init(ServletConfig)
     */
    public void init(ServletConfig config) throws ServletException {
        // TODO Auto-generated method stub
        System.out.println("Init Firing: ");
    }

我打开了控制台选项卡,我收到的最后一条语句是:INFO:服务器在 1442 毫秒内启动。我该怎么做才能触发 init 方法?

【问题讨论】:

  • 现在尝试调用 servlet
  • 也许你正在寻找这个stackoverflow.com/questions/15593935/…
  • 它不是一个监听器,它是我在创建项目时选择包含在 servlet (HelloServlet.java) 文件中的 init 方法(上图)。

标签: servlets


【解决方案1】:

容器只会在 servlet 被调用时调用 init() 方法,而不是在容器启动时。

如果你想在容器启动时启动,你可以使用这里建议的 ContextListener call method on server startup

此代码适用于我

package mine;

import java.io.IOException;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MySL extends HttpServlet {
    private static final long serialVersionUID = 1L;
    public void init(ServletConfig config) throws ServletException {
        System.out.println("xyz="+config.getInitParameter("xyz"));
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("doGet");
    }
}

和 web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    id="WebApp_ID" version="3.0">
    <display-name>jsp</display-name>
    <servlet>
        <servlet-name>mySL</servlet-name>
        <servlet-class>mine.MySL</servlet-class>

        <init-param>
            <param-name>xyz</param-name>
            <param-value>123</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>mySL</servlet-name>
        <url-pattern>/MySL</url-pattern>
    </servlet-mapping>
</web-app>

当服务器启动时,什么也没有发生,因为调用 servlet 时调用了 init() 方法。

在第一次 servlet 调用时(例如,在浏览器中打开类似 http://myserver.mydomain:8080/myapp/MySL 的内容),您会得到

xyz=123
doGet

在第二次 servlet 调用中,您将获得

doGet

请注意,这是声明事物的“旧方式”。如今,可以使用注释进行 Servlets 配置。注意不要将注解与同一个 servlet 的 XML 声明混在一起。

带有注解的 Servlet 如下所示

package mine;

import java.io.IOException;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(urlPatterns = { "/OtherSL" }, initParams = { @WebInitParam(name = "abc", value = "456", description = "some parameter") })
public class OtherSL extends HttpServlet {
    private static final long serialVersionUID = 1L;
    public void init(ServletConfig config) throws ServletException {
        System.out.println("abc=" + config.getInitParameter("abc"));
    }

    protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        System.out.println("doGet");
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多