登入與登出是很常用到的一個網頁功能,而在製作上原理其實不難,當使用者輸入帳號密碼後,傳至程式,檢查資料庫裡使用者表格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>
Pages: 1 2
您好:
小弟看了您這篇文章(http://blog.yslifes.com/archives/830/2),覺得獲益良多,想要下載範本檔來實作看看,但是發現範本檔已經無法下載,是否可以麻煩前輩提供範本檔呢?
版大你好
看了這篇文章我感觸良多
也想開始改寫看看
請問 如果我要 INSERT 一筆資料 要怎麼做??
是指sql語法新增嘛?
INSERT INTO `user` (`id`,`passwd`) VALUES
(‘pig’,’1234567′);
http://www.1keydata.com/tw/sql/sqlinsert.html
也可以參考
https://blog.yslifes.com/archives/971