JavaWeb之Servlet进阶HttpServlet

准备工作

  • 引入servlet-api、jsp-api相关jar包或者引入maven依赖
 		<dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api -->
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.3.3</version>
            <scope>provided</scope>
        </dependency>

HttpServlet是一个抽象类,继承自GenericServlet,GenericServlet实现了Servlet接口,因此本质是也是Servlet,由于实现Servlet接口必须要实现其他4个不用的方法,因此会造成非常的不方便,为了简化我们只需要执行我们自己也业务service()即可,因此可以用HttpServlet类代替更加方便,使用HttpServlet只需要继承,实现doGet()和doPost()方法即可

  • HttpServlet将Servlet中的service()方法进行分发处理请求
  • Http请求有GET、POST、PUT、DELETE等等请求方式
  • 在当前的Servlet学习中还涉及不到其他请求方式,因此只需要实现doGet()和doPost()方法即可够用
  • 浏览器默认的请求方式是GET请求方式
    从HttpServlet中的源码中可以看出,最终还是通过service()方法进行分发执行oGet()和doPost()方法
    在这里插入图片描述
    代码示例
@WebServlet("/demo")
public class HelloServlet extends HttpServlet {
    
    
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
    
        resp.setContentType("text/html;charset=UTF-8");
        resp.getWriter().println("Hello World,这是GET请求");

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
    
        resp.getWriter().println("Hello World,这是GET请求");
    }
}

浏览器访问
在这里插入图片描述

通过流程图来分析以上过程
在这里插入图片描述

自定义一个HttpServlet类

自定义MyGenericServlet类

//这个类只帮我们把Servlet接口中的方法都实现掉,而我们只注重service()方法
public  abstract class MyGenericServlet implements Servlet {
    
    
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
    
    

    }

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


    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
    
    

    }

    @Override
    public String getServletInfo() {
    
    
        return null;
    }

    @Override
    public void destroy() {
    
    

    }




}

自定义MyHttpServlet类

//这个类是将我们的service方法进行优化,将请求分发,根据请求方式来执行特定方法
public class MyHttpServlet extends MyGenericServlet{
    
    
    //只关注业务service方法,其余方法实质性不操作
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
    
    
        //由于浏览器是HTTP请求方式,
        // HttpServletRequest和HttpServletResponse是继承自ServletRequest和ServletResponse
        //则先将先将ServletRequest和ServletResponse转化为HttpServletRequest和HttpServletResponse(向下转型)
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        //通过获取浏览器请求方式来进行分发
        String method = request.getMethod();
        //如果是GET请求调用doGet方法
        if (method.equals("GET")) {
    
    
            this.doGet(request, response);
        } else if (method.equals("POST")) {
    
    
            //如果是POST请求调用doPost方法
            this.doPost(request, response);
        }else {
    
    
            //其他请求方式,暂时不处理
        }

    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
    
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
    
    }


}

我们自己写业务方法的Servlet类

//只专注于GET和POST请求方式即可
@WebServlet("/myServlet")
public class HelloWorldServlet extends MyHttpServlet{
    
    

    //我们自己写的MyHttpServlet类,继承写自己的业务方法
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        response.getWriter().write("Hello World GET");
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        response.getWriter().write("Hello World POST");
    }
}

测试示例(通过Postman工具来测试)
在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45608165/article/details/112336609