1

我正在通过一组代码示例学习 servlets 3.0,许多方法的目的对我来说没有任何意义。服务方式除外。

输出是“来自 MyServlet 的你好”。但是,所有其他方法是什么?

@WebServlet(name = "MyServlet", urlPatterns = { "/my" })
public class MyServlet implements Servlet {

    What is the line below trying to do? 
private transient ServletConfig servletConfig;

@Override
public void init(ServletConfig servletConfig) throws ServletException {
    this.servletConfig = servletConfig;
}

@Override
public ServletConfig getServletConfig() {
    return servletConfig;
}

@Override
public String getServletInfo() {
    return "My Servlet";
}


     //This is the only method that makes sense to me. All the others, I have no 
        idea why they are in here.
@Override
public void service(ServletRequest request, ServletResponse response)
        throws ServletException, IOException {
    String servletName = servletConfig.getServletName();
    response.setContentType("text/html");
    PrintWriter writer = response.getWriter();
    writer.print("<html><head></head>" + "<body>Hello from " + servletName
            + "</body></html>");
}

@Override
public void destroy() {
}

}

4

1 回答 1

3

我不确定您阅读了哪些教程/示例,但您应该扩展HttpServlet抽象类,而不是实现Servlet接口。您确实并不直接需要它们中的任何一个。HttpServlet已经为您实施了所有必要的样板。

总而言之,这是您最低限度需要的:

@WebServlet("/my")
public class MyServlet extends HttpServlet {

    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String servletName = getServletConfig().getServletName();
        response.setContentType("text/html");
        response.getWriter().print("<html><head></head>" 
            + "<body>Hello from " + servletName + "</body></html>");
    }

}

(尽管我知道这只是一个学习练习,但我想指出以这种方式在 servlet 中发出 HTML 是一种不好的做法,应该使用 JSP)

至于他们都做了什么,好吧,它们init()为您提供了在 servlet 构建期间基于 servlet 配置执行初始化的可能性。destroy()为您提供在 servlet 销毁期间执行清理的可能性。属性和那些 getter 方法只是为了满足Servlet接口的契约所必需的。请注意,它们都不是特定于Servlet 3.0 的。它们已经存在于旧版本中。

也可以看看:

于 2012-09-21T01:57:23.373 回答