1 servlet项目
1.1 项目需求
通过servlet实现老师登录+学生的增删改查
1.2 数据库设计
USE db_1;
DROP TABLE student;
CREATE TABLE student(
sid INT PRIMARY KEY AUTO_INCREMENT,
sname VARCHAR(100) UNIQUE,
sex CHAR(1),
score FLOAT(4,1),
sbirth DATE,
sdy BOOL
);
INSERT INTO student VALUES(
NULL,
SUBSTRING(REPLACE(UUID(),"-",""),1,10),
IF(RAND()>0.5,"男","女"),
TRUNCATE(RAND()*100,1),
CONCAT(TRUNCATE(RAND()*10+1990,0),"/",TRUNCATE(RAND()*12+1,0),"/",TRUNCATE(RAND()*30+1,0)),
RAND()>0.5
);
SELECT * FROM student;
DROP TABLE teacher;
CREATE TABLE teacher(
tid INT PRIMARY KEY AUTO_INCREMENT,
tname VARCHAR(100) UNIQUE,
tpwd VARCHAR(100) DEFAULT "123456"
);
INSERT INTO teacher VALUES(10011,"张无忌","123456");
INSERT INTO teacher VALUES(10012,"张三丰","123456");
INSERT INTO teacher VALUES(10013,"张翠山","123456");
INSERT INTO teacher VALUES(10014,"张柏芝","123456");
1.3 创建项目 分包 导入jar
-
创建web项目
-
选择项目的编码集为utf-8
-
引入tomcat
-
导入jdbc驱动
-
分包
1.4 创建实体类
public class Teacher implements Serializable{
private Integer tid;
private String tname;
private String tpwd;
...
}
public class Student implements Serializable {
// sid INT PRIMARY KEY AUTO_INCREMENT,
// sname VARCHAR(100) UNIQUE,
// sex CHAR(1),
// score FLOAT(4,1),
// sbirth DATE,
// sdy BOOL
private Integer sid;
private String sname;
private String sex;
private Float score;
private Date sbirth;
private Boolean sdy;
...
}
1.5 工具类
package com.zhiyou100.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class JdbcUtil {
private static String driverName,user,pwd,url;
static{
driverName="com.mysql.jdbc.Driver";
user="root";
pwd="root";
url="jdbc:mysql://localhost:3306/db_1?characterEncoding=utf8";
}
//注册驱动
static{
try {
Class.forName(driverName);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
//获取连接
public static Connection getCon(){
try {
return DriverManager.getConnection(url, user, pwd);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
//关闭连接释放资源
public static void close(Connection con,Statement sta,ResultSet set){
try {
if(set!=null) set.close();
if(sta!=null) sta.close();
if(con!=null) con.close();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
package com.zhiyou100.util;
import java.sql.DriverManager;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateStrUtil {
private static String pattern="yyyy年MM月dd日";
private static SimpleDateFormat sdf=new SimpleDateFormat(pattern);
public static String date2Str(Date date){
return sdf.format(date);
}
public static Date str2Date(String str){
try {
return sdf.parse(str);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
1.6 dao
package com.zhiyou100.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import com.zhiyou100.entity.Student;
import com.zhiyou100.util.JdbcUtil;
public class StudentDao {
// 获取一个
public Student getOneByTid(int sid) {
Connection con = JdbcUtil.getCon();
PreparedStatement pre = null;
ResultSet set = null;
Student stu = null;
try {
pre = con.prepareStatement("select * from student where sid=?");
pre.setInt(1, sid);
set = pre.executeQuery();
if (set.next()) {
stu = new Student(set.getInt("sid"), set.getString("sname"), set.getString("sex"),
set.getFloat("score"), set.getDate("sbirth"), set.getBoolean("sdy"));
}
} catch (Exception e) {
throw new RuntimeException(e);
}
JdbcUtil.close(con, pre, set);
return stu;
}
// 删除一个
public int deleteOne(int sid) {
Connection con = JdbcUtil.getCon();
PreparedStatement pre = null;
int hang = 0;
try {
pre = con.prepareStatement("delete from student where sid=?");
pre.setInt(1, sid);
hang = pre.executeUpdate();
} catch (Exception e) {
throw new RuntimeException(e);
}
JdbcUtil.close(con, pre, null);
return hang;
}
// 添加一个
public int addOne(Student stu) {
Connection con = JdbcUtil.getCon();
PreparedStatement pre = null;
int hang = 0;
try {
pre = con.prepareStatement("insert into student(sname,sex,score,sbirth,sdy) values(?,?,?,?,?)");
pre.setString(1, stu.getSname());
pre.setString(2, stu.getSex());
pre.setFloat(3, stu.getScore());
pre.setDate(4, new java.sql.Date(stu.getSbirth().getTime()));// 把java.util.Date转化为java.sql.Date
pre.setBoolean(5, stu.getSdy());
hang = pre.executeUpdate();
} catch (Exception e) {
throw new RuntimeException(e);
}
JdbcUtil.close(con, pre, null);
return hang;
}
// 修改一个
public int updateOne(Student stu) {
Connection con = JdbcUtil.getCon();
PreparedStatement pre = null;
int hang = 0;
try {
pre = con.prepareStatement("update student set sname=?,sex=?,score=?,sbirth=?,sdy=? where sid=?");
pre.setString(1, stu.getSname());
pre.setString(2, stu.getSex());
pre.setFloat(3, stu.getScore());
pre.setDate(4, new java.sql.Date(stu.getSbirth().getTime()));// 把java.util.Date转化为java.sql.Date
pre.setBoolean(5, stu.getSdy());
pre.setInt(6, stu.getSid());
hang = pre.executeUpdate();
} catch (Exception e) {
throw new RuntimeException(e);
}
JdbcUtil.close(con, pre, null);
return hang;
}
// 获取所有
public List<Student> getAll() {
Connection con = JdbcUtil.getCon();
PreparedStatement pre = null;
ResultSet set = null;
List<Student> list = new ArrayList<Student>();
try {
pre = con.prepareStatement("select * from student");
set = pre.executeQuery();
while (set.next()) {
list.add(new Student(set.getInt("sid"), set.getString("sname"), set.getString("sex"),
set.getFloat("score"), set.getDate("sbirth"), set.getBoolean("sdy")));
}
} catch (Exception e) {
throw new RuntimeException(e);
}
JdbcUtil.close(con, pre, set);
return list;
}
}
package com.zhiyou100.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import com.zhiyou100.entity.Teacher;
import com.zhiyou100.util.JdbcUtil;
public class TeacherDao {
public Teacher getOneByTname(String tname){
Connection con=JdbcUtil.getCon();
PreparedStatement pre=null;
ResultSet set=null;
Teacher t=null;
try {
pre=con.prepareStatement("select * from teacher where tname=?");
pre.setString(1, tname);
set=pre.executeQuery();
if(set.next()){
t=new Teacher(set.getInt("tid"), set.getString("tname"), set.getString("tpwd"));
}
} catch (Exception e) {
throw new RuntimeException(e);
}
JdbcUtil.close(con, pre, set);
return t;
}
}
1.7 登录
- css:::app.css
table{
border:1px solid blue;
border-collapse: collapse;
margin:50px auto;
}
td,th{
text-align: center;
padding:10px;
border:1px solid blue;
}
#tab_login{
width:800px;
margin:200px auto;
}
- 拼凑登录页面的servlet :/teacher/loginHtml.do
package com.zhiyou100.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class TeacherLoginHtml extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//拼凑一个老师登录页面
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
PrintWriter out=resp.getWriter();
StringBuffer stb=new StringBuffer();
stb.append("<!DOCTYPE html><html><head><meta charset='UTF-8'><title>老师登录页面</title>");
stb.append("<link type='text/css' rel='stylesheet' href='/java43_project_servlet_02/css/app.css'/>");
stb.append("<body>");
stb.append("<form action='/java43_project_servlet_02/teacher/login.do' method='post'>");
stb.append("<table id='tab_login'>");
stb.append("<tr>");
stb.append("<th>老师名字:</th>");
stb.append("<td><input type='text' name='tname'/></td>");
stb.append("</tr>");
stb.append("<tr>");
stb.append("<th>老师密码:</th>");
stb.append("<td><input type='password' name='tpwd'/></td>");
stb.append("</tr>");
stb.append("<tr>");
stb.append("<th colspan='2'><input type='reset' value='重填'/> | <input type='submit' value='登录'/></th>");
stb.append("</tr>");
stb.append("</table>");
stb.append("</form>");
stb.append("</body>");
stb.append("</html>");
out.print(stb);
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
- 处理登录业务的servlet: /teacher/login.do
package com.zhiyou100.servlet;
...
public class TeacherLogin extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取请求参数
req.setCharacterEncoding("UTF-8");
String tname=req.getParameter("tname");
String tpwd=req.getParameter("tpwd");
//访问数据库
TeacherDao teacherDao=new TeacherDao();
Teacher dbTeacher=teacherDao.getOneByTname(tname);
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
//判断登录是否成功
if(dbTeacher==null){
//账号错误:提示信息+回到登录页面
// String message="用户名("+tname+")错误!";
//message= URLDecoder.decode(message,"utf-8");
// message="tname error!";
// resp.sendRedirect("/java43_project_servlet_02/teacher/loginHtml.do?message="+message);
//拼凑页面 页面显示错误信息:等待3秒钟刷新到登录页面
resp.getWriter().print("<h1 style='color:red;text-align:center;'>用户名("+tname+")错误</h1>");
resp.setHeader("Refresh", "3;url=http://localhost:8080/java43_project_servlet_02/teacher/loginHtml.do");
return;
}
if(!dbTeacher.getTpwd().equals(tpwd)){
// //密码错误:提示信息+回到登录页面
// String message="密码错误!";
// message="tpwd error!";
// resp.sendRedirect("/java43_project_servlet_02/teacher/loginHtml.do?message="+message);
//拼凑页面 页面显示错误信息:等待3秒钟刷新到登录页面
resp.getWriter().print("<h1 style='color:red;text-align:center;'>密码错误</h1>");
resp.setHeader("Refresh", "3;url=http://localhost:8080/java43_project_servlet_02/teacher/loginHtml.do");
return;
}
//登录成功:跳转到学生管理页面
req.getRequestDispatcher("/student/managerHtml.do").forward(req, resp);
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
1.8 学生管理
- 拼凑学生管理页面的servlet /student/managerHtml.do
package com.zhiyou100.servlet;
...
public class StudentManagerHtml extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取所有学生的信息
StudentDao studentDao=new StudentDao();
List<Student> list=studentDao.getAll();
// 拼凑一个学生管理页面
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
PrintWriter out = resp.getWriter();
StringBuffer stb = new StringBuffer();
stb.append("<!DOCTYPE html><html><head><meta charset='UTF-8'><title>学生管理页面</title>");
stb.append("<link type='text/css' rel='stylesheet' href='/java43_project_servlet_02/css/app.css'/>");
stb.append("<body>");
stb.append("<table id='tab_student' style='width:1600px;'>");
stb.append("<tr>");
stb.append("<th>学号</th><th>名字</th><th>性别</th><th>分数</th><th>党员</th><th>生日</th><th>操作</th>");
stb.append("</tr>");
for(Student stu:list){
stb.append("<tr>");
stb.append("<td>"+stu.getSid()+"</td>");
stb.append("<td>"+stu.getSname()+"</td>");
stb.append("<td>"+stu.getSex()+"</td>");
stb.append("<td>"+stu.getScore()+"</td>");
stb.append("<td>"+(stu.getSdy()?"党员":"群众")+"</td>");
stb.append("<td>"+DateStrUtil.date2Str(stu.getSbirth())+"</td>");
stb.append("<td><a href='/java43_project_servlet_02/student/deleteOne.do?sid="+stu.getSid()+"'>删除</a> | "
+ "<a href='/java43_project_servlet_02/student/updateHtml.do?sid="+stu.getSid()+"'>修改</a></td>");
stb.append("</tr>");
}
stb.append("<tr>");
stb.append("<th colspan='7'><a href='/java43_project_servlet_02/student/addHtml.do'>添加学生</a></th>");
stb.append("</tr>");
stb.append("</table>");
stb.append("</form>");
stb.append("</body>");
stb.append("</html>");
out.print(stb);
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
1.9 删除
- 删除学生的servlet:/student/delete.do
package com.zhiyou100.servlet;
...
public class StudentDelete extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取请求参数
int sid=Integer.parseInt(req.getParameter("sid"));
//通过dao删除
new StudentDao().deleteOne(sid);
//删除成功
//拼凑页面 页面显示信息:等待3秒钟刷新到学生管理页面
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
resp.getWriter().print("<h1 style='color:blue;text-align:center;'>删除成功!</h1>");
resp.setHeader("Refresh", "3;url=http://localhost:8080/java43_project_servlet_02/student/managerHtml.do");
return;
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
1.10 修改
- 拼凑修改页面的servlet:/student/updateJHtml.do
package com.zhiyou100.servlet;
...
public class StudentUpdateHtml extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 获取请求参数
int sid = Integer.parseInt(req.getParameter("sid"));
// 拼凑页面 页面表单展示sid的原来信息
Student stu = new StudentDao().getOneBySid(sid);
// 拼凑一个修改学生的页面
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
PrintWriter out = resp.getWriter();
StringBuffer stb = new StringBuffer();
stb.append("<!DOCTYPE html><html><head><meta charset='UTF-8'><title>学生修改页面</title>");
stb.append("<link type='text/css' rel='stylesheet' href='/java43_project_servlet_02/css/app.css'/>");
stb.append("<body>");
stb.append("<form action='/java43_project_servlet_02/student/update.do' method='post'>");
stb.append("<input type='hidden' name='sid' value='"+stu.getSid()+"'/>");
stb.append("<table id='tab_student_update'>");
stb.append("<tr>");
stb.append("<th>学生名字:</th>");
stb.append("<td><input type='text' name='sname' value='"+stu.getSname()+"'/></td>");
stb.append("</tr>");
stb.append("<tr>");
stb.append("<th>学生性别:</th>");
if(stu.getSex().equals("男")){
stb.append("<td>男:<input type='radio' name='sex' value='男' checked='checked'/> | 女:<input type='radio' name='sex' value='女'/></td>");
}else{
stb.append("<td>男:<input type='radio' name='sex' value='男'/> | 女:<input type='radio' name='sex' value='女' checked='checked'/></td>");
}
stb.append("</tr>");
stb.append("<tr>");
stb.append("<th>学生分数:</th>");
stb.append("<td><input type='text' name='score' value='"+stu.getScore()+"'/></td>");
stb.append("</tr>");
stb.append("<tr>");
stb.append("<th>是否党员:</th>");
if(stu.getSdy()){
stb.append("<td>党员:<input type='radio' name='sdy' value='true' checked='checked'/> | 群众:<input type='radio' name='sdy' value='false'/></td>");
}else{
stb.append("<td>党员:<input type='radio' name='sdy' value='true'/> | 群众:<input type='radio' name='sdy' value='false' checked='checked'/></td>");
}
stb.append("</tr>");
stb.append("<tr>");
stb.append("<th>学生生日(格式必须是xxxx年xx月xx日):</th>");
stb.append("<td><input type='text' name='sbirth' value='"+(DateStrUtil.date2Str(stu.getSbirth()))+"'/></td>");
stb.append("</tr>");
stb.append("<tr>");
stb.append("<th colspan='2'><input type='reset' value='重填'/> | <input type='submit' value='修改'/></th>");
stb.append("</tr>");
stb.append("</table>");
stb.append("</form>");
stb.append("</body>");
stb.append("</html>");
out.print(stb);
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
- 处理修改学生业务的servlet:/student/update.do
package com.zhiyou100.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.zhiyou100.dao.StudentDao;
import com.zhiyou100.entity.Student;
import com.zhiyou100.util.DateStrUtil;
public class StudentUpdate extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取请求参数
req.setCharacterEncoding("UTF-8");
Student student=new Student();
student.setSid(Integer.parseInt(req.getParameter("sid")));
student.setSname(req.getParameter("sname"));
student.setScore(Float.parseFloat(req.getParameter("score")));
student.setSex(req.getParameter("sex"));
student.setSdy(Boolean.parseBoolean(req.getParameter("sdy")));
student.setSbirth(DateStrUtil.str2Date(req.getParameter("sbirth")));
//调用数据库
new StudentDao().updateOne(student);
//拼凑页面 页面显示信息:等待3秒钟刷新到学生管理页面
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
resp.getWriter().print("<h1 style='color:blue;text-align:center;'>修改("+student.getSname()+")成功!</h1>");
resp.setHeader("Refresh", "3;url=http://localhost:8080/java43_project_servlet_02/student/managerHtml.do");
return;
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
1.11 添加
- 拼凑学生添加页面的servlet:/student/addHtml.do
package com.zhiyou100.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class StudentAddHtml extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 拼凑一个添加学生的页面
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
PrintWriter out = resp.getWriter();
StringBuffer stb = new StringBuffer();
stb.append("<!DOCTYPE html><html><head><meta charset='UTF-8'><title>学生添加页面</title>");
stb.append("<link type='text/css' rel='stylesheet' href='/java43_project_servlet_02/css/app.css'/>");
stb.append("<body>");
stb.append("<form action='/java43_project_servlet_02/student/add.do' method='post'>");
stb.append("<table id='tab_student_add'>");
stb.append("<tr>");
stb.append("<th>学生名字:</th>");
stb.append("<td><input type='text' name='sname' /></td>");
stb.append("</tr>");
stb.append("<tr>");
stb.append("<th>学生性别:</th>");
stb.append("<td>男:<input type='radio' name='sex' value='男'/> | 女:<input type='radio' name='sex' value='女'/></td>");
stb.append("</tr>");
stb.append("<tr>");
stb.append("<th>学生分数:</th>");
stb.append("<td><input type='text' name='score'/></td>");
stb.append("</tr>");
stb.append("<tr>");
stb.append("<th>是否党员:</th>");
stb.append("<td>党员:<input type='radio' name='sdy' value='true'/> | 群众:<input type='radio' name='sdy' value='false'/></td>");
stb.append("</tr>");
stb.append("<tr>");
stb.append("<th>学生生日(格式必须是xxxx年xx月xx日):</th>");
stb.append("<td><input type='text' name='sbirth' /></td>");
stb.append("</tr>");
stb.append("<tr>");
stb.append("<th colspan='2'><input type='reset' value='重填'/> | <input type='submit' value='添加'/></th>");
stb.append("</tr>");
stb.append("</table>");
stb.append("</form>");
stb.append("</body>");
stb.append("</html>");
out.print(stb);
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
- 处理学生添加业务的servlet:/student/add.do
package com.zhiyou100.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.zhiyou100.dao.StudentDao;
import com.zhiyou100.entity.Student;
import com.zhiyou100.util.DateStrUtil;
public class StudentAdd extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 获取请求参数
req.setCharacterEncoding("UTF-8");
Student student = new Student();
student.setSname(req.getParameter("sname"));
student.setScore(Float.parseFloat(req.getParameter("score")));
student.setSex(req.getParameter("sex"));
student.setSdy(Boolean.parseBoolean(req.getParameter("sdy")));
student.setSbirth(DateStrUtil.str2Date(req.getParameter("sbirth")));
// 调用数据库
new StudentDao().addOne(student);
// 拼凑页面 页面显示信息:等待3秒钟刷新到学生管理页面
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
resp.getWriter().print("<h1 style='color:blue;text-align:center;'>添加(" + student.getSname() + ")成功!</h1>");
resp.setHeader("Refresh", "3;url=http://localhost:8080/java43_project_servlet_02/student/managerHtml.do");
return;
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}