user 採用jsp+bean (在bean裏面訪問數據庫)
前臺爲註冊:
jsp爲register.jsp
在註冊的時候需要檢查數據有效性,通過一個javascript來實現。
function checkdata(){
var ssn=form.username.value.toLowerCase();
if(!checkUserName(ssn)) return false; //用戶名檢查
if(strlen(form.pwd.value)<6 || strlen(form.pwd.value)>16 ){
alert("\正確地登錄密碼長度爲6-16位,僅可用英文、數字、特殊字符!")
form.pwd.focus()
return false;
}
if( strlen2(form.pwd.value) ){
alert("\您的密碼中包含了非法字符,僅可用英文、數字、特殊字符!")
form.pwd.focus()
return false;
}
if( form.pwd.value == form.username.value){
alert("\用戶名和密碼不能相同!")
form.pwd.focus()
return false;
}
if( form.pwd2.value =="") {
alert("\請輸入密碼確認!")
form.pwd2.focus()
return false;
}
if( form.pwd2.value !=form.pwd.value ){
alert("\兩次密碼輸入不一致!")
form.pwd.focus()
return false;
}
//檢查性別
if(!(form.sex[0].checked || form.sex[1].checked) ){
alert("請選擇性別!");
form.sex[0].focus();
return false;
}
//檢查省份
if(form.province.selectedIndex == 0 ){
alert("請選擇省份!");
form.province.focus();
return false;
}
return true;
}
function checkUserName(ssn){
if( ssn.length<3 ||ssn.length>18 ){
alert("\請輸入正確的用戶名,用戶名長度爲3-18位!")
form.username.focus()
return false;
}
if (isWhiteWpace(ssn)){
alert("\請輸入正確的用戶名,用戶名中不能包含空格!")
form.username.focus()
return false;
}
if (!isSsnString(ssn)){
alert("\ 對不起,您選擇的用戶名不正確或已被佔用!用戶名\n由a~z的英文字母(不區分大小寫)、0~9的數字、點、減\n號或下劃線組成,長度爲3~18個字符,只能以數字或字母\n開頭和結尾,例如:kyzy_001。")
form.username.focus()
return false;
}
return true;
}
function strlen(str){
var len;
vari;
len = 0;
for(i=0;i<str.length;i++){
if (str.charCodeAt(i)>255)len+=2; else len++;
}
return len;
}
function strlen2(str){
var len;
vari;
len = 0;
for(i=0;i<str.length;i++){
if (str.charCodeAt(i)>255) return true;
}
return false;
}
function isWhiteWpace (s)
{
var whitespace = " \t\n\r";
vari;
for(i = 0; i < s.length; i++){
var c = s.charAt(i);
if(whitespace.indexOf(c) >= 0) {
return true;
}
}
return false;
}
function isSsnString (ssn)
{
var re=/^[0-9a-z][\w-.]*[0-9a-z]$/i;
if(re.test(ssn))
return true;
else
return false;
}
function checkssn(gotoURL){
var ssn=form.username.value.toLowerCase();
if(checkUserName(ssn)){
var open_url = gotoURL + "?username=" + ssn;
window.open(open_url,'','status=0,directories=0,resizable=0,toolbar=0,location=0,scrollbars=0,width=322,height=200');
}
}
bean就是普通的bean+ 數據庫訪問(save,update,delete等)
PreparedStatement 和Statement最大的區別就是在於PreparedStatement需要帶一個參數。
1.save()方法
publicvoid save() {
//使用了DB,就是那個數據庫輔助類。
Connection conn = DB.getConn();
String sql = "insert intouser values (null, ?, ?, ?, ?, ?)";
PreparedStatement pstmt = DB.prepare(conn, sql);
try {
pstmt.setString(1, username);
pstmt.setString(2, password);
pstmt.setString(3, phone);
pstmt.setString(4, addr);
//注意存儲時間的稍有不同,使用的是timestamp方法。在java.util.Time當中,存儲的是日期+時間,而在java.sql.Time當中只有日期,爲了解決這個問題,所以必須用timestamp。
pstmt.setTimestamp(5,new Timestamp(rdate.getTime()));
pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
DB.close(pstmt);
DB.close(conn);
}
}
publicvoid update() {
Connection conn = DB.getConn();
String sql = "update userset phone = ?, addr = ? where id = ?";
PreparedStatement pstmt = DB.prepare(conn, sql);
try {
pstmt.setString(1, phone);
pstmt.setString(2, addr);
pstmt.setInt(3, id);
pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
DB.close(pstmt);
DB.close(conn);
}
}
2.後臺管理員,可以通過用戶瀏覽來查看用戶(userlist.jsp)。
爲了得到user的列表,需要在bean裏面添加如下代碼,得到userlist。
getUsers()方法:
publicstatic List<User> getUsers() {
List<User> users = new ArrayList<User>();
Connection conn = DB.getConn();
String sql = "select *from user";
Statement stmt = DB.getStatement(conn);
ResultSet rs = DB.getResultSet(stmt, sql);
try {
while (rs.next()) {
User u = new User();
u.setId(rs.getInt("id"));
u.setUsername(rs.getString("username"));
u.setPassword(rs.getString("password"));
u.setPhone(rs.getString("phone"));
u.setAddr(rs.getString("addr"));
u.setRdate(rs.getTimestamp("rdate"));
users.add(u);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DB.close(rs);
DB.close(stmt);
DB.close(conn);
}
return users;
}
分頁顯示用戶列表的方法:
publicstaticint getUsers(List<User> users,int pageNo,int pageSize) {
int totalRecords = -1;
Connection conn = DB.getConn();
String sql = "select *from user limit " + (pageNo - 1) *pageSize
+ "," + pageSize;
Statement stmt = DB.getStatement(conn);
ResultSet rs = DB.getResultSet(stmt, sql);
Statement stmtCount = DB.getStatement(conn);
ResultSet rsCount = DB.getResultSet(stmtCount,
"selectcount(*) from user");
try {
rsCount.next();
totalRecords = rsCount.getInt(1);
while (rs.next()) {
User u = new User();
u.setId(rs.getInt("id"));
u.setUsername(rs.getString("username"));
u.setPassword(rs.getString("password"));
u.setPhone(rs.getString("phone"));
u.setAddr(rs.getString("addr"));
u.setRdate(rs.getTimestamp("rdate"));
users.add(u);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DB.close(rsCount);
DB.close(stmtCount);
DB.close(rs);
DB.close(stmt);
DB.close(conn);
}
return totalRecords;
}
Usermanager類:是user的管理類。是用來管理user的,user當中只存儲model,也就是和數據打交道的信息。而把getUsers,getUser之類的方法拉出來,放到usermanager當中。
後臺session檢查:
<%
String action =request.getParameter("action");
if(action !=null && action.equals("login")) {
String username = request.getParameter("username");
String password = request.getParameter("password");
if( !username.equals("admin") ||!password.equals("admin") ) {
out.println("username orpassword not correct!");
return;
}
session.setAttribute("admin" ,"admin");
response.sendRedirect("AdminIndex.jsp");
}
%>
也可以單獨拿一個文件:
_SessionCheck.jsp
<%
String admin =(String)session.getAttribute("admin");
if(admin ==null || !admin.trim().equals("admin")) {
response.sendRedirect("Login.jsp");
return;
}
%>
並把這個頁面include到任何一個後臺頁面。
<%@includefile="_SessionCheck.jsp"%>