單例:
public class Student{
//提供私有構造
private Student(){}
//類載入的時候就造了物件
private static Student s = new Student();
//提供公共訪問方式
public static Student getStudent(){
return s;
}
}
===============
部落格園:
什麼是儲存過程:儲存過程可以說是一個記錄集吧,它是由一些T-SQL語句組成的程式碼塊,
這些T-SQL語句程式碼像一個方法一樣實現一些功能(對單表或多表的增刪改查),然後再給這個程式碼塊取一個名字,在用到這個功能的時候呼叫他就行了。
儲存過程的好處:
1.由於資料庫執行動作時,是先編譯後執行的。然而儲存過程是一個編譯過的程式碼塊,所以執行效率要比T-SQL語句高。
2.一個儲存過程在程式在網路中互動時可以替代大堆的T-SQL語句,所以也能降低網路的通訊量,提高通訊速率。
3.通過儲存過程能夠使沒有許可權的使用者在控制之下間接地存取資料庫,從而確保資料的安全。
小結:總之儲存過程是好東西,在做專案時屬於必備利器,下面介紹儲存過程的基本語法。
=======================
利用Session完成使用者的登入和登出
使用者的登入和登出是最常見的Web應用案例,當一個應用的客戶登入了以後,其他所有的會話都得知道這個使用者已經登入還很有可能得提取使用者的暱稱予以顯示等等,所以,只有把登入成功的使用者的資訊放入到Session中才能夠辦到使所有的Servlet都能訪問到使用者的登入狀態,
-----------
第一是登入的介面,是HTML的一個表單,非常的簡單
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登陸介面</title>
</head>
<body>
<form action="/Web/servlet/LoginServlet" method="post">
帳號:<input type="text" name="username"><br>
密碼:<input type="password" name="password"><br>
<input type="submit" value="登入">
</form>
</body>
</html>
----------------
第二是處理登入資訊的LoginServlet
package com.bird.login;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoginServlet extends HttpServlet {
/**
* @category 使用Session處理使用者登陸
* @author Bird
*/
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String username = request.getParameter("username");
String password = request.getParameter("password");
List<User> list = Db.getAll();
for(User u: list){
if(u.getUsername().equals(username) && u.getPassword().equals(password)){
request.getSession().setAttribute("user", u);//登入成功,將使用者資料放入到Session中
response.sendRedirect("/Web/index.jsp");
return;//進行重定向,並且下面的程式碼不再執行
}
}
out.write("您的應戶名或密碼錯誤");
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request,response);
}
}
class Db{
public static List<User> list = new ArrayList<User>();
static{
list.add(new User("aaa","123"));
list.add(new User("bbb","123"));
list.add(new User("ccc","123"));
}
public static List<User> getAll(){
return list;
}
}
===========
第三,使用者的資訊封裝在User物件中
package com.bird.login;
/**
* @category 封裝使用者的資料的物件
* @author Bird
*
*/
public class User {
private String username;
private String password;
public User() {
}
public User(String username, String password) {
this.username = username;
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
==============================
第四是處理使用者登出的Servlet
package com.bird.login;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class LoginOutServlet extends HttpServlet {
/**
* @category 退出登入的Servlet,登出
* @author Bird
*/
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
HttpSession session = request.getSession(false);//防止建立Session
if(session == null){
response.sendRedirect("/Web/index.jsp");
return;
}
session.removeAttribute("user");
response.sendRedirect("/Web/index.jsp");
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
}
======================
第五是最終的顯示介面
%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'index.jsp' starting page</title>
</head>
<body>
歡迎您,${user.username} <br>
<a href="/Web/servlet/LoginOutServlet">退出登入</a>
</body>
</html>