2014年12月8日 星期一

自動登入簡單範例 Use servlet example

一、建立基本專案參考:
Java建立servlet hello world example (一)

專案名稱:CookieServlet

二、首頁 index.html:
程式
<!DOCTYPE>
<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <title>CookieServlet</title>
  </head>
  <body>
    <h1>CookieServlet</h1>
    <table>
      <tr>
        <td colspan="2" style="font-weight:bold;">測試自動登入頁:</td>      
      </tr>
      <tr>
        <td><a href="login.view">登入頁</a></td>
      </tr>
    </table>
  </body>
</html>

三、登入頁 login.html:
程式

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
         <title>自動登入測試</title>
    </head>
    <body>
        <form action="login.do" method="post">
            帳號:<input type="text" name="user"><br>
            密碼:<input type="password" name="password"><br>
            自動登入:<input type="checkbox" name="login" value="auto"><br>
            <input type="submit" value="送出">
        </form>
        <div>測試 帳號:levin 密碼:123456</div>
    </body>
</html>

三、後端接收資料程式
1、登入程式
登入送出,後端接收資料程式,並判斷是否有設定自動登入。
如有勾選自動登入,將資料存入Cookie裡。

新增 LoginServlet.java :
程式
package com.test;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LoginServlet extends HttpServlet {
 private String AUTO_USER_KEY = "AUTO_USER_KEY";
 private String TEST_USER = "levin";
 private String TEST_PWD = "123456";

 @Override
 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  String user = request.getParameter("user");
  String passwd = request.getParameter("password");
  if (TEST_USER.equals(user) && TEST_PWD.equals(passwd)) {
   String login = request.getParameter("login");
   if ("auto".equals(login)) {
    Cookie cookie = new Cookie(AUTO_USER_KEY, TEST_USER + "||" + TEST_PWD);
    cookie.setMaxAge(7 * 24 * 60 * 60);
    response.addCookie(cookie);
   }
   request.setAttribute("user", user);
   request.getRequestDispatcher("user.view").forward(request, response);
  } else {
   response.sendRedirect("login.html");
  }
 }
}




2、是否需要自動登入
取出Cookie後,判斷是否有符合的帳號及密碼

新增程式 LoginCookieServlet.java :
程式
package com.test;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LoginCookieServlet extends HttpServlet {

 private String AUTO_USER_KEY = "AUTO_USER_KEY";
 private String TEST_USER = "levin";
 private String TEST_PWD = "123456";

 protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

  Cookie[] cookies = request.getCookies();
  if (cookies != null) {
   for (Cookie cookie : cookies) {
    if (null != cookie.getName() && null != cookie.getValue()) {
     String name = cookie.getName();
     String value = cookie.getValue();
     if (AUTO_USER_KEY.equals(name) && (TEST_USER + "||"+TEST_PWD).equals(value)) {
      // 有取得user
      request.setAttribute("user", value.toString().split("||")[0]);
      request.getRequestDispatcher("/user.view").forward(request, response);
      return;
     }
    }
   }
  }
  response.sendRedirect("login.html");
 }

 @Override
 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  processRequest(request, response);
 }

 @Override
 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  processRequest(request, response);
 }
}



