Servlet优化

举报
兰舟千帆 发表于 2022/07/21 19:15:06 2022/07/21
【摘要】 一些优化封装为了能处理不同的请求方式,我们得在service方法中进行判断,然后写不同的业务处理,这样能实现,但是每个Servlet类中都将有相似的代码,针对这个问题,有什么可以优化的策略么?package jgd;import javax.servlet.*;import javax.servlet.http.HttpServlet;import javax.servlet.http.H...

一些优化封装

为了能处理不同的请求方式,我们得在service方法中进行判断,然后写不同的业务处理,这样能实现,但是每个Servlet类中都将有相似的代码,针对这个问题,有什么可以优化的策略么?

package jgd;

import javax.servlet.*;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

public class ServletDemo5 implements Servlet {
    public void init(ServletConfig servletConfig) throws ServletException {

    }

    public ServletConfig getServletConfig() {
        return null;
    }

    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
//        根据请求方式的不同,进行分别的处理
//        获取请求方式
//        先转换为http协议下的逻辑
        HttpServletRequest request = (HttpServletRequest) servletRequest;
//获取到方法
        String method = request.getMethod();
//        进行判断
        if ("GET".equals(method)) {
//            get方式的处理逻辑
        } else if ("POST".equals(method)) {
//            post方式的处理逻辑
        }

    }

    public String getServletInfo() {
        return null;
    }

    public void destroy() {

    }
}

比如上面这段代码,我不想每次写的时候都写逻辑判断,这是一段重复的代码。我不想每次写。这里的逻辑处理还不是很多,如果很多很多的话,我们该如何如理?我们每次都需要这样处理的话,我们就应该进行封装调用。
在这里插入图片描述
现在我们自己定义一个类

package jgd;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

public class MyHttpServlet implements Servlet {
    public void init(ServletConfig servletConfig) throws ServletException {

    }

    public ServletConfig getServletConfig() {
        return null;
    }

    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
//        根据请求方式的不同,进行分别的处理
//        获取请求方式
//        先转换为http协议下的逻辑
        HttpServletRequest request = (HttpServletRequest) servletRequest;
//获取到方法
        String method = request.getMethod();
//        进行判断
        if ("GET".equals(method)) {
            doGet(servletRequest, servletResponse);
//            get方式的处理逻辑
        } else if ("POST".equals(method)) {
//            post方式的处理逻辑
            doPost(servletRequest, servletResponse);
        }

    }

    protected void doPost(ServletRequest servletRequest, ServletResponse servletResponse) {
    }

    protected void doGet(ServletRequest servletRequest, ServletResponse servletResponse) {
    }

    public String getServletInfo() {
        return null;
    }

    public void destroy() {

    }
}

我们把方法定义好,参数安排好。可以让之后的类继承到这个类。然后实现调用统一的功能。

后面就简化了好多,这也是继承的好处。也是一种功能封装。

package jgd;

import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;

@WebServlet("/demo6")
public class ServletDemo6 extends MyHttpServlet {
    @Override
    protected void doGet(ServletRequest servletRequest, ServletResponse servletResponse) {
//        super.doGet(servletRequest, servletResponse);
        System.out.println("get...");
    }

    @Override
    protected void doPost(ServletRequest servletRequest, ServletResponse servletResponse) {
//        super.doPost(servletRequest, servletResponse);
        System.out.println("post..");
    }
}

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。