serlvet代码优化

前面我们写的增删改查都有对应的servlet,并且一个表对应着多个增删改查,不利于管理和编写,下面我将servlet进行归类,对于同一个实体的操作方法,写入一个servlet中,比如:

UserServlet,BrandServlet。

类似下面:

public class UserServlet{
    public void selectAll()
    public void add()
    public void update()
    public void delete()
        ...
}

将注解里面的urlPattern修改成下面这种:

@WebServlet("/user/*")   后面的*号路径可以用方法名称表示

观察HTTPservlet,可以看到它里面的service方法


通过自定义BaseServlet,使用请求路径进行方法分发,替换HTTPservlet根据请求方式进行方法分发:

public class BaseServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //这里uri没有带项目名称,可以看自己服务器那边的配置有没有加项目名称
        String requestURI = req.getRequestURI();
        String methodName = requestURI.substring(requestURI.lastIndexOf('/') + 1);
        //获取方法并且执行
        Class<? extends BaseServlet> aClass = this.getClass();
        try {
            Method method = aClass.getMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);
            method.invoke(this,req,resp);
        } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
            e.printStackTrace();
        }
    }
}

创建实体类对应的servlet:

@WebServlet("/user/*")
public class UserServlet extends BaseServlet {
    public void selectAll(HttpServletRequest req, HttpServletResponse resp){
        System.out.println("user..SelectAll");
    }
    public void add(HttpServletRequest req, HttpServletResponse resp){
        System.out.println("user..add");
    }
    public void delete(HttpServletRequest req, HttpServletResponse resp){
        System.out.println("user..delete");
    }
    public void update(HttpServletRequest req, HttpServletResponse resp){
        System.out.println("user..update");
    }
}

将之前写的每一个servlet放进去就ok了,注意路径需要添加一个中间路径user

posted @   Liku007  阅读(15)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示