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>


 

 

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我可以为您提供一个简单的用户管理系统JSP示例代码,包括用户登录、注册、信息展示和修改功能。 1. 用户登录页面(login.jsp) ```jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>用户登录</title> </head> <body> <h1>用户登录</h1> <form action="loginCheck.jsp" method="post"> 用户名:<input type="text" name="username"><br> 密码:<input type="password" name="password"><br> <input type="submit" value="登录"> </form> </body> </html> ``` 2. 登录验证页面(loginCheck.jsp) ```jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.sql.*"%> <% String username = request.getParameter("username"); String password = request.getParameter("password"); Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/userdb","root","123456"); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("select * from user where username='"+username+"' and password='"+password+"'"); if(rs.next()){ session.setAttribute("username", username); response.sendRedirect("userInfo.jsp"); } else { out.print("<script>alert('用户名或密码错误,请重新输入!');window.location.href='login.jsp';</script>"); } rs.close(); stmt.close(); conn.close(); %> ``` 3. 用户注册页面(register.jsp) ```jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>用户注册</title> </head> <body> <h1>用户注册</h1> <form action="registerCheck.jsp" method="post"> 用户名:<input type="text" name="username"><br> 密码:<input type="password" name="password"><br> 确认密码:<input type="password" name="confirm_password"><br> <input type="submit" value="注册"> </form> </body> </html> ``` 4. 注册验证页面(registerCheck.jsp) ```jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.sql.*"%> <% String username = request.getParameter("username"); String password = request.getParameter("password"); String confirm_password = request.getParameter("confirm_password"); if(!password.equals(confirm_password)){ out.print("<script>alert('两次密码输入不一致,请重新输入!');window.location.href='register.jsp';</script>"); } else { Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/userdb","root","123456"); PreparedStatement pstmt = conn.prepareStatement("insert into user(username,password) values(?,?)"); pstmt.setString(1, username); pstmt.setString(2, password); pstmt.executeUpdate(); pstmt.close(); conn.close(); out.print("<script>alert('注册成功,请登录!');window.location.href='login.jsp';</script>"); } %> ``` 5. 用户信息页面(userInfo.jsp) ```jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.sql.*"%> <% String username = (String)session.getAttribute("username"); Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/userdb","root","123456"); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("select * from user where username='"+username+"'"); if(rs.next()){ String password = rs.getString("password"); %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>用户信息</title> </head> <body> <h1>用户信息</h1> <form action="updateInfo.jsp" method="post"> 用户名:<input type="text" name="username" value="<%=username%>" readonly><br> 密码:<input type="password" name="password" value="<%=password%>"><br> <input type="submit" value="修改"> </form> </body> </html> <% } else { out.print("<script>alert('用户不存在,请重新登录!');window.location.href='login.jsp';</script>"); } rs.close(); stmt.close(); conn.close(); %> ``` 6. 修改用户信息页面(updateInfo.jsp) ```jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.sql.*"%> <% String username = request.getParameter("username"); String password = request.getParameter("password"); Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/userdb","root","123456"); PreparedStatement pstmt = conn.prepareStatement("update user set password=? where username=?"); pstmt.setString(1, password); pstmt.setString(2, username); pstmt.executeUpdate(); pstmt.close(); conn.close(); out.print("<script>alert('修改成功!');window.location.href='userInfo.jsp';</script>"); %> ``` 以上是一个简单的用户管理系统JSP示例代码,仅供参考。如果您需要更完整和复杂的用户管理系统,建议您参考一些成熟的开源项目或者自己进行详细的设计和开发。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值