一 实体类
1 Worker
package com.lyq.bean;
import java.util.Date;
public class Worker {
private int wID; //应聘人员编号字段
private String wName; //应聘人员姓名字段
private String sex; //性别字段
private Date birth; //出生年月字段
private String wType; //工种字段
private String title; //职称字段
private int years; //工龄字段
private String major; //专业字段
private String education; //学历字段
//应聘人员编号字段的get方法
public int getwID() {
return wID;
}
//应聘人员编号字段的set方法
public void setwID(int wID) {
this.wID = wID;
}
//其余字段的get和set方法请自行补充
public String getwName() {
return wName;
}
public void setwName(String wName) {
this.wName = wName;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Date getBirth() {
return birth;
}
public void setBirth(Date birth) {
this.birth = birth;
}
public String getwType() {
return wType;
}
public void setwType(String wType) {
this.wType = wType;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public int getYears() {
return years;
}
public void setYears(int years) {
this.years = years;
}
public String getMajor() {
return major;
}
public void setMajor(String major) {
this.major = major;
}
public String getEducation() {
return education;
}
public void setEducation(String education) {
this.education = education;
}
}
2 Workuser类
package com.lyq.bean;
public class WorkUser {
private String wUser; //应聘人员账户名字段
private String wPassword; //应聘人员账户的密码字段
private int wID; //关联应聘人员编号字段
//应聘人员账户名字段的get方法
public String getwUser() {
return wUser;
}
//应聘人员账户名字段的set方法
public void setwUser(String wUser) {
this.wUser = wUser;
}
//其余字段的get和set方法请自行补充
//应聘人员账户密码字段的get方法
public String getwPassword() {
return wPassword;
}
//应聘人员账户密码字段的set方法
public void setwPassword(String wPassword) {
this.wPassword = wPassword;
}
//关联应聘人员编号字段的get方法
public int getwID() {
return wID;
}
//关联应聘人员编号字段的set方法
public void setwID(int wID) {
this.wID = wID;
}
}
二 工具类
package com.lyq.bean;
import java.security.MessageDigest;
public class MD5Util {
public static String md5Encode(String inStr) throws Exception{
MessageDigest md5 = null;
//MessageDigest对象接收任意大小的数据,并输出固定长度的哈希值
try {
md5 = MessageDigest.getInstance("MD5");
//对getInstance对象初始化,设定为MD5算法
} catch(Exception e) {
System.out.println(e.toString());
e.printStackTrace();
return ""; //失败时返回空字符串
}
byte[] byteArray = inStr.getBytes("UTF-8");
//将需要加密的字段转换为字节数组,指定UTF-8编码格式
byte[] md5Bytes = md5.digest(byteArray);
//使用填充式操作完成哈希计算
StringBuffer hexValue = new StringBuffer();
//定义一个StringBuffer来存储加密字符
for(int i = 0; i < md5Bytes.length; i++){
int val = ((int) md5Bytes[i]) & 0xff;
if(val < 16){
hexValue.append("0");
}
hexValue.append(Integer.toHexString(val));
//转换为十六进制存储到StringBuffer中
}
return hexValue.toString();
//返回经过MD5加密后的密文
}
}
三 DAO层
WorkerDAO
package com.lyq.bean;
import java.io.IOException;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class WorkerDAO {
/**
* 获取数据库连接
* @return
*/
//获取数据库连接,返回一个Connection对象的实例
public Connection getConnection(){
Connection connection = null; //声明Connection对象的实例
try {
Class.forName("org.gjt.mm.mysql.Driver");
//装载数据库驱动,若连接报错,可尝试将参数替换为"com.mysql.jdbc.Driver"
String url = "jdbc:mysql://localhost:3306/work?characterEncoding=UTF-8";
String username = "root";
String password = ""; //账号密码信息根据自己MySQL系统的设定填写
connection = DriverManager.getConnection(url, username, password);
//建立与数据库的连接
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return connection; //返回Connection对象实例
}
/**
* 查看所有应聘人员信息
* @return
* @throws IOException
*/
public List<Worker> findAllWorker() throws IOException{
List<Worker> list = new ArrayList<Worker>();
Connection connection = getConnection();
try {
CallableStatement cStatement = connection.prepareCall("{call findAllWorker()}");
ResultSet resultSet = cStatement.executeQuery();
while(resultSet.next()){
Worker worker = new Worker();
worker.setwID(resultSet.getInt("wID"));
worker.setwName(resultSet.getString("wName"));
worker.setSex(resultSet.getString("sex"));
worker.setBirth(resultSet.getDate("birth"));
worker.setwType(resultSet.getString("wType"));
worker.setTitle(resultSet.getString("title"));
worker.setYears(resultSet.getInt("years"));
worker.setMajor(resultSet.getString("major"));
worker.setEducation(resultSet.getString("education"));
list.add(worker);
}
connection.close();
cStatement.close();
resultSet.close();
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
/**
* 通过应聘人员编号查询该应聘人员是否存在
* @param wID
* @return
*/
public boolean isWorker(int wID){
Worker worker = findWorkerByID(wID);
if(worker == null){
return false;
} else {
return true;
}
}
/**
* 通过应聘人员编号查询应聘人员信息
* @param wID
* @return
*/
public Worker findWorkerByID(int wID){
List<Worker> list = new ArrayList<Worker>();
Connection connection = getConnection();
try {
CallableStatement cStatement = connection.prepareCall("{call findWorkerByID(?)}");
cStatement.setInt(1, wID);
ResultSet resultSet = cStatement.executeQuery();
while(resultSet.next()){
Worker worker = new Worker();
worker.setwID(resultSet.getInt("wID"));
worker.setwName(resultSet.getString("wName"));
worker.setSex(resultSet.getString("sex"));
worker.setBirth(resultSet.getDate("birth"));
worker.setwType(resultSet.getString("wType"));
worker.setTitle(resultSet.getString("title"));
worker.setYears(resultSet.getInt("years"));
worker.setMajor(resultSet.getString("major"));
worker.setEducation(resultSet.getString("education"));
list.add(worker);
}
connection.close();
cStatement.close();
resultSet.close();
} catch (Exception e) {
e.printStackTrace();
}
if(list == null || list.size() < 1){
return null;
} else {
return list.get(0);
}
}
/**
* 添加一条待业应聘人员记录
* @param worker
* @return
*/
//添加一条待就业应聘人员记录,返回一个boolean,根据返回值确实是否添加成功
public boolean insertWorker(Worker worker){
Connection connection = getConnection(); //获取数据库连接
boolean flag = false;
try {
String sql = "insert into worker(wName, sex, birth, wType, title, years,"
+ " major, education) value(?, ?, ?, ?, ?, ?, ?, ?)";
//这里不需要填写wID字段,因为该字段为自动编号,数据库系统将自动添加编号
PreparedStatement pStatement = connection.prepareStatement(sql);
pStatement.setString(1, worker.getwName());
//向PreparedStatement对象添加数据
pStatement.setString(2, worker.getSex());
java.util.Date date = worker.getBirth();
//由于sql有关的日期类为java.sql.Date类
//而本地获取的为java.util.Date类,因此需要转换
java.sql.Date sqlDate = new java.sql.Date(date.getTime());
pStatement.setDate(3, sqlDate);
pStatement.setString(4, worker.getwType());
pStatement.setString(5, worker.getTitle());
pStatement.setInt(6, worker.getYears());
pStatement.setString(7, worker.getMajor());
pStatement.setString(8, worker.getEducation());
int row = pStatement.executeUpdate(); //添加数据
if(row > 0){
//返回值为成功添加记录的条数,当返回值大于0时,表示添加成功
flag = true;
}
pStatement.close(); //关闭PreparedStatement对象实例
connection.close(); //关闭Connection对象实例
} catch (Exception e) {
e.printStackTrace();
}
return flag;
}
/**
* 通过姓名与出生年月查询应聘人员编号
* @param name
* @param birth
* @return
*/
//通过性别与出生年月查询应聘人员编号
public int findWorkerID(String name, Date birth){
List<Worker> list = new ArrayList<Worker>();
//用来存储查询记录
Connection connection = getConnection();
try {
CallableStatement cStatement = connection.prepareCall
("{call findWorkerByNameAndBirth(?, ?)}");
//调用存储过程,存储过程写法将在后文提到
cStatement.setString(1, name); //添加数据
java.sql.Date sqlDate = new java.sql.Date(birth.getTime());
cStatement.setDate(2, sqlDate);
ResultSet resultSet = cStatement.executeQuery();
while(resultSet.next()){
Worker worker = new Worker();
worker.setwID(resultSet.getInt("wID"));
worker.setwName(resultSet.getString("wName"));
worker.setSex(resultSet.getString("sex"));
worker.setBirth(resultSet.getDate("birth"));
worker.setwType(resultSet.getString("wType"));
worker.setTitle(resultSet.getString("title"));
worker.setYears(resultSet.getInt("years"));
worker.setMajor(resultSet.getString("major"));
worker.setEducation(resultSet.getString("education"));
list.add(worker); //从ResultSet对象中读取值
}
connection.close();
cStatement.close();
resultSet.close(); //释放资源
} catch (Exception e) {
e.printStackTrace();
}
if(list == null || list.size() < 1){
//判断是否查询成功
return 0;
} else {
//若查询成功,则将list中的第一个值的wID字段返回
return (list.get(0).getwID());
}
}
}
WorkUserDAO
package com.lyq.bean;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class WorkUserDAO {
/**
* 获取数据库连接
* @return
*/
//获取数据库连接
public Connection getConnection(){
Connection connection = null; //声明Connection对象的实例
try {
Class.forName("org.gjt.mm.mysql.Driver");
//装载数据库驱动,若连接报错,可尝试将参数替换为"com.mysql.jdbc.Driver"
String url = "jdbc:mysql://localhost:3306/work?characterEncoding=UTF-8";
String username = "root";
String password = ""; //账号密码信息根据自己MySQL系统的设定填写
connection = DriverManager.getConnection(url, username, password);
//建立与数据库的连接
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return connection; //返回Connection对象实例
}
/**
* 添加一条待业应聘人员账户记录
* @param worker
* @return
*/
//添加一条待业应聘人员账户记录
public boolean insertWorkUser(WorkUser workUser){
Connection connection = getConnection(); //获取数据库连接
boolean flag = false;
try {
String sql = "insert into workuser"
+ "(wuser, wpassword, wID) value(?, ?, ?)";
PreparedStatement pStatement = connection.prepareStatement(sql);
pStatement.setString(1, workUser.getwUser());
String password = MD5Util.md5Encode(workUser.getwPassword());
//对用户输入的密码字段信息进行MD5加密处理,workuser表的密码字段存储密文
pStatement.setString(2, password);
pStatement.setInt(3, workUser.getwID());
int row = pStatement.executeUpdate();
if(row > 0){
//判断是否添加成功,若row为0,则表示添加失败
flag = true;
}
} catch (Exception e) {
e.printStackTrace();
}
return flag;
}
/**
* 通过用户名查询应聘人员账号
* @param user
* @return
*/
//通过应聘人员账户名查询应聘人员账号
public WorkUser findWorkUserByID(String user){
List<WorkUser> list = new ArrayList<WorkUser>();
//用来暂存查询结果的数组
Connection connection = getConnection();
//获取数据库连接
try {
CallableStatement cStatement = connection.prepareCall
("{call findWorkUserByID(?)}");
//调用数据库存储过程findWorkUserByID,参数为应聘人员账户名字段
cStatement.setString(1, user); //添加参数
ResultSet resultSet = cStatement.executeQuery();
//执行查询语句
while(resultSet.next()){
WorkUser workUser = new WorkUser();
workUser.setwUser(resultSet.getString("wuser"));
workUser.setwPassword(resultSet.getString("wpassword"));
workUser.setwID(resultSet.getInt("wID"));
list.add(workUser);
//将查询结果存储到list中
}
connection.close(); //关闭数据库连接
cStatement.close();
resultSet.close();
} catch (Exception e) {
e.printStackTrace();
}
if(list == null || list.size() < 1){
//判断是否查询成功
return null;
} else {
//若查询成功则将结果从list中取出并返回
return list.get(0);
}
}
}
四 视图层
1 应聘人员注册页面
<%@ 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 language="javascript" type="text/javascript"
src="My97DatePicker/WdatePicker.js"></script>
<title>待就业人员注册</title>
</head>
<body>
<div style="background-image: url('images/backmm.jpg');">
<form action="addWorker.jsp" method="post">
<table align="center">
<tr>
<td align="center" colspan="2">
<h2>
<b>
待就业人员注册</b>
</h2>
<hr>
</td>
</tr>
<tr>
<td align="right">注册账号:</td>
<td><input type="text" name="wuser"></td>
</tr>
<tr>
<td align="right">密 码:</td>
<td><input type="password" name="wpassword"></td>
</tr>
<tr>
<td align="center" colspan="2"><hr></td>
</tr>
<tr>
<td align="right">姓 名:</td>
<td><input type="text" name="wName"></td>
</tr>
<tr>
<td align="right">性 别:</td>
<td><select name="sex" size="1">
<option value="男">男</option>
<option value="女">女</option>
</select></td>
</tr>
<tr>
<td align="right">出生年月:</td>
<td><input name="birth" class="Wdate"
onfocus="WdatePicker({dateFmt:'yyyy-MM-dd',readOnly:true})">
</td>
</tr>
<tr>
<td align="right">工作类别:</td>
<td><input type="text" name="wType"></td>
</tr>
<tr>
<td align="right">职 称:</td>
<td><input type="text" name="title"></td>
</tr>
<tr>
<td align="right">工作年限:</td>
<td><select name="years" size="1">
<%
for (int i = 0; i < 20; i++) {
%>
<option value="<%=i + 1%>"><%=i + 1%></option>
<%
}
%>
</select></td>
</tr>
<tr>
<td align="right">专 业:</td>
<td><input type="text" name="major"></td>
</tr>
<tr>
<td align="right">学 历:</td>
<td><select name="education" size="1">
<option value="初中及以下">初中及以下</option>
<option value="高中">高中</option>
<option value="专科">专科</option>
<option value="本科">本科</option>
<option value="硕士研究生">硕士研究生</option>
<option value="博士研究生">博士研究生</option>
</select></td>
</tr>
<tr>
<td>
</td>
</tr>
<tr>
<td align="center" colspan="2"><input type="submit"
value="注 册"></td>
</tr>
<tr>
<td align="right" colspan="2"><a href="index.jsp">返回主页</a></td>
</tr>
<tr>
<td>
</td>
</tr>
</table>
</form>
</div>
</body>
</html>
2 用户注册事件处理页
<%@page import="com.lyq.bean.WorkUserDAO"%>
<%@page import="com.lyq.bean.WorkUser"%>
<%@page import="java.text.SimpleDateFormat"%>
<%@page import="com.lyq.bean.Worker"%>
<%@page import="com.lyq.bean.WorkerDAO"%>
<%@ 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">
<title>添加待就业人员信息</title>
</head>
<body>
<%
request.setCharacterEncoding("utf-8");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Worker worker = new Worker(); //用于存储用户输入信息
worker.setwName(new String(request.getParameter("wName")));
//设计编码格式问题,将从newWorker.jsp页面中提取到的数据转码为gbk格式
worker.setSex(new String(request.getParameter("sex")));
worker.setBirth(sdf.parse(request.getParameter("birth")));
worker.setwType(new String(request.getParameter("wType")));
worker.setTitle(new String(request.getParameter("title")));
worker.setYears(Integer.parseInt(request.getParameter("years")));
worker.setMajor(new String(request.getParameter("major")));
worker.setEducation(new String(request.getParameter("education")));
if (worker.getwName().equals("") || worker.getwType().equals("")
|| worker.getTitle().equals("") || worker.getMajor().equals("")
|| worker.getEducation().equals("")) {
//判断是否存在空字段,若存在空字段则提示错误
%>
所有个人信息不能放空!
<a href="newWorker.jsp">重新填写注册信息</a>
<%
} else {
boolean flag = new WorkerDAO().insertWorker(worker);
//首先写入职工个人信息表,成功后再写入职工账户表
if (flag) {
WorkUser workUser = new WorkUser();
workUser.setwUser(new String(request.getParameter("wuser")));
workUser.setwPassword(new String(request.getParameter("wpassword")));
workUser.setwID(new WorkerDAO().findWorkerID(worker.getwName(), worker.getBirth()));
//从职工表中查询得到其职工编号
boolean userFlag = new WorkUserDAO().insertWorkUser(workUser);
//写入职工账户表
if (flag) {
out.print("职工注册成功!您的职工编号为:" + workUser.getwID());
} else {
out.print("职工注册失败!");
}
} else {
out.print("添加数据失败!");
}
%>
<a href="index.jsp">返回主页</a>
<%
}
%>
</body>
</html>
五 运行