水果库存管理系统 进阶1 单sevlet版
上一个基础版,我们是写了好多个Servlet,然后每个不同的操作我们就去找到不同的Servlet去响应请求完成应答。这么写的逻辑好理解,但是如果代码量大了,就会显得比较乱,所以我们想,能否将所有的servlet整合到一个Servlet中呢?还真的可以。
Servlet改动
我们可以将所有servlet整合成一个大的FruitServlet,然后将原本那么多不同的servlet实现的功能写成FruitSerlet中的函数。
首先第一步,创建一个FruitServlet,然后重写servlet方法:
request.setCharacterEncoding("UTF-8");
String operate = request.getParameter("operate");
if(StringUtil.isEmpty(operate)){
operate = "index" ;
}
然后下面对这个operate进行判断:
switch(operate){
case "index":
index(request,response);
break
case "add":
add(request,response);
break;
case "del":
del(request,response);
break;
case "edit":
edit(request,response);
break;
case "update":
update(request,response);
break;
default:
throw new RuntimeException("operate值非法!");
其实看这个FruitServlet就能大概理解一些,也就是FruitServlet会接受一个参数(方法名),然后根据这个参数判断要执行什么方法。
比如接收的参数为index,就执行index方法,接收的参数为add,就执行add方法。
所以我们要做的事也很简单,就是把原本不同servlet实现的功能写成FruitServlet中的不同函数。
比如说原本的UpdateServlet是这样的:
public class UpdateServlet extends ViewBaseServlet {
private FruitDAO fruitDAO = new FruitDAOImpl();
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.设置编码
request.setCharacterEncoding("utf-8");
//2.获取参数
String fidStr = request.getParameter("fid");
Integer fid = Integer.parseInt(fidStr);
String fname = request.getParameter("fname");
String priceStr = request.getParameter("price");
int price = Integer.parseInt(priceStr);
String fcountStr = request.getParameter("fcount");
Integer fcount = Integer.parseInt(fcountStr);
String remark = request.getParameter("remark");
//3.执行更新
fruitDAO.updateFruit(new Fruit(fid,fname, price ,fcount ,remark ));
//4.资源跳转
//super.processTemplate("index",request,response);
//request.getRequestDispatcher("index.html").forward(request,response);
//此处需要重定向,目的是重新给IndexServlet发请求,重新获取furitList,然后覆盖到session中,这样index.html页面上显示的session中的数据才是最新的
response.sendRedirect("index");
}
}
那么现在就得将里面的实现代码,都迁移到FruitServlet的update函数中。