[jsp]常用範例-登入及檢查與登出

登入與登出是很常用到的一個網頁功能,而在製作上原理其實不難,當使用者輸入帳號密碼後,傳至程式,檢查資料庫裡使用者表格table是否存在此使用者,如果存在,則在Session裡存入使用者的個人資訊,而登出時只需要清除此Session記錄,檢查是否登入中,則是check Session是否存在。

此範例程式有幾個小功能:

  • 防止沒登入者使用需要登入的頁面
  • 登入檢查,誰是登入者
  • Servert載入時自動執行程式

登入畫面,預設的帳號是pig密碼是1234567

測試有沒有登入-沒登入狀況

測試有沒有登入-已登入狀況

登入成功checklogin

網頁無登入導出,如果有登入的話會以下圖

使用MySQL當成範例資料庫,資料表如下

-- MySQL Administrator dump 1.4
--
-- ------------------------------------------------------
-- Server version    5.0.45-community-nt


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;


--
-- Create schema test
--

CREATE DATABASE IF NOT EXISTS test;
USE test;

--
-- Definition of table `user`
--

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` varchar(20) NOT NULL,
  `passwd` varchar(45) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Dumping data for table `user`
--

/*!40000 ALTER TABLE `user` DISABLE KEYS */;
INSERT INTO `user` (`id`,`passwd`) VALUES 
 ('pig','1234567');
/*!40000 ALTER TABLE `user` ENABLE KEYS */;




/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;

DBInitServlet.java

這是一個取得Database Connection的Servlet,設定在啟動時自己auto load外部的設定檔,取得資料庫連線的DataSource

package db;

import java.io.IOException;
import javax.servlet.ServletException;
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;



/**
 * Servlet implementation class for Servlet: DBInitServlet
 *
 */
 public class DBInitServlet extends javax.servlet.http.HttpServlet
implements javax.servlet.Servlet {
   private static final long serialVersionUID = 1L;
    /* (non-Java-doc)
   * @see javax.servlet.http.HttpServlet#HttpServlet()
   */

 
  public DBInitServlet() {
    super();
  }    
  public void init() throws ServletException {

    super.init();
   
   
    try {
      //讀取properties檔
     
      java.io.InputStream is =
getClass().getResourceAsStream("/database.properties");
     
      java.util.Properties p = new java.util.Properties();
      p.load(is);
     
      //使用oracle內建的OracleDataSource
      com.mysql.jdbc.jdbc2.optional.MysqlDataSource ds =
new com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource ();
     
     
      //傳入參數
     
      ds.setServerName(p.getProperty("mysql.server"));
      ds.setPortNumber(Integer.parseInt(p.getProperty("mysql.port")));
      ds.setDatabaseName(p.getProperty("mysql.database"));
      ds.setUser(p.getProperty("mysql.user"));
      ds.setPassword(p.getProperty("mysql.password"));

      //把DataSource傳入static
      ConnectionPool.init(ds);
      is.close();
      } //catch (java.sql.SQLException e) {
 
    catch (IOException ie) {
      ie.printStackTrace();
      throw new ServletException("無法開啟DataSource!");
    }
}

   public void destroy() {

    super.destroy();

  }
}

程式需要在web.xml設定如下,在啟動Tomcat時就會跟著自動執行了

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    <display-name>
    LoginDemo</display-name>
    <servlet>
        <servlet-name>DBInitServlet</servlet-name>
        <servlet-class>
        db.DBInitServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

3 thoughts to “[jsp]常用範例-登入及檢查與登出”

  1. 版大你好
    看了這篇文章我感觸良多
    也想開始改寫看看
    請問 如果我要 INSERT 一筆資料 要怎麼做??

發表迴響