在開始這個小商城項目之前,就有開始寫另一個學生系統的小項目。
在學生系統上面就碰到了問題!
不會打包!不知如何分類!
發現每個業務都要創建一個Servlet!
例如:登錄loginServlet用來處理login.jsp頁面的數據。
註冊registerServlet用來處理register.jsp。。
【秉承着jsp最佳實踐的原則】- 不算問題把,前端不是我們的重點。
然後正式開始商城項目之後,這些問題也迎刃而解了。
而且這種方法很。。。牛!
第一,包裝方法。如下
補充:一般還會有service包和service.Impl包處理實體類數據庫業務!第二,關於Servlet。
我的理解是這樣的,
i),瀏覽器訪問服務器的時候都會帶着method參數
ii),我們將關於瀏覽器的請求業務分類,例如在商品項目中,可以分userServlet,productServlet,indexServlet(首頁)…【這些servlet不繼承HttpServlet】
iii),然後,在這些servlet當中實現對應的方法!例如註冊,登錄。。等法。如果方法有需要轉發至那個頁面的就將路徑作爲返回值!這樣我們就可以儘量的少創建Servlet!
列入userServlet下面的方法;
login()如下:
public String login(HttpServletRequest request, HttpServletResponse response) {
System.out.println("login~~~");
String username = request.getParameter("username");
String pswbefore = request.getParameter("psw");
String psw = MD5Utils.md5(pswbefore);
User user = new UserServiceImpl().login(username,psw);
if(user==null) {
request.setAttribute("msg", "日本人與狗禁止入內");
return "/jsp/login.jsp";
} else {
if(user.getState() == utils.Const.ACTIVE) {
//登錄成功,且郵箱激活
//1,將user存入session
HttpSession session = request.getSession();
session.setAttribute("user", user);
//2,回到首頁 baseServlet----date----->index.jsp首頁
try {
response.sendRedirect(request.getContextPath()+"/indexServlet?method=getData");
} catch (IOException e) {
e.printStackTrace();
}
} else {
//未激活
request.setAttribute("msg", "沒激激激激活");
return "/jsp/login.jsp";
}
}
return null;
}
iv)重點是,我們需要創建一個父類的baseServlet這個會繼承HttpServlet! 讓上面的servlet繼承之!
然後,在baseServlet中實現service方法,然後用反射機制獲取對應的方法!並激活。然後或去返回值,並轉發!
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
Class<? extends BaseServlet> claz = this.getClass();
//獲取方法名參數
String metd = request.getParameter("method");
//根據反射獲取方法
Method method = claz.getMethod(metd, HttpServletRequest.class,HttpServletResponse.class);
//這裏的this,就是瀏覽器請求的子類servlet
//調用該方法,並將該方法的返回值返回給path
String path = (String) method.invoke(this,request,response);
System.out.println("path=="+path);
if (path!=null) {
//轉發到方法返回的路徑
request.getRequestDispatcher(path).forward(request, response);
}
} catch exception...
}
整個的邏輯如下,畫了張潦草的圖。