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 @ 2023-02-01 16:43  Liku007  阅读(14)  评论(0编辑  收藏  举报