Jsp+JavaBean模式的登陆注册系统

        在上一个纯JSP模式的登陆注册系统当中,我们通过inc.jsp来保存数据库配置参数,在每一次需要调用数据库时都包含此文件,创建自己的数据库连接,然后执行不同的命令,返回相应的结果集或其他返回值,在每一次关于数据库操作的过程中我们都书写了重复的代码,进行了相似的操作,我们完全可以把这些代码抽象到JavaBean当中,在使用JSp来调用JavaBean,将会使代码的可读性增强,降低代码的重复,并且会提高系统的重用性。

      首先书写JavaBean,对于一个普通的JavaBean来说,定义变量并添加getter/setter函数,也就是一个完整的JavaBean了。但是通常不仅仅包含这些,还要根据当前JavaBean的目的来添加独特的操作函数。本节课开发的DBAccess.java就是一个又各有自身目的的JavaBean,它的目的就是作为数据库操作的Javabean,不仅能够保存数据库的参数和变量,还能够进行数据库的操作。

    这个模式的改变主要开发了两个JavaBean,一个是数据库处理类DBAccess.java  ,另一个是业务逻辑类UserBean.java      

比如,要进行数据库的操作,我们首先要创建数据库的链接,还有类似的更新SQL函数,查询SQl函数,本问题只是需要这两个就足够了。

重点修改了四个文件,

DBAccess.java

这个javaBean里面完成了所有有关数据库的操作,在UserBean.java当中的方法依次调用这里面的方法操作数据库,而那两个JSp页面依次调用UserBean的方法操作。

这样实现了对数据库操作的封装,实现了代码重用,尽量降低了jsp页面当中java代码的量以及完全消除了数据的操作,所有的st conn rs  都在DBAccess里面完成,这与老韩的还是有些不同,老韩的servlet控制器里面还是有相应的st rs conn已经关闭函数的。思路不同吧

工程训练那个项目也是采用的老韩的操作方式。

确实那些st rs conn 还有关闭函数,增删改查  try catch 都是应该在javaBean里面完成的,那样更好些

