JavaWeb Servlet请求分发 详解!

Servlet请求分发

在网页的表单请求中,经常会遇到不同的请求方式(get,post),对于不同的请求,需要不同的请求处理方式

方法一:

直接调用servletRequest没有选择获取请求方式的方法,但是其子类HttpServletRequest是有getMethod方法来获取请求方式的,所以先将其转化为HttpServletRequest,再判断,分别书写不同请求的不同逻辑

//service方法专门用来处理请求与响应
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
    //控制台打印
    System.out.println("Hello Servlet!");
    HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
    String method = httpServletRequest.getMethod();

    if ("POST".equals(method)) {
        System.out.println("post");
    }

    if ("GET".equals(method)) {
        System.out.println("get");
    }

}

问题:太臃肿了,这里只有一句输出看起来无所谓,但是处理逻辑过多时,一个方法内包含的代码量太多,虽说可以将这些代码再放到其他方法中嵌套的调用如下

方法一优化:

//service方法专门用来处理请求与响应
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
    //控制台打印
    System.out.println("Hello ylt!");
    HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
    String method = httpServletRequest.getMethod();
    if ("POST".equals(method)) {
        doPost();
    }
    if ("GET".equals(method)) {
        doGet();
    }
}

private void doPost() {
    System.out.println("post");
}
private void doGet() {
    System.out.println("get");
}

看起来是好一些,但是在一个方法中同时维护get和post逻辑,始终觉得臃肿,所以一般采用直接继承HttpServlet的方式对不同的请求进行处理

方法二

继承HttpServlet类,并重写其中doGet和doPost方法(常用的请求分发处理方式)

public class HttpServletTest extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doGet(req, resp);
        System.out.println("Get");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
        System.out.println("Post");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值