设计PageBeanHelper
- (1)有项目中,有两份及以上的代码相似度非常高。作一个封装与设计
- (2)好处:代码更简洁,开发更高效
- (3)
类名.方法名A().方法名B()
- (4)特点:
方法内部返回当前对象
RouteService2.java
public class RouteService2 {
public PageBean search(String keyword, int currentPage, int pageSize) {
RouteDao routeDao = MySessionUtils2.getMapper(RouteDao.class);
int totalCount = routeDao.findCountByName("%" + keyword + "%");
int start = (currentPage - 1) * pageSize;
List<Route> list = routeDao.findPageByName("%" + keyword + "%", start, pageSize);
PageBean pb = PageBeanHelper.start(currentPage, pageSize).count(totalCount).list(list);
return pb;
}
public PageBean findPageByCid(int cid, int currentPage, int pageSize) {
RouteDao routeDao = MySessionUtils2.getMapper(RouteDao.class);
int totalCount = routeDao.findCountByCid(cid);
int start = (currentPage - 1) * pageSize;
List<Route> list = routeDao.findPageByCid(cid, start, pageSize);
return PageBeanHelper.start(currentPage,pageSize).count(totalCount).list(list);
}
}
PageBeanHelper.java ***
public class PageBeanHelper {
public static PageBean start(int currentPage, int pageSize) {
PageBean pb = new PageBean();
pb.setCurrentPage(currentPage);
pb.setPageSize(pageSize);
return pb;
}
}
PageBean.java
public PageBean count(int totalCount) {
this.setTotalCount(totalCount);
int totalPage = totalCount % pageSize == 0 ? totalCount / pageSize : totalCount / pageSize + 1;
this.setTotalPage(totalPage);
return this;
}
public PageBean list(List<Route> list) {
this.list = list;
return this;
}
设计BaseServlet
使用路径匹配对应的方法
- (1)为什么要减少Servlet的数量?
现在是一个功能一个Servlet
目标:数据库中一张表对应一个Servlet
- (2)实现步骤
在Servlet中提供不同的方法,完成用户的请求。
》》路径匹配 /user/*
》》根据请求路径选择执行对应的方法
》》反射改写if语句
@WebServlet("/route/*")
public class Route3Servlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String uri = req.getRequestURI();//访问路径
//search or findByCid
System.out.println(uri);
int start = uri.lastIndexOf('/') + 1;
String methodName = uri.substring(start);
//根据名字调用当前类的其他方法
System.out.println(methodName);
if ("search".equals(methodName)) {
search(req, resp);
} else if ("findByCid".equals(methodName)) {
findByCid(req, resp);
}
}
优化if 判断
try {
Method method = Route3Servlet.class.getMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);
method.invoke(this, req, resp);
} catch (Exception e) {
e.printStackTrace();
}
优化,使用父类BaseServlet
- (1)项目中一般都有一个强大的基类,为什么?
- (2)子类继承父类可以自动拥有父类的非私有成员
public class BaseServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String uri = req.getRequestURI();
System.out.println(uri);
int start = uri.lastIndexOf('/') + 1;
String methodName = uri.substring(start);
try {
Method method = this.getClass().getMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);
if(method!=null){
method.invoke(this, req, resp);
}
} catch (Exception e) {
e.printStackTrace();
}
}
public String toJson(int code,Object data) {
ResponseInfo info = new ResponseInfo();
info.setCode(200);
info.setData(data);
String json = null;
try {
json = new ObjectMapper().writeValueAsString(info);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return json;
}
}