Servlet开发的三种方法

第一种 实现 Servlet 接口,需要覆写 Servlet 的5个方法,并将ServletConfig对象保存到类级变量中

package app01a;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;

@WebServlet(name = "MyServlet", urlPatterns = {"/my"})
public class MyServlet implements Servlet {
    private transient ServletConfig servletConfig;
    
    @Override
    public void destroy() {    }

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

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

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

    }

    @Override
    public void service(ServletRequest resuest, ServletResponse response) throws ServletException, IOException {
        String servletName = servletConfig.getServletName();
        response.setContentType("text/html");
        PrintWriter writer = response.getWriter();
        writer.print("<html><head></head>"
                + "<body>Hello form "
                + servletName
                + "</body></html>");
    }
}

第二种 继承抽象类 GenericServlet覆写service()方法

package app01a;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.GenericServlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;

@WebServlet(name = "GenericServletDemoServlet", urlPatterns = { "/generic" },
            initParams = { @WebInitParam(name = "admin", value = "Harry taciak"),
                           @WebInitParam(name = "email", value = "admin@example.com")
                            }
           )
public class GenericServletDemoServlet extends GenericServlet {
    private static final long serialVersionUID = 1L;

    @Override
    public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
        ServletConfig servletConfig = getServletConfig();
        String admin = servletConfig.getInitParameter("admin");
        String email = servletConfig.getInitParameter("email");
        response.setContentType("text/html");
        PrintWriter writer = response.getWriter();
        writer.print("<html><head></head><body>" +
                     "Admin: " + admin + 
                     "<br/>Email: " + email +
                     "</body></html>");
    }

}

第三种 继承类 HttpServlet  覆写doGet()和doPost()方法 public abstract class HttpServlet extends GenericServlet 

package app01c;

import java.io.IOException;
import java.io.PrintWriter;

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

@WebServlet(name = "SimleServlet", urlPatterns = {"/simple"})
public class SimpleServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
 
    public SimpleServlet() {
        super();
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html");
        PrintWriter writer = response.getWriter();
        writer.println("<html>");
        writer.println("<head>");
        writer.println("</head>");
        writer.println("<body>");
        writer.println("This is the Simple Servlet");
        writer.println("</body>");
        writer.println("</html>");
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

GenericServlet、HttpServlet是Servlet接口有两个默认的实现类。

HttpServlet在原有的Servlet接口上添加了一些HTTP协议的处理方法,是能够处理HTTP请求的Servlet。其功能比Servlet更加强大,因此开发人员在编写Servlet时,通常应继承HttpServlet类,而不是直接实现Servlet接口。

HttpServlet在实现Servlet接口时覆写了service()方法,该方法体内的代码会自动判断用户的请求,如果是Get请求,则自动调用HttpServlet的doGet()方法;如果是Post请求,则自动调用doPost()方法。通常开发人员在编写Servlet时,只需要覆写doGet()或doPost()方法,而不用再去覆写service()方法。

原文地址:https://www.cnblogs.com/0820LL/p/9801476.html