J2EE_登錄驗證

新建項目


 

打開IDEA,並新建一個Web項目

添加Tomcat服務器,並添加包依賴

 

 

 

 

 

 

 

 

 

 

 

 

建立數據庫,數據表,並添加內內容


 

 

 建立Servlet,進行登錄驗證


做者使用的Mysql 5.6版本,而且部署於服務器,因此先要去網上下載JDBC驅動(下載地址,mysql數據庫與JDBC版本對應查看地址),下載zip包並導入項目(參考博客),接下來就是新建Servlet編寫代碼了

 1 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 2         // 得到輸入流
 3         PrintWriter out = response.getWriter();
 4         // 從請求對象中得到指定參數的值
 5         String strName = request.getParameter("txtName");
 6         String strPwd = request.getParameter("txtPwd");
 7         //定義數據庫操做所需對象
 8         Connection conn=null;
 9         Statement stmt;
10         ResultSet rs;
11         PreparedStatement psmt;
12         // 數據庫連接須要的參數
13         String driver="com.mysql.jdbc.Driver";
14         String url = "jdbc:mysql://49.234.222.244:3306/J2EE";
15         String user = "root";
16         String pwd = "990130";
17         try {
18             Class.forName(driver);
19             conn = DriverManager.getConnection(url,user,pwd);
20             String sql = "select * from USER where username=? and pwd=?";
21             psmt = conn.prepareStatement(sql);
22             psmt.setString(1,strName);
23             psmt.setString(2,strPwd);
24             rs = psmt.executeQuery();
25             if(rs.next())
26             {
27                 //設置cookie
28                 Cookie cooUsername = new Cookie("username",strName);
29                 cooUsername.setMaxAge(60*60*24*7);
30                 response.addCookie(cooUsername);
31                 Cookie cooPwd = new Cookie("pwd",strPwd);
32                 cooPwd.setMaxAge(60*60*24*7);
33                 response.addCookie(cooPwd);
34 
35                 HttpSession session = request.getSession(true);
36                 session.setAttribute("username",strName);
37                 session.setAttribute("pwd",strPwd);
38 
39                 String path = request.getContextPath();
40                 String basepath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
41                 String page = basepath+"/page/Online.jsp";
42                 response.sendRedirect(page);
43             }
44             else
45             {
46                 out.println("錯誤的用戶名和密碼!");
47             }
48             psmt.close();
49         } catch (ClassNotFoundException | SQLException e) {
50             e.printStackTrace();
51         }
52     }
LoginServlet

 編寫完代碼必定要記得在web.xml中註冊!!!

 若是用戶在登陸時選擇保存登陸信息,30天內,用戶無需登陸


這個功能能夠經過Cookie實現,須要Servlet,同時須要修改js文件,下面貼出主要代碼

1 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
2         Cookie coo = new Cookie("username", "tom");//建立一個鍵值對的cookie對象
3         coo.setMaxAge(60*60*24*7);//設置cookie的生命週期
4         response.addCookie(coo);//添加到response中
5     }
SetCookie
1  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
2         Cookie coo[] = request.getCookies();//獲取request中cookie集合
3 
4         //循環遍歷
5         for (Cookie co : coo) {
6             System.out.println(co.getName() + ":" + co.getValue());
7             response.getWriter().println(co.getValue());
8         }
9     }
GetCookie
 1 function getCookie(cname){
 2     var name = cname + "=";
 3     var ca = document.cookie.split(';');
 4     for(var i=0; i<ca.length; i++) {
 5         var c = ca[i].trim();
 6         if (c.indexOf(name)==0) { return c.substring(name.length,c.length); }
 7     }
 8     return "";
 9 }
10 function checkCookie(){
11     var user=getCookie("username");
12     var uname=document.getElementById("input_user");
13     var pwd=getCookie("pwd");
14     var upwd=document.getElementById("input_password");
15 
16 
17     if (user!=""){
18         var uname=document.getElementById("input_user");
19         uname.value=user;
20         upwd=pwd;
21     }
22 }
JS

