本博客已经转移到:www.itwps.com 此博客后续不会再更新,详情请关注一下www.itwps.com,谢谢。
首先在使用PL/sql在Oracle数据库中创建BOOK_USER表格和Sequences序列——注:如果没有用到nextval可以不用创建序列


JavaEE列表

下面是jsp页面
登陆-login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="css/login/style.css" />
<link rel="stylesheet" type="text/css" href="css/login/body.css" />
<link rel="stylesheet" type="text/css" href="css/login/login.css" />
<script src="js/jquery-1.11.1.min.js"></script>
<title>图书馆</title>
</head>
<body>
<div class="container">
<section id="content">
<form id="loginForm" method="post" >
<h1>用户登录</h1>
<div>
<input type="text" name="username" placeholder="用户名" required="" id="username" />
</div>
<div>
<input type="password" name="password" placeholder="密码" required="" id="password" />
</div>
<div class="login_error_tips" >
<span class="help-block u-errormessage" id="js-server-helpinfo"> </span>
</div>
<div>
<!-- <input type="button" value="Log in" /> -->
<input type="button" value="登录" class="btn btn-primary"
id="js-btn-login" /> <a href="register.jsp">加入我们</a><a href="changepwd.jsp">忘记密码</a>
<!-- <a href="#">Register</a> -->
</div>
</form>
<div class="button">
<a href="http://sykainuo.3vfree.com">版权所有 @ZTN</a>
</div>
</section>
</div>
<script>
$(function(){
$("#js-btn-login").click(function(){
//1.验证用户名密码是否合法
var user = $("#username").val();
var pwd =$("#password").val();
if (user.length==0 || pwd.length==0) {
alert("用户名或密码不能为空!");
}else{
//2.将用户名和密码传递给后台
$.ajax({
type:"post",
url:"LoginServlet",
data:$("#loginForm").serialize(),
dataType:"json",
success:function(data){
if(data == 0){
//登录失败,用户名或密码不正确
alert("用户名或密码不正确!");
}else{
//登录成功
location.href="index.html"; //页面跳转
}
}
});
}
});
});
</script>
</body>
</html>
注册-register.jsp
<%@page import="com.book.util.DbOperation"%>
<%@ page language="java" import="java.util.*,java.sql.*" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<link rel="stylesheet" type="text/css" href="css/register/register.css" />
<script type="text/javascript" src="js/jquery-1.11.1.min.js"></script>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>注册页面</title>
</head>
<style>
body{background: url("images/register/book.jpg");background-size:cover}
</style>
<body>
<form method="psot" id="form1" name="regform">
<h1>用户注册</h1>
<table align="center">
<tr>
<td>账 户:</td>
<td>
<input type="text" name="username" placeholder="4-20位纯英文" required="" id="username" />
<span style="color:red;" id="msg_user"></span>
</td>
</tr>
<tr>
<td>密 码:</td>
<td>
<input type="password" name="password" placeholder="8-16位" required="" id="password" />
<span style="color:red;" id="msg_pwd"></span>
</td>
</tr>
<tr>
<td>确认密码:</td>
<td>
<input type="password" name="repwd" placeholder="输入上面的密码" required="" id="repwd" onkeyup="validate()">
<span style="color:red;" id="msg_repwd"></span>
</td>
</tr>
<tr>
<td>电子邮箱:</td>
<td>
<input type="text" name="email" placeholder="格式:登录名@主机名.域名" required="" id="email">
<span style="color:red;" id="msg_email"></span>
</td>
</tr>
<tr>
<td colspan="1"></td>
<td>
<input type="button" id="b_register" value="注 册" >
<input type="reset" value="重 置">
<a href="login.jsp">已有账号?点此直接登录</a>
</td>
</tr>
</table>
</form>
<%--!JQuery开始 --%>
<script type="text/javascript">
<%--!验证用户名 --%>
$("#username").blur(function(){
var user = $("#username").val();
var yz = /^[a-zA-Z]{4,20}$/;
if(!yz.exec(user)){
$("#msg_user").html("用户名格式不正确!");
}else{
$("#msg_user").html("");
}
});
<%-- !密码验证--%>
$("#password").blur(function(){
var pwd = $("#password").val();
var yz =/^\w{8,16}$/;
if(!yz.exec(pwd)){
$("#msg_pwd").html("密码格式不正确!");
}else{
$("#msg_pwd").html("");
}
});
<%-- !二次密码验证--%>
$("#repwd").blur(function(){
var repwd = $("#repwd").val();
var pwd = $("#password").val();
if(repwd!=pwd){
// $("#msg_repwd").html("两次密码不一致!");
}else{
$("#msg_repwd").html("");
}
});
<%-- !电子邮箱验证--%>
$("#email").blur(function(){
var email = $("#email").val();
var yz =/^\w+@\w+.[a-zA-Z]{2,3}$/;
if(!yz.exec(email)){
$("#msg_email").html("邮箱格式不正确!");
}else{
$("#msg_email").html("");
}
});
</script>
<script type="text/javascript">
$(function(){
$("#b_register").click(function(){
//判断用户名和密码是否为空
var user = $("#username").val();
var pwd = $("#password").val();
if(user.length==0 || pwd.length==0){
alert("用户名或密码不能为空!");
}else{
//将数据传给后台数据库
$.ajax({
type:"post",
url:"RegisterServlet",
data:$("#form1").serialize(),
dataType:"json",
success:function(data){
if (data == 0) {
alert("注册失败!用户名已存在!");
}else if(data == 1){
//注册成功
location.href="reg-success.jsp"; //注册成功页面跳转
} else{
//注册失败
alert("注册失败!");
}
}
});
}
});
});
//使按钮失效
function validate(){
var pw1=password=document.regform.password.value;
var pw2=password=document.regform.repwd.value;
if(pw1==pw2){
document.getElementById("msg_repwd").innerHTML="<font color='green'>两次密码相同</font>";
document.getElementById("b_register").disabled=false;
}else{
document.getElementById("msg_repwd").innerHTML="<font color='red'>密码不一致</font>";
document.getElementById("b_register").disabled=true;
}
}
</script>
</body>
</html>
修改密码-changepwd.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript" src="js/jquery-1.11.1.min.js"></script>
<title>忘记密码</title>
</head>
<style>
body{background: url("images/register/changepwd.jpg");background-size: cover }
</style>
<body>
<h1 style="color:white; font-weight: bold;" align="center" >找回密码</h1>
<form method="post" id="form2">
<table align="center">
<tr align="center">
<td>
<span style="color:white; font-weight: bold;">注册用户名:</span>
<input type="text" id="username" name="username">
<span style="color:white; font-weight: bold;">注册电子邮箱:</span>
<input type="text" id="email" name="email">
<input type="button" value="查看密码" id="change-btn">
<a href="login.jsp" style="text-decoration: none;font-weight: bold;">返回登陆</a>
</td>
</tr>
</table>
</form>
<script type="text/javascript">
$(function(){
$("#change-btn").click(function(){
$.ajax({
type:"post",
url:"BackpwdServlet",
data:$("#form2").serialize(),
dataType:"json",
success:function(data){
if (data.rs == 0) {
alert("用户名或电子邮箱不匹配!");
}else if(data.rs == 1){
alert("用户名:"+data.uname + "你的密码是:"+data.upwd);
}
},
error:function(){
alert("数据错误");
}
});
});
});
</script>
</body>
</html>
注:jsp界面里的css样式就不放了,主要是实现功能
下面是Servlet等代码
首先创建User.java
package com.book.vo;
public class User {
private int id;
private String name;
private String pwd;
private String email;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
创建DbOperation.java公共类
package com.book.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.book.vo.User;
public class DbOperation {
private final static String URL="jdbc:oracle:thin:@127.0.0.1:1521:orcl";
private final static String UNAME="ztn";
private final static String PWD ="ztn";
protected static Connection conn = null;
protected static PreparedStatement ps =null;
protected static ResultSet rs =null;
//获取链接
public static Connection getConn(){
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection(URL,UNAME,PWD);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
//关闭资源
public static void closeAll(){
if (conn!=null) {
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (ps!=null) {
try {
ps.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//查询
public static void extQuery(String sql,Object...obj){
try {
getConn();
ps=conn.prepareStatement(sql);
for (int i = 0; i < obj.length; i++) {
ps.setObject(i+1, obj[i]);
}
rs=ps.executeQuery();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//更新操作
public static boolean extUpdate(String sql,Object[] arr){
Connection conn=null;
PreparedStatement ps = null;
try {
conn=DbOperation.getConn();//连接数据库
ps=conn.prepareStatement(sql); // 编译
//设置
if (arr!=null && arr.length!=0) {
for (int i = 0; i < arr.length; i++) {
ps.setObject(i+1, arr[i]);
}
}
int count=ps.executeUpdate();//执行sql语句
if (count>0) {
return true;
}else{
return false;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}
}
创建UserDao.java接口类
package com.book.dao;
import java.util.List;
import com.book.vo.User;
public interface UserDao {
//用户登录方法声明
public User login(User user);
//用户注册方法声明
public boolean register(User user);
//忘记密码
public User changepwd(String name, String email);
//查看用户名是否在数据库中已存在
public boolean backpwd(String name);
}
创建UserDaoImpl.java实现UserDao.java
package com.book.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.book.util.DbOperation;
import com.book.vo.User;
public class UserDaoImpl extends DbOperation implements UserDao {
@Override
public User login(User user) {
// TODO Auto-generated method stub
Connection conn=null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
conn=DbOperation.getConn(); //获取数据库连接
//sql语句
String sql="select * from book_user where name=? and pwd=?";
ps=conn.prepareStatement(sql);
//设置
ps.setString(1, user.getName());
ps.setString(2, user.getPwd());
//执行sql
rs=ps.executeQuery();
User users=null;
if (rs.next()) {
users = new User();
//从数据库获取
users.setName(rs.getString("name"));
users.setPwd(rs.getString("pwd"));
return user;
}else{
return null;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
//关闭所有资源
DbOperation.closeAll();
}
return null;
}
@Override //注册
public boolean register(User user) {
// TODO Auto-generated method stub
String sql="insert into book_user values(SEQ_USER.nextval,?,?,?)";
List<Object> list = new ArrayList<Object>();
list.add(user.getName());
list.add(user.getPwd());
list.add(user.getEmail());
boolean flag = DbOperation.extUpdate(sql, list.toArray());
if (flag) {
return true;
}else{
return false;
}
}
@Override
//忘记密码
public User changepwd(String name,String email) {
// TODO Auto-generated method stub
User users=null;
try {
//sql语句
String sql="select * from book_user where name=? and email=?";
extQuery(sql, name,email);
//执行sql
if (rs.next()) {
users = new User();
//从数据库获取
users.setName(rs.getString("name"));
users.setEmail(rs.getString("email"));
users.setPwd(rs.getString("pwd"));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
//关闭所有资源
DbOperation.closeAll();
}
return users;
}
//查询用户名是否存在
@Override
public boolean backpwd(String name) {
// TODO Auto-generated method stub
String sql = "select * from book_user where name=?";
extQuery(sql, name);
boolean flag = true;
try {
if(rs.next()){
flag = true;
} else{
flag = false;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return flag;
}
}
创建LoginServlet.java-登陆
package com.book.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.book.dao.UserDao;
import com.book.dao.UserDaoImpl;
import com.book.vo.User;
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
this.doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//doGet(request, response);
PrintWriter out = response.getWriter();
User user = new User();
//获取login.jsp提交的账号和密码
String name = request.getParameter("username");
String pwd =request.getParameter("password");
//测试数据
System.out.println(name+" "+pwd);
//获取login.jsp提交的账号和密码设置到实体类User中
user.setName(name);
user.setPwd(pwd);
//引入数据交互层
UserDao dao = new UserDaoImpl();
User us = dao.login(user);
//测试返回值
System.out.println(us);
if (us!=null) {
out.println(1);
//登陆成功!
}else{
out.println(0);
//登陆失败!
}
}
}
创建RegisterServlet.java-注册
package com.book.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.swing.JOptionPane;
import com.book.dao.UserDao;
import com.book.dao.UserDaoImpl;
import com.book.vo.User;
@WebServlet("/RegisterServlet")
public class RegisterServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
this.doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
// doGet(request, response);
PrintWriter out = response.getWriter();
User user = new User();
//获取注册的信息
String name = request.getParameter("username");
String pwd =request.getParameter("password");
String email= request.getParameter("email");
//将注册的信息设置到实体类User中
user.setName(name);
user.setPwd(pwd);
user.setEmail(email);
//引入数据交互层
UserDao ud = new UserDaoImpl();
boolean flag = ud.backpwd(name);
if(flag){
//用户名已存在
out.println(0);
}else{
//用户名不存在,创建用户
boolean falg=ud.register(user);
if (falg) {
//注册成功
out.println(1);
}else{
//注册失败
out.println(-1);
}
}
}
}
创建BackpwdServlet.java-找回密码
package com.book.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.json.simple.JSONObject;
import com.book.dao.UserDao;
import com.book.dao.UserDaoImpl;
import com.book.vo.User;
@WebServlet("/BackpwdServlet")
public class BackpwdServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
this.doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//doGet(request, response);
PrintWriter out =response.getWriter();
//获取找回页面输入的信息
String name = request.getParameter("username");
String email= request.getParameter("email");
//引入交互
UserDao dao = new UserDaoImpl();
User us =dao.changepwd(name,email);
JSONObject msg = new JSONObject();
msg.put("uname", name);
msg.put("upwd",us.getPwd());
if (us!=null) {
msg.put("rs", 1);
out.println(msg);
//相匹配
}else{
msg.put("rs",0);
out.println(msg);
}
}
}
注:lib文件夹里别忘了架包