遇到的問題1:核心問題,就是如果需要做登陸和登陸到主界面的話,需要做三個界面。三個界面分別是:
1:登陸界面
2:驗證登陸界面
3:主界面
下面來解釋每個界面的作用。登錄界面顧名思義了就是登錄,目前JSP還不會,就outprintln代碼了(大佬不要笑)。這里有一個問題,我最開始的思路是,直接在這個界面申請出一個session然后把這個界面文本框的值給session。這時候經過測試發現,在本界面無法使用
1 String uname = req.getParameter("username");
來獲得文本框的值了,這時候就算直接輸出uname,uname也是空。那么我是怎么處理的呢?
答案在界面2,也就是登錄驗證界面
先直接甩出代碼
1 /注冊驅動 2 Class.forName("com.mysql.jdbc.Driver"); 3 //創建出數據庫連接對象並使用三個參數,接口,用戶名,密碼 conn = DriverManager.getConnection(url, name, password); 4 System.out.println("連接數據庫成功"); 5 //預編譯對象 6 String sql = "select* from user where userName = ? and userPass = ?"; 7 ps = conn.prepareStatement(sql); 8 //賦值 9 ps.setString(1,uname); 10 ps.setString(2,upass); 11 //執行 12 rs = ps.executeQuery(); 13 //業務邏輯 14 if(rs.next()){ 15 HttpSession session = req.getSession(); 16 session.setAttribute("userName", uname); 17 resp.sendRedirect("MainFace"); 18 }else{ 19 String flag = "用戶名密碼錯誤!"; 20 flag = java.net.URLEncoder.encode(flag.toString(),"UTF-8"); 21 resp.sendRedirect("Login?flag="+flag); 22 }
我這個用戶名密碼的驗證通過JDBC訪問了自己電腦里的MySQL數據庫。然后,讓判定登錄成功的時候,申請一個session然后把這個成功並且正確的username賦值給session
然后進行到頁面3也就是主頁面。
主頁面沒什么好說的,就是首先判斷一下是不是非法登錄。也就是session的userName是不是空。如果username值是空的話,說明用戶沒用經過頁面2的驗證界面直接訪問了主界面,所以是非法登錄的,這時候就要給它反回主界面並且提示出非法登錄。關於get方法在地址欄反回中文的問題我的其他博客有詳細介紹,在此不多敘述了。下面給出頁面三也就是主界面的代碼:
- PrintWriter out = resp.getWriter();
- HttpSession session = req.getSession();
- if(session.getAttribute("userName") == null){
- String flag = "非法登錄!";
- flag = java.net.URLEncoder.encode(flag.toString(),"UTF-8");
- resp.sendRedirect("Login?flag="+flag);
- }
- out.println("歡迎管理員:"+session.getAttribute("userName"));