顯示網站當前在線人數


這個功能能夠經過Session實現,須要Servlet,這裏採用了Listener+Session

 1 private static int activeSessions = 0; //初始化在線人數
 2     // Public constructor is required by servlet spec
 3 
 4     public void sessionCreated(HttpSessionEvent se) {
 5         activeSessions++;
 6     }
 7 
 8     public void sessionDestroyed(HttpSessionEvent se) {
 9         if(activeSessions>0)
10         {
11             activeSessions--;
12         }
13     }
14     public static String getActiveSessions() {
15         return String.valueOf(activeSessions);
16     }
ListenerSession

同時JSP頁面添加html

Online.jsp
<%@ page import="SessionOnline.ListenerSession" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
    String name= (String)request.getSession().getAttribute("username");
    String pwd=(String)request.getSession().getAttribute("pwd");
    String nums = (String)ListenerSession.getActiveSessions();
%>
<h1>您好!</h1>
<p>用戶名:<%=name%><br></p>
<p>密碼:<%=pwd%><br></p>
<p>在線人數:<%=nums%></p>

登陸時用戶名爲中文可能不能正常識別,解決該問題


 這個功能須要使用Filter實現,新建一個Filter,並將其用web.xml註冊

 

 

 

 1 @WebFilter(filterName = "GBFilter")
 2 public class GBFilter implements Filter {
 3     public void destroy() {
 4     }
 5 
 6     public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
 7         String encoding=req.getCharacterEncoding();//原來的編碼
 8         encoding="utf-8";//新編碼
 9         req.setCharacterEncoding(encoding);
10         resp.setContentType("text/html;charset="+encoding);
11         chain.doFilter(req, resp);
12     }
13 
14     public void init(FilterConfig config) throws ServletException {
15 
16     }
GbFilter

最後附上web.xml中代碼以及運行結果圖

 1 <!--    登錄驗證的servlet-->
 2     <servlet>
 3         <servlet-name>LoginServlet</servlet-name>
 4         <servlet-class>LoginServlet</servlet-class>
 5     </servlet>
 6     <servlet-mapping>
 7         <servlet-name>LoginServlet</servlet-name>
 8         <url-pattern>/login</url-pattern>
 9     </servlet-mapping>
10 <!--    Cookie設置的Servlet-->
11     <servlet>
12         <servlet-name>GetCookie</servlet-name>
13         <servlet-class>GetCookie</servlet-class>
14     </servlet>
15     <servlet-mapping>
16         <servlet-name>GetCookie</servlet-name>
17         <url-pattern>/GetCookie</url-pattern>
18     </servlet-mapping>
19 
20     <servlet>
21         <servlet-name>SetCookie</servlet-name>
22         <servlet-class>SetCookie</servlet-class>
23     </servlet>
24     <servlet-mapping>
25         <servlet-name>SetCookie</servlet-name>
26         <url-pattern>/SetCookie</url-pattern>
27     </servlet-mapping>
28 <!--    Session設置的Servlet-->
29     <servlet>
30         <servlet-name>GetSession</servlet-name>
31         <servlet-class>GetSession</servlet-class>
32     </servlet>
33     <servlet-mapping>
34         <servlet-name>GetSession</servlet-name>
35         <url-pattern>/GetSession</url-pattern>
36     </servlet-mapping>
37 <!--    過濾器Filter設置-->
38     <filter>
39         <filter-name>GBFilter</filter-name>//定義名字
40         <filter-class>GBFilter</filter-class>//實現類
41     </filter>
42     <filter-mapping>
43         <filter-name>GBFilter</filter-name>
44         <url-pattern>/*</url-pattern>
45         <dispatcher>REQUEST</dispatcher>
46         <dispatcher>FORWARD</dispatcher>
47     </filter-mapping>
web.xml

 

 

 

 

 

 附上Github地址:https://github.com/WHYNOTEN/J2EE_Second

相關文章
相關標籤/搜索