一个Servlet如何实现增-删-改-查的业务逻辑

发布时间 2023-12-17 16:52:44作者: 一只爱阅读的程序员

一、业务场景

  最近在教学生学习JavaWeb中的Servlet,它就是一个Java服务端的小程序,用来提供各种服务。

在讲解得时候,自己突然遇到一个问题,那就是现在没有使用什么SpringMvc框架,可以配置二级路径,

该如何使用Servlet实现不同的增、删、改、查的方法呢?这个问题自己一时半会也没想明白,直到自己

学习到Servlet中路径匹配的的时候才解决这个问题。

二、需求分析

  既然需要使用一个Servlet实现增、删、改、查的方法,那么前端页面在访问的时候,必须要访问不同的请求地址,

这样后台才好区分该执行哪一个方法。比如访问/user/add路径就表示执行新增方法,访问/user/delete路径就表示执行

删除方法等等。那么Servlet的路径设置能否满足这个要求呢?答案是可以的。在设置路径匹配的时候,设置为

@WebServlet("/user/*")目录匹配,这样访问/user/add/user/delete都会访问到当前的Servlet

三、解决方案

  访问请求是导向同一个Servlet,可是下一步该如何操作呢,比如新增的时候执行新增方法,修改的时候执行修改方法。

这就比较好办了。可以在Servlet中先获取请求地址,然后截取地址中的最后一部分,然后使用switch语句或者是if/else-if

多分支条件选择语句即可。详细代码如下,

@WebServlet("/user/*")
public class UserServlet  extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String requestURL = req.getRequestURL().toString();
        PrintWriter writer = resp.getWriter();
        if(requestURL != null && requestURL.lastIndexOf("/") > 0){
            requestURL = requestURL.substring(requestURL.lastIndexOf("/") + 1);
            String idStr = req.getParameter("id");
            Integer id = Integer.parseInt(idStr);
            if("add".equals(requestURL)){
                addUser(id);
            } else if("delete".equals(requestURL)){
                deleteUser(id);
            }
            writer.write("success");
            return;
        }

        writer.write("url error");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }

    // 新增方法
    private void addUser(Integer id){
        System.out.println("addUser-->" + id);
    }

    // 删除方法
    private void deleteUser(Integer id){
        System.out.println("deleteUser-->" + id);
    }
}

测试结果如下:

 

 

 

后台方法中打印信息的如下

 

 

这样就可以实现在一个Servlet中执行不同的增、删、改、查方法,如果有多个参数的话,自行添加参数即可。