本文简单讲述使用javabean实现用户登录,包括用户登录,注册和退出等。
JavaBean 是一种JAVA语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性,set和get方法获取。众所周知,属性名称符合这种模式,其他Java 类可以通过自省机制发现和操作这些JavaBean 的属性。
本例使用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';
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连接数据库,并封装了连接数据库、查询、修改、关闭资源等方法。
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,定义了登录验证、注册验证和新增用户等方法
上面在新增用户时需要插入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());
}
}
}
login.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
登录页面
页面效果
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
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
页面效果
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
register.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
注册页面
运行效果
<%@ 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
本例使用javabean对数据库操作和业务逻辑处理进行了封装。
以上即为使用javabean实现用户登录的简单介绍,还需要不断完善。