3、登入成功顯示程式
新增程式 UserServlet.java:
程式
package com.test;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class UserServlet extends HttpServlet {
 private String AUTO_USER_KEY = "AUTO_USER_KEY";
 private String TEST_USER = "levin";
 private String TEST_PWD = "123456";

 protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  response.setContentType("text/html;charset=UTF-8");

  if (request.getAttribute("user") == null) {
   response.sendRedirect("login.view");
  } else {
   PrintWriter out = response.getWriter();
   out.println("");
   out.println("");
   out.println("Servlet User Login");
   out.println("");
   out.println("");
   out.println("

" + request.getAttribute("user") + "已登入

"); out.println("

回首頁

"); out.println(""); out.println(""); out.close(); } } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } }


4、設定web.xml :

LoginServlet mapping : /login.do
LoginCookieServlet  mapping : /login.view
UserServlet  mapping : /user.view

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>CookieServlet</display-name>


  <servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>com.test.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/login.do</url-pattern>
</servlet-mapping>

<servlet>
<servlet-name>UserServlet</servlet-name>
<servlet-class>com.test.UserServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UserServlet</servlet-name>
<url-pattern>/user.view</url-pattern>
</servlet-mapping>

<servlet>
<servlet-name>LoginCookieServlet</servlet-name>
<servlet-class>com.test.LoginCookieServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginCookieServlet</servlet-name>
<url-pattern>/login.view</url-pattern>
</servlet-mapping>

  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
</web-app>

5、使用到相關的lib
Java jdk 1.6
Apache Tomcat 6.0
圖1


6、測試:
http://localhost:8081/CookieServlet/index.html
圖1 首頁 -> 按下 登入頁


圖2 登入頁


圖3 進入登入 -> 輸入帳號及密碼 -> 送出(第一次先不勾選自動登入)


圖4 登入成功頁 -> 回首頁 -> 再依 圖1~ 圖3


圖5  進入登入 -> 輸入帳號及密碼 -> 送出 (選自動登入)

圖6 登入成功頁 -> 回首頁

圖7 直接 登入成功頁



設定有效Cookie時間,這行:

cookie.setMaxAge(7 * 24 * 60 * 60);

此為 設定7天有效。


結束,
感謝~


















其它文章

沒有留言:

張貼留言

標籤

Oracle (150) Oracle DB (144) Oracle_DB (143) Oracle SQL (135) JAVA (84) css-基本類 (65) MySQL (59) CSS Selector (58) jQuery (49) JavaScript-基本類 (39) Spring Boot (38) JavaScript (37) JavaScript HTML DOM (37) JavaScript-HTML_DOM (36) CSS3 (30) JAVA-基本類 (28) jQuery UI (27) Apache (23) Oracle GROUP BY (20) datepicker (20) Android (18) Oracle Date (17) c (17) JAVA-lang套件 (16) Linux (16) Oracle Sub Query (16) Spring-基本類 (16) jQuery-基本類 (16) MySQL-進階系列教學 (15) Android基本類 (14) Grails (14) Oracle join (14) SQLite (13) Spring (13) WIN7-基本類 (13) grails-基本類 (13) linux cent os (13) CKEditor (12) JAVA-流程控制類 (12) JAVA_Spring (12) PHP (11) Spring MVC (11) MySQL-基本系列教學 (10) Notepad (10) Notepad++ (10) SQLite for java (10) Windows (10) c/c++ (10) eclipse (9) jQuery-Selector (9) sqldeveloper (9) DB_Toad (8) JAVA_IDE_Eclipse (8) JavaScript-String類 (8) MySQL DB Toad (8) MySQL-DATE相關 (8) MySQL-函式相關 (8) Spring Bean (8) Android Studio (7) HTML5 (7) Hibernate (7) JAVA-OCWCD (7) JavaScript-陣列類 (7) Docker (6) JAVA-程式分享 (6) JAVA.util套件 (6) JavaScript-數學類 (6) MinGw (6) MySQL-其它類 (6) Servlet (6) centos (6) Apache_Tomcat (5) Apache套件_POI (5) CSS (5) JavaScript-Date物件 (5) JavaScript-其它類 (5) PostgreSQL (5) httpd (5) log4j (5) 基本資訊 (5) 開發工具 (5) CSS Properties (4) Dev-C++ (4) IntelliJ IDEA (4) Oracle DDL (4) Sublime (4) TortoiseSVN (4) apache_Maven (4) Android NDK (3) Eclipse IDE for C/C++ (3) Hibernate-基本類 (3) JAVA-問題 (3) JAVA-綀習分享 (3) JVM (3) Linux 指令 (3) Proxy Server (3) Spring Mobile (3) Spring web (3) Squid (3) VirtualBox (3) maven (3) zk (3) 生活其它 (3) Bootstrap (2) Filter (2) JAVA_IO (2) JAVA_其它_itext套件 (2) JBoss-問題 (2) JSP (2) Jboss (2) Listener (2) MySQL-語法快速查詢 (2) Spring AOP (2) Spring Batch (2) Spring Boot Actuator (2) Spring i18n (2) Subversive (2) Tomcat 8 (2) UML (2) WebJars (2) WinMerge (2) c++ (2) c語言綀習題 (2) jQuery Mobile (2) jQuery-事件處理 (2) jQuery-套件類 (2) putty (2) svn (2) weblogic (2) Apache_JMeter (1) Apache套件_BeanUtils (1) Apache套件_StringUtils (1) Base64 (1) Google API (1) HTML5-基本類 (1) Heap (1) JAVA 7 (1) JAVA SE 、JAVA EE、JAVA ME (1) JAVA 日期 (1) JAVA-OCJP (1) JAVA-WEB (1) JAVA_IDE (1) JAVA其它 (1) JBoss Server (1) JDK (1) JMX (1) JRE (1) Java RMI (1) Java String (1) Joda Time (1) Linux_其它 (1) MySQL教學 (1) Oracle_VirtualBox (1) SQL Server (1) SWT (1) Session (1) Stack (1) Struts 2 (1) Tool (1) ZK Studio (1) csv (1) grails-其它類 (1) jQuery-進階 (1) java mail (1) java web (1) java8 (1) jsoup (1) mockmvc (1) modules (1) tomcat (1) win10 (1) 其它類 (1) 圖片工具 (1) 模擬器 (1) 讀書分享 (1) 開發資訊 (1)

精選文章

初學 Java 的 HelloWorld 程式

撰寫一個JAVA程式 public class HelloWorld{ public static void main(String[ ] args){ System.out.println("我第一支Java程式!!"); } } ...