使用javabean实现用户登录

本文简单讲述使用javabean实现用户登录,包括用户登录,注册和退出等。

1.关于javabean

JavaBean 是一种JAVA语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性,set和get方法获取。众所周知,属性名称符合这种模式,其他Java 类可以通过自省机制发现和操作这些JavaBean 的属性。

2.系统架构

2.1登录用例图

使用javabean实现用户登录_第1张图片

2.2页面流程图

使用javabean实现用户登录_第2张图片

2.3系统架构图

使用javabean实现用户登录_第3张图片

2.4数据库设计

本例使用oracle数据库

用户表包括id,用户名,密码,email,共4个字段

-- Create table
create table P_USER
(
  id       VARCHAR2(50) not null,
  username VARCHAR2(20),
  password VARCHAR2(20),
  email    VARCHAR2(50)
)
tablespace USERS
  pctfree 10
  initrans 1
  maxtrans 255
  storage
  (
    initial 64
    minextents 1
    maxextents unlimited
  );
-- Add comments to the table 
comment on table P_USER
  is '用户表';
-- Add comments to the columns 
comment on column P_USER.id
  is 'id';
comment on column P_USER.username
  is '用户名';
comment on column P_USER.password
  is '密码';
comment on column P_USER.email
  is 'email';


3.javabean编写

3.1开发数据库底层处理javabean

DBAcess.java

package com.baosight.bean;

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

/**数据库操作类
 * 

Title:DBAcess

*

Description:TODO

*

Company:

* @author yuan * @date 2016-5-22 下午12:40:24*/ public class DBAcess { private String driver = "oracle.jdbc.driver.OracleDriver"; private String url = "jdbc:oracle:" + "thin:@127.0.0.1:1521:orcl"; private String username = "scott"; private String password = "tiger"; private Connection conn; private Statement stm; private ResultSet rs; //创建连接 public boolean createConn() { boolean b = false; try { Class.forName(driver);// 加载Oracle驱动程序 conn = DriverManager.getConnection(url, username, password); b = true; } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }// 获取连接 catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } return b; } //修改 public boolean update(String sql){ boolean b = false; try { stm = conn.createStatement(); stm.execute(sql); b = true; } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return b; } //查询 public void query(String sql){ try { stm = conn.createStatement(); rs = stm.executeQuery(sql); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //判断有无数据 public boolean next(){ boolean b = false; try { if(rs.next()){ b = true; } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return b; } //获取表字段值 public String getValue(String field) { String value = null; try { if (rs != null) { value = rs.getString(field); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return value; } //关闭连接 public void closeConn() { try { if (conn != null) { conn.close(); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //关闭statement public void closeStm() { try { if (stm != null) { stm.close(); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //关闭ResultSet public void closeRs() { try { if (rs != null) { rs.close(); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } 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 getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public Statement getStm() { return stm; } public void setStm(Statement stm) { this.stm = stm; } public ResultSet getRs() { return rs; } public void setRs(ResultSet rs) { this.rs = rs; } public void setConn(Connection conn) { this.conn = conn; } public Connection getConn() { return conn; } }
上述数据库操作类使用JDBC连接数据库,并封装了连接数据库、查询、修改、关闭资源等方法。

3.2开发JavaBean业务逻辑组件

UserBean.java

package com.baosight.bean;

import com.baosight.util.GenerateUUID;

/**
 * 

Title:UserBean

*

Description:TODO

*

Company:

* @author yuan * @date 2016-5-22 下午1:05:00*/ public class UserBean { //登录验证 public boolean valid(String username,String password){ boolean isValid = false; DBAcess db = new DBAcess(); if(db.createConn()){ String sql = "select * from p_user where username='"+username+"' and password='"+password+"'"; db.query(sql); if(db.next()){ isValid = true; } db.closeRs(); db.closeStm(); db.closeConn(); } return isValid; } //注册验证 public boolean isExist(String username){ boolean isValid = false; DBAcess db = new DBAcess(); if(db.createConn()){ String sql = "select * from p_user where username='"+username+"'"; db.query(sql); if(db.next()){ isValid = true; } db.closeRs(); db.closeStm(); db.closeConn(); } return isValid; } //注册用户 public boolean add(String username,String password,String email){ boolean isValid = false; DBAcess db = new DBAcess(); if(db.createConn()){ String sql = "insert into p_user(id,username,password,email) values('"+GenerateUUID.next()+"','"+username+"','"+password+"','"+email+"')"; isValid = db.update(sql); db.closeStm(); db.closeConn(); } return isValid; } }
上述业务逻辑javabean,定义了登录验证、注册验证和新增用户等方法

3.3关于生成唯一ID

上面在新增用户时需要插入ID,本例使用UUID来生成唯一ID

GenerateUUID.java

package com.baosight.util;

import java.util.Date;

/**
 * 

Title:GenerateUUID

*

Description:TODO

*

Company:

* @author yuan * @date 2016-5-22 下午1:31:46*/ public class GenerateUUID { private static Date date = new Date(); // private static StringBuilder buf = new StringBuilder(); private static int seq = 0; private static final int ROTATION = 99999; public static synchronized long next(){ if (seq > ROTATION) seq = 0; // buf.delete(0, buf.length()); date.setTime(System.currentTimeMillis()); String str = String.format("%1$tY%1$tm%1$td%1$tk%1$tM%1$tS%2$05d", date, seq++); return Long.parseLong(str); } public static void main(String[] args) { for(int i=0;i<100;i++){ System.out.println(next()); } } }

4.页面编写

4.1登录页面

login.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>



  
    
    
    登录页面
    
	
	
	    
	
	
	
  
  
  
	
登录窗口
用户名:
密码:
注册
页面效果

使用javabean实现用户登录_第4张图片

4.2登录业务逻辑处理页面

login_action.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ page import="java.sql.*" %>  
<%@ page import="com.baosight.bean.*" %>  
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

  <% 
  String username = request.getParameter("username");
  String password = request.getParameter("password");
  if(username==null||"".equals(username.trim())||password==null||"".equals(password.trim())){
	  //out.write("用户名或密码不能为空!");
	  System.out.println("用户名或密码不能为空!");
	  response.sendRedirect("login.jsp");
	  return;
	  //request.getRequestDispatcher("login.jsp").forward(request, response);
  }
  UserBean userBean = new UserBean();
  boolean isValid = userBean.valid(username,password);
  if(isValid){
	  System.out.println("登录成功!");
	  session.setAttribute("username", username);
	  response.sendRedirect("welcome.jsp");
	  return;
  }else{
	  System.out.println("用户名或密码错误,登录失败!");
	  response.sendRedirect("login.jsp");
	  return;
  }
  %>
上面的JSP调用了Javabean进行业务处理

当用户名或密码为空时返回登录页面login.jsp

当登录成功后将用户信息保存到session,跳转到欢迎页面welcome.jsp

当登录失败时返回登录页面login.jsp

4.3登录成功欢迎页面

welcome.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>



  
    
    
    My JSP 'welcom.jsp' starting page
    
	
	
	    
	
	
	
  
  
  
	

Main
Menu1
Menu2
Menu3
Menu4
Menu5
Menu6
Menu7
Menu8
登录成功!
欢迎你, ${username }
页面效果

使用javabean实现用户登录_第5张图片

4.4退出登录业务处理页面

loginout.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>



  
    
    
    My JSP 'loginout.jsp' starting page
    
	
	
	    
	
	
	

  
  
  
   <%
   session.removeAttribute("username");
   response.sendRedirect("login.jsp");
   %>
  

从session中移除用户信息,跳转到登录页面login.jsp

4.5用户注册页面

register.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>



  
    
    
    注册页面
    
	
	
	    
	
	
	
  
  
  
	
注册窗口
用户名:
密码:
确认密码:
email:
返回
运行效果

使用javabean实现用户登录_第6张图片

4.6注册业务处理页面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>  
<%@ page import="com.baosight.bean.*" %>  
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>


  <% 
  String username = request.getParameter("username");
  String password1 = request.getParameter("password1");
  String password2 = request.getParameter("password2");
  String email = request.getParameter("email");
  if(username==null||"".equals(username.trim())||password1==null||"".equals(password1.trim())||password2==null||"".equals(password2.trim())||!password1.equals(password2)){
	  //out.write("用户名或密码不能为空!");
	  System.out.println("用户名或密码不能为空!");
	  response.sendRedirect("register.jsp");
	  return;
	  //request.getRequestDispatcher("login.jsp").forward(request, response);
  }
  UserBean userBean = new UserBean();
  boolean isExit = userBean.isExist(username);
  if(!isExit){
	  userBean.add(username, password1, email);
	  System.out.println("注册成功,请登录!");
	  response.sendRedirect("login.jsp");
	  return;
  }else{
	  System.out.println("用户名已存在!");
	  response.sendRedirect("register.jsp");
	  return;
  }
  %>

上面的JSP调用了Javabean进行业务处理

当用户名或密码为空时返回注册页面register.jsp

当注册用户名在数据库不存在时,新增用户

新增成功后跳转到登录页面login.jsp

当注册用户名在数据库存在时,返回注册页面register.jsp

5.总结

本例使用javabean对数据库操作和业务逻辑处理进行了封装。

以上即为使用javabean实现用户登录的简单介绍,还需要不断完善。







你可能感兴趣的:(jsp,javabean,servlet)