Servlets Init方法未触发JSP Servlet

Servlets Init方法未触发JSP Servlet,servlets,Servlets,我正在使用EclipseIDE,一个简单的HelloServlet.java文件和一个简单的index.jsp文件。运行本地服务器时,程序启动,但不执行以下代码: /** * @see Servlet#init(ServletConfig) */ public void init(ServletConfig config) throws ServletException { // TODO Auto-generated method stub

我正在使用EclipseIDE,一个简单的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: ");
    }

我打开了Console选项卡,收到的最后一条语句是:INFO:Server startup in 1442 ms。我应该怎么做才能启动init方法?

容器仅在调用servlet的init方法时调用,而不是在容器启动时调用

如果要在容器启动时启动,可以按照此处的建议使用ContextListener

这个代码对我有用

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调用中,您将得到

xyz=123
doGet
doGet
请注意,这是旧的声明方式。现在,可以使用注释进行servlet配置。注意不要将注释与同一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");
    }

}

现在尝试调用servlet可能您正在寻找它,它不是一个侦听器,而是上面的init方法,我选择在项目创建时将其包含在servlet HelloServlet.java文件中。