筆者最近學完jsp和servlet,於是心血來潮的打算寫個簡單的用戶案例
環境准備:
開發工具eclipse
jdk-1.8.0_72
tomcat-9.0.5

前端部分:
1.自己手寫了一套樣式
2.使用ajax交互
目錄結構:
java目錄:

前端目錄

需求分析:
1.能夠實現用戶的登錄和注冊
2.能夠實現對用戶信息的增刪查改
3.登錄過一次的用戶保存登錄記錄,也就是記錄session
由於筆者不是很擅長寫界面,所以后台界面部分不是寫的很好看,這里就先預覽一遍

由於代碼量太多了,我就把這個項目放到了github上 https://github.com/chenCmengmengda/javaweb_user
接下來我把最最最核心的部分貼出來
首先我們都知道HttpServlet這個類中已經幫我們實現了doGet和doPost,可是如果請求的后台url一多,不可能每個都單獨寫成一個類,所以這兩個方法根本不可取,我們要的是一個類中的多個方法都能被我們以url傳參的形式訪問。
例如:http://localhost:8080/demo1/xxx?method=login
於是我在資料中翻到了這么一段話。

注意藍色字體,HttpServlet的實現關鍵在於覆蓋了service方法,因此我們只要自己寫一個類覆蓋HttpServlet中的service方法就OK了
其實很多代碼只要照搬HttpServlet就OK了,想要實現我們的功能,那么就加上反射的思路進去就OK了
1 public class BaseServlet extends HttpServlet { 2 /* 3 * 它會根據請求中的m,來決定調用本類的哪個方法 4 */ 5 protected void service(HttpServletRequest req, HttpServletResponse res) 6 throws ServletException, IOException { 7 req.setCharacterEncoding("UTF-8"); 8 res.setContentType("text/html;charset=utf-8"); 9 10 // 例如:http://localhost:8080/demo1/xxx?method=login 11 String methodName = req.getParameter("method");// 它是一個方法名稱 12 // System.out.println(methodName); 13 14 // 當沒用指定要調用的方法時,那么默認請求的是execute()方法。 15 if(methodName == null || methodName.isEmpty()) { 16 methodName = "execute"; 17 } 18 Class c = this.getClass(); 19 try { 20 // 通過方法名稱獲取方法的反射對象 21 Method m = c.getMethod(methodName, HttpServletRequest.class, 22 HttpServletResponse.class); 23 // 反射方法目標方法,也就是說,如果methodName為add,那么就調用add方法。 24 String result = (String) m.invoke(this, req, res); 25 // 通過返回值完成請求轉發 26 if(result != null && !result.isEmpty()) { 27 req.getRequestDispatcher(result).forward(req, res); 28 } 29 } catch (Exception e) { 30 throw new ServletException(e); 31 } 32 } 33 }
有了這個類之后,我們自己就可以創建一個controller的包
里面的類繼承上面的BaseServlet類

OK,本次案例到此結束,更多的細節請去看github中的源代碼
如果有幸這篇隨筆能被某位路人朋友看到,筆者此謝謝觀看啦
