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"%>