package com.gxm.jspandbean;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class DBAccess {
	String driver = "com.mysql.jdbc.Driver";
	String url    = "jdbc:mysql://localhost:3306/login";
	String user   = "root";
	String password = "admin";
	Connection conn = null;
	Statement  st   = null;
	ResultSet  rs   = null;
	
	public String getDriver() {
		return driver;
	}
	public void setDriver(String driver) {
		this.driver = driver;
	}
	public String getUrl() {
		return url;
	}
	public void setUrl(String url) {
		this.url = url;
	}
	public String getUser() {
		return user;
	}
	public void setUser(String user) {
		this.user = user;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public Connection getConn() {
		return conn;
	}
	public void setConn(Connection conn) {
		this.conn = conn;
	}
	public Statement getSt() {
		return st;
	}
	public void setSt(Statement st) {
		this.st = st;
	}
	public ResultSet getRs() {
		return rs;
	}
	public void setRs(ResultSet rs) {
		this.rs = rs;
	}
	
	/*
	 * @完成数据库的链接
	 * @return boolean
	 */
	public boolean creatConn(){
		boolean flag = false;
		try{
			Class.forName(driver);
			conn = DriverManager.getConnection(url,user,password);
			//也是,只有上一步正确执行之后,程序才能进入下一步
			flag = true;
		}catch(Exception e){
			e.printStackTrace();
		}
		return flag;
	}
	
	/*
	 * @更新数据库函数
	 * @return boolean
	 */
	public boolean update(String sql){
		boolean flag = false;
		try{
			st = conn.createStatement();
			
			int res = st.executeUpdate(sql);
			if(0!=res){
				flag = true;
			}
		}catch(Exception e){
			e.printStackTrace();
		}
		return  flag;
	}
	
	
	/*
	 * @完成数据库查询工作
	 * @return boolean
	 */
	
	public boolean query(String sql){
		boolean flag = false;
		try{
			st = conn.createStatement();
			
			rs = st.executeQuery(sql);
			
			flag = true;
		}catch(Exception e){
			e.printStackTrace();
		}
		return  flag;
	}
	
	/*
	 * @结果集操作的next方法
	 * @return boolean
	 */
	
	public boolean next(){
		boolean flag = false;
		try{
			if(rs.next()) flag = true;
		}catch(Exception e){
			e.printStackTrace();
		}
		return flag;
	}
	
	/*
	 * @当移动到目标行时,要取出某一列的值
	 * @param field 是字段
	 * @return String
	 */
	
	public String getValue(String field){
		String value = null;
		try{
			if(rs!=null){
				value = rs.getString(field);
			}
		}catch(Exception e){
			e.printStackTrace();
		}
		return value;
	}
	
	public void close() {
		try{
			if(rs!=null){
				rs.close();
				rs = null;
			}
			
			if(st!=null){
				st.close();
				st = null;
			}
			
			if(conn!=null){
				conn.close();
				conn = null;
			}
		}catch(Exception e){
			e.printStackTrace();
		}
		
	}
	
}


 

UserBean.java

 

package com.gxm.jspandbean;
//这样的话就真正的将数据库操作的步骤都交给一个文件了
//老韩那个还不是,他还是要每次都获取st rs 并且还要使用,还不是很好
public class UserBean {
	/*
	 * 
	 * @param username
	 * @param password
	 */
	
	public boolean isvalid(String username,String password){
		boolean flag = false;
		DBAccess db = new DBAccess();
		if(db.creatConn()){
			String sql = "select * from users where username ='"+username+"' and password = '"+password+"' ";
			
			db.query(sql);
			
			if(db.next()){
				flag = true;
			}
			db.close();
		}
		return flag;
	}
	
	/*
	 * @注册验证函数  检查用户名是否存在
	 */
	
	public boolean isExist(String username){
		boolean flag = false;
		DBAccess db = new DBAccess();
		if(db.creatConn()){
			String sql = "select * from users where username = '"+username+"'";
			db.query(sql);
			if(db.next()){
				System.out.println("查重是否有问题");
				flag = true;
			}
			db.close();
		}
		
		return flag;
	}
	
	/*
	 * @增加一个用户
	 */
	
	public boolean add(String username,String password){
		boolean flag = false;
		DBAccess db = new DBAccess();
		//每一次都要重新建立连接的
		if(db.creatConn()){
			String sql = "insert into users(username,password) values('"+username+"','"+password+"')";
			
			if(db.update(sql)){
				flag = true;
			}
			db.close();
		}
		
		return flag;
	}
}


registerCheck.jsp

<%@ page language="java" import="java.util.*,java.sql.*,com.gxm.jspandbean.*;" pageEncoding="utf-8"%>
<%
		String path = request.getContextPath();
		String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
		String email = request.getParameter("email");
		String username = request.getParameter("username");
		String password1 = request.getParameter("password1");
		String password2 = request.getParameter("password2");
		
		if(username == null||password1 == null|| password2 == null||!password1.equals(password2)){
			response.sendRedirect("register.jsp");
		}
		
		boolean flag = false;
		
		UserBean ub = new UserBean();
		if(ub.isExist(username)){
			//当然我们也是可以加上提示信息的
			response.sendRedirect("register.jsp");
			
		}else if(ub.add(username,password1)){
			flag = true;
			response.sendRedirect("login.jsp");
		}
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'registerCheck.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
    This is my JSP page. <br>
  </body>
</html>


 

loginCheck.jsp

<%@ page language="java" import="java.util.*,java.sql.*,com.gxm.jspandbean.*;" pageEncoding="utf-8"%>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
	String username = request.getParameter("username");
	String password = request.getParameter("password");
	//这就是在服务器端完成的,javascript也是可以完成这个功能的,不过就是在客户端完成的了,减轻了服务器的压力
	if(username == null||password ==null){
		response.sendRedirect("login.jsp");
	}
	boolean flag = false;
	
	UserBean ub = new UserBean();
	if(ub.isvalid(username,password)){
		flag = true;
	}
	
	if(flag){
		response.sendRedirect("welcome.jsp?user="+username);
	}else{
		response.sendRedirect("login.jsp?info=error");
	}
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'loginCheck.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
  
  </body>
</html>


 

 

 

你可能感兴趣的:(jsp)