三、添加员工的功能
添加数据
从数据库中添加编号为1
的员工,效果图如下:
刷新http://localhost:8080/servlettest/list
,显示结果如下:
创建一个页面
第一步:
添加一个页面,名称为addemp.html
注意:在WebRoot,右击新建页面
自动生成代码,如图显示:
修改代码:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>添加员工信息</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
</head>
<body>
<!-- 不写默认是get方式 -->
<form action="" method="">
<h2>添加员工信息</h2>
编号:<input type="text" name="id"/><br/>
姓名:<input type="text" name="name"/><br/>
密码:<input type="password" name="pwd"/><br/>
工资:<input type="text" name="salary"/><br/>
生日:<input type="text" name="birthday"/><br/>
<input type="submit" name="smt" value="添加"/>
</form>
</body>
</html>
第二步:
测试addemp.html
:
若在浏览器中输入http://localhost:8080/servlettest/addemp.html
,则如图下显示:
第三步:
package com.bzxy.emp;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//服务器端的Servlet -- 员工信息显示的
public class EmpListServlet extends HttpServlet {
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//1)在该servlet中要将mysql数据库中的数据获取到(jdbc)
ResultSet rs = null;
try {
//① 注册加载驱动 (需要在Web项目中,引入的mysqlxx.jar包需要注册加载后才能正常使用)
//!Java项目不需要,Web项目
Class.forName("com.mysql.jdbc.Driver");
//② 获得数据库mysql的连接
//jdbc、mysql、localhost(本地地址)、3306(端口号)、test1(库名)
String url = "jdbc:mysql://localhost:3306/test1";
String username = "root";
String pwd = "";
Connection con = DriverManager.getConnection(url, username, pwd);
System.out.println("连接为:" + con);
//③ 预编译sql语句
String sql = "select * from emp";
PreparedStatement prep = con.prepareStatement(sql);
//④ 执行sql语句,获得结果集
rs = prep.executeQuery();
//先将结果集rs中数据输出在控制台上测试一下
/*
while (rs.next()) {
System.out.println(rs.getInt("id") + "," + rs.getString("name") + "," + rs.getString("pwd")+ ","
+ rs.getDouble("salary") + "," + rs.getDate("birthday"));
}
*/
} catch (Exception e) {
e.printStackTrace();
}
//2)在该Servlet中将获取的数据显示在页面中
response.setContentType("text/html;charset=utf-8");
try {
//获得PrintWriter,向页面端写内容
PrintWriter pw = response.getWriter();
//使用pw向页面输出一个表格
pw.println("<table border='1' cellspacing='0' width='600' align='center'>");
//表格的标题
pw.println("<caption>员工信息表</caption>");
//表格的第一行 编号、姓名、密码、工资、
pw.println("<tr align='center'><td>编号</td><td>姓名</td><td>密码</td><td>工资</td><td>生日</td><td>操作</td></tr>");
//表格的第二行到第N行
while (rs.next()) {
//pw.println(rs.getInt("id") + "," + rs.getString("name") + "," + rs.getString("pwd")+ ","
//+ rs.getDouble("salary") + "," + rs.getDate("birthday") + "<br/>");
pw.println("<tr align='center'><td>" + rs.getInt("id")+ "</td><td>" + rs.getString("name") + "</td><td>"
+ rs.getString("pwd") + "</td><td>" + rs.getDouble("salary") + "</td><td>"
+ rs.getDate("birthday") + "</td><td>删除</td></tr>");
}
//表格的最后一行
pw.println("<tr><td colspan='6'><a href='http://www.baidu.com'>点我添加员工信息</a></td></tr>");
pw.println("</table>");
} catch (SQLException e) {
e.printStackTrace();
}
}
}
修改代码为:
第四步:
若在浏览器中输入http://localhost:8080/servlettest/list
,则如图下显示:
点击添加员工信息,自动跳转http://localhost:8080/servlettest/addemp.html
,则如图下显示:
创建一个servlet
名为EmpDeleteServlet
,以下是属性修改url地址改为/delete
web.xml
在原来基础上自动添加相应代码,我们对其添加注释
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- 对com.bzxy.test包下的HelloServlet进行配置 -->
<servlet>
<servlet-name>hello</servlet-name> <!-- 对要配置的Servlet起别名 -->
<servlet-class>com.bzxy.test.HelloServlet</servlet-class> <!-- 配置的Servlet的位置,写所在的包名+类名即可 -->
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name> <!-- 要和上面的servlet-name的内容保持一致 -->
<url-pattern>/ho</url-pattern> <!-- 浏览器访问服务器端servlet的url地址 -->
</servlet-mapping>
<!-- 对com.bzxy.test包下的RegisteServlet进行配置 -->
<servlet>
<servlet-name>RegisteServlet</servlet-name> <!-- 对要配置的Servlet起别名 -->
<servlet-class>com.bzxy.test.RegisteServlet</servlet-class> <!-- 配置的Servlet的位置,写所在的包名+类名即可 -->
</servlet>
<!-- 对com.bzxy.emp包下的EmpListServlet进行配置 -->
<servlet>
<servlet-name>EmpListServlet</servlet-name>
<servlet-class>com.bzxy.emp.EmpListServlet</servlet-class>
</servlet>
<!-- 对com.bzxy.emp包下的EmpDeleteServlet进行配置 -->
<servlet>
<servlet-name>EmpDeleteServlet</servlet-name>
<servlet-class>com.bzxy.emp.EmpDeleteServlet</servlet-class>
</servlet>
<!-- 对com.bzxy.emp包下的EmpAddServlet进行配置 -->
<servlet>
<servlet-name>EmpAddServlet</servlet-name>
<servlet-class>com.bzxy.emp.EmpAddServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RegisteServlet</servlet-name> <!-- 要和上面的servlet-name的内容保持一致 -->
<url-pattern>/registe</url-pattern> <!-- 浏览器访问服务器端servlet的url地址 -->
</servlet-mapping>
<servlet-mapping>
<servlet-name>EmpListServlet</servlet-name>
<url-pattern>/list</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>EmpDeleteServlet</servlet-name>
<url-pattern>/delete</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>EmpAddServlet</servlet-name>
<url-pattern>/add</url-pattern>
</servlet-mapping>
</web-app>
测试:
若不连接add.html
在add.html
中修改代码:
若在浏览器中输入http://localhost:8080/servlettest/list
,则如图下显示:
点击添加员工信息,自动跳转http://localhost:8080/servlettest/addemp.html
,则如图下显示:
输入员工信息,如图显示:
点击添加
后,地址栏变化,如图显示:
若连接add.html
在add.html
中修改代码:
若在浏览器中输入http://localhost:8080/servlettest/list
,则如图下显示:
点击点我添加员工信息
,自动跳转http://localhost:8080/servlettest/addemp.html
,则如图下显示:
输入员工信息,如图显示:
点击添加
后,地址栏变化,如图显示:
代码部分:
package com.bzxy.emp;
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;
//服务器端的servlet -- 添加员工的信息
public class EmpAddServlet extends HttpServlet {
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("测试doPost...");
}
}
最终控制台显示,说明测试无误:
接收addemp.html页面中表单提交的数据
第一步:
关于接收addemp.html
页面中表单提交的数据,可参照两个方面,任意一个都可
① add.html
② 前面不连接add.html
,输入员工信息后,自动跳转的地址:
第二步:
EmpAddServlet.java
代码部分为:
package com.bzxy.emp;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.text.SimpleDateFormat;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//服务器端的servlet -- 添加员工的信息
public class EmpAddServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//http://localhost:8080/servlettest/addemp.html
//?id=1001&name=ww&pwd=1234&salary=12333&birthday=2020-04-09&smt=%E6B7%BB%E5%8A%A0
//1)接收addemp.html页面中表单提交的数据
String strId = request.getParameter("id"); //1001 "1001"
String strName = request.getParameter("name");
String strPwd = request.getParameter("pwd");
String strSalary = request.getParameter("salary");
String strBirthday = request.getParameter("birthday");
System.out.println(strId + "," + strName + "," + strPwd + "," + strSalary + "," + birthday);
//输出结果为:1001,ww,1234,12333,2020-04-09
//2)将接收到的数据,通过jdbc连接数据库,插入到数据库中
//3)插入成功以后,需要重新回到http://localhost:8080/servlettest/list地址的页面
//System.out.println("测试doPost...");
}
}
若在浏览器中输入http://localhost:8080/servlettest/list
,则如图下显示:
点击点我添加员工信息
,自动跳转http://localhost:8080/servlettest/addemp.html
,则如图下显示:
输入员工信息,如图显示:
点击添加
后,控制台显示如图所示:
bug:
若EmpAddServlet.java
代码部分,写错了,如图下所示:
则控制台显示如图所示:
将接收到的数据,通过jdbc连接数据库,插入到数据库中
第一步:
EmpAddServlet.java
局部测试,代码如下:
package com.bzxy.emp;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//服务器端的servlet -- 添加员工的信息
public class EmpAddServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//http://localhost:8080/servlettest/addemp.html
//?id=1001&name=ww&pwd=1234&salary=12333&birthday=2020-04-09&smt=%E6B7%BB%E5%8A%A0
//1)接收addemp.html页面中表单提交的数据
String strId = request.getParameter("id"); //1001 "1001"
String strName = request.getParameter("name");
String strPwd = request.getParameter("pwd");
String strSalary = request.getParameter("salary");
String birthday = request.getParameter("birthday");
System.out.println(strId + "," + strName + "," + strPwd + "," + strSalary + "," + strBirthday);
//输出结果为:1001,ww,1234,12333,2020-04-09
//2)将接收到的数据,通过jdbc连接数据库,插入到数据库中
try {
//①注册加载驱动
Class.forName("com.mysql.jdbc.Driver");
//②获得数据库的连接
String url = "jdbc:mysql://localhost:3306/test1";
String username = "root";
String pwd = "";
Connection con = DriverManager.getConnection(url, username, pwd);
System.out.println(con); //com.mysql.jdbc.JDBC4Connection@1a2f5b1
//③预编译sql语句
//④执行sql语句
} catch (Exception e) {
e.printStackTrace();
}
//3)插入成功以后,需要重新回到http://localhost:8080/servlettest/list地址的页面
//System.out.println("测试doPost...");
}
}
若在浏览器中输入http://localhost:8080/servlettest/list
,则如图下显示:
点击点我添加员工信息
,自动跳转http://localhost:8080/servlettest/addemp.html
,则如图下显示:
输入员工信息,如图显示:
点击添加
后,控制台显示如图所示:控制台显示:
第二步:
继续添加EmpAddServlet.java
代码,如下:
package com.bzxy.emp;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//服务器端的servlet -- 添加员工的信息
public class EmpAddServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//http://localhost:8080/servlettest/addemp.html
//?id=1001&name=ww&pwd=1234&salary=12333&birthday=2020-04-09&smt=%E6B7%BB%E5%8A%A0
//1)接收addemp.html页面中表单提交的数据
String strId = request.getParameter("id"); //1001 "1001"
String strName = request.getParameter("name");
String strPwd = request.getParameter("pwd");
String strSalary = request.getParameter("salary");
String birthday = request.getParameter("birthday");
System.out.println(strId + "," + strName + "," + strPwd + "," + strSalary + "," + birthday);
//输出结果为:1001,ww,1234,12333,2020-04-09
//2)将接收到的数据,通过jdbc连接数据库,插入到数据库中
try {
//①注册加载驱动
Class.forName("com.mysql.jdbc.Driver");
//②获得数据库的连接
String url = "jdbc:mysql://localhost:3306/test1";
String username = "root";
String pwd = "";
Connection con = DriverManager.getConnection(url, username, pwd);
System.out.println(con); //com.mysql.jdbc.JDBC4Connection@1a2f5b1
//③预编译sql语句
String sql = "insert into emp values(?,?,?,?,?)";
PreparedStatement prep = con.prepareStatement(sql);
prep.setInt(1, Integer.parseInt(strId)); //将字符串类型转换为int类型
prep.setString(2, strName);
prep.setString(3, strPwd);
prep.setDouble(4, Double.parseDouble(strSalary)); //将字符串类型转换为Double类型
prep.setString(5, birthday); //mysql日期类型以字符串的方式插入"2020-04-09"
//④执行sql语句
prep.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}
//3)插入成功以后,需要重新回到http://localhost:8080/servlettest/list地址的页面
//System.out.println("测试doPost...");
}
}
若在浏览器中输入http://localhost:8080/servlettest/list
,则如图下显示:
点击点我添加员工信息
,自动跳转http://localhost:8080/servlettest/addemp.html
,则如图下显示:
输入员工信息,如图显示:
点击添加
后,输入http://localhost:8080/servlettest/list
地址,显示如图所示:
mysql中显示,说明插入成功
插入成功以后,需要重新回到http://localhost:8080/servlettest/list
地址的页面
只需添加一条代码即可
代码部分:
package com.bzxy.emp;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//服务器端的servlet -- 添加员工的信息
public class EmpAddServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//http://localhost:8080/servlettest/addemp.html
//?id=1001&name=ww&pwd=1234&salary=12333&birthday=2020-04-09&smt=%E6B7%BB%E5%8A%A0
//1)接收addemp.html页面中表单提交的数据
String strId = request.getParameter("id"); //1001 "1001"
String strName = request.getParameter("name");
String strPwd = request.getParameter("pwd");
String strSalary = request.getParameter("salary");
String birthday = request.getParameter("birthday");
System.out.println(strId + "," + strName + "," + strPwd + "," + strSalary + "," + birthday);
//输出结果为:1001,ww,1234,12333,2020-04-09
//2)将接收到的数据,通过jdbc连接数据库,插入到数据库中
try {
//①注册加载驱动
Class.forName("com.mysql.jdbc.Driver");
//②获得数据库的连接
String url = "jdbc:mysql://localhost:3306/test1";
String username = "root";
String pwd = "";
Connection con = DriverManager.getConnection(url, username, pwd);
System.out.println(con); //com.mysql.jdbc.JDBC4Connection@1a2f5b1
//③预编译sql语句
String sql = "insert into emp values(?,?,?,?,?)";
PreparedStatement prep = con.prepareStatement(sql);
prep.setInt(1, Integer.parseInt(strId)); //将字符串类型转换为int类型
prep.setString(2, strName);
prep.setString(3, strPwd);
prep.setDouble(4, Double.parseDouble(strSalary)); //将字符串类型转换为Double类型
prep.setString(5, birthday); //mysql日期类型以字符串的方式插入"2020-04-09"
//④执行sql语句
prep.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}
//3)插入成功以后,需要重新回到http://localhost:8080/servlettest/list地址的页面
response.sendRedirect("list");
//System.out.println("测试doPost...");
}
}
注意:添加的员工,编号不能与数据库中员工编号相同,因为id设了primary主键
若在浏览器中输入http://localhost:8080/servlettest/list
,则如图下显示:
点击点我添加员工信息
,自动跳转http://localhost:8080/servlettest/addemp.html
,则如图下显示:
输入员工信息,如图显示:
点击添加
后,自动跳转:http://localhost:8080/servlettest/list
,如图显示,说明添加成功!