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