【问题标题】:Servlet 3.0 methodsServlet 3.0 方法
【发布时间】:2012-09-21 01:46:38
【问题描述】:

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

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

@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() {
}

}

【问题讨论】:

    标签: jakarta-ee servlets servlet-3.0


    【解决方案1】:

    我不确定您阅读了哪些教程/示例,但您应该扩展 HttpServlet abstract class,而不是实现 Servlet interface。您确实并不直接需要它们中的任何一个。 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 销毁期间执行清理的可能性。为了满足Servlet interface's contract,该属性和那些getter 方法是必需的。请注意,它们都不是明确特定于 Servlet 3.0 的。它们已经存在于旧版本中。

    另见:

    【讨论】:

    • 谢谢,Servlet 接口让我很困惑。将查看这些链接。
    猜你喜欢
    • 1970-01-01
    • 2012-06-08
    • 1970-01-01
    • 1970-01-01
    • 2012-04-10
    • 2016-01-22
    • 1970-01-01
    • 1970-01-01
    • 2013-11-16
    相关资源
    最近更新 更多