目录
2、java代码-查询员工:ListEmpServlet.java
4、java代码-添加员工:AddEmpServlet.java
步骤3:java类ListEmpServlet,进行数据库访问操作,并输出显示
步骤6:类AddEmpServlet获取表单提交信息,访问并插入数据库
步骤8:java类ListEmpServlet,进行数据库访问操作,并输出显示【即回到步骤3】
一、前言
上一篇文章我们介绍了在servlet中如何使用jdbc访问数据库:查询个人员工信息、所有员工信息,详细可参考博文:原创 java服务器端开发-servlet:3_2、Servlet使用jdbc访问数据库:查询员工信息 这篇文章我将介绍:循环查询添加员工信息,为引入重定向作铺垫和准备
二、循环查询添加员工信息
1、配置文件代码:web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<display-name>web03</display-name>
<!-- t07_循环查询添加员工信息 -->
<!-- 查询员工信息 -->
<servlet>
<servlet-name>showFormEmp</servlet-name>
<servlet-class>t07_循环查询添加员工信息.ListEmpServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>showFormEmp</servlet-name>
<url-pattern>/show</url-pattern>
</servlet-mapping>
<!-- 添加员工信息 -->
<servlet>
<servlet-name>addEmp</servlet-name>
<servlet-class>t07_循环查询添加员工信息.AddEmpServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>addEmp</servlet-name>
<url-pattern>/add</url-pattern>
</servlet-mapping>
</web-app>
2、java代码-查询员工:ListEmpServlet.java
package t07_循环查询添加员工信息;
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;
/**
* 查询mySql里面的员工数据【主要功能】
* @UpdateTime:2011年02月28日 下午17:30:00
* @ProjectName: 【项目名】
* @ClassName:【类名】
* @CategoryName:【类型】如:Activity
* @author:luminal、邮箱 luminal_yyh@163.com
* @since 1.0【版本】
* @Description:(可以在这里描述这个类的作用)
* 步骤:
* 1、测试地址:
* http://localhost:8080/web03/show
* 2、查询以后,插入。那么插入成功以后,怎么返回到查询的页面。
* 点击跳转。或 自动跳转“重定向”(后面介绍)
*/
public class ListEmpServlet extends HttpServlet{
public void service(HttpServletRequest request,
HttpServletResponse response)
throws ServletException,IOException{
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
Connection conn = null;
PreparedStatement prep = null;
ResultSet rst = null;
try {
//Class.forName("com.mysql.jdbc.Driver"); //提示被弃用
Class.forName("com.mysql.cj.jdbc.Driver");
conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/jsd1108db",
"root","你的mysql密码");
prep = conn.prepareStatement(
"select * from t_emp");
rst = prep.executeQuery();
out.println("<table border='1' width='60%' " +
"cellpadding='0' cellspacing='0'>");
out.println("<tr><td>ID</td><td>姓名</td>" +
"<td>薪水</td><td>年龄</td></tr>");
while(rst.next()){
int id = rst.getInt("id");
String name = rst.getString("name");
double salary =rst.getDouble("salary");
int age = rst.getInt("age");
out.println("<tr><td>" + id
+ "</td><td>" + name
+ "</td><td>" + salary
+"</td><td>" + age
+ "</td></tr>");
}
out.println("</table>");
out.println("<a href='addEmp.html'>添加新员工</a>");
} catch (Exception e) {
e.printStackTrace();
out.println("系统繁忙,稍后重试");
}finally{
if(rst != null){
try {
rst.close();
} catch (SQLException e) {
}
}
if( prep != null){
try {
prep.close();
} catch (SQLException e) {
}
}
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
}
}
}
}
}
3、html 表格提交代码:addEmp.html
<html>
<head>
<!-- 模拟一个消息头(content-type) content里面内容:“文本/网页,字符编码”-->
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
</head>
<!-- body定义总体样式 -->
<body style="font-size:18px; font-style:fond; color:red; ">
<!-- action="add",对应web.xml中标签url-pattern里的"/add" -->
<form action="add" method="post">
<fieldset>
<legend>录入员工信息</legend>
姓名:<input name="name" /><br />
薪水:<input name="salary" /><br />
年龄:<input name="age" /><br />
<input type="submit" value="提交" />
</fieldset>
</form>
</body>
</html>
4、java代码-添加员工:AddEmpServlet.java
package t07_循环查询添加员工信息;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 员工信息插入mysql【主要功能】
* @UpdateTime:2011年02月28日 下午17:30:00
* @ProjectName: 【项目名】
* @ClassName:【类名】
* @CategoryName:【类型】如:Activity
* @author:luminal、邮箱 luminal_yyh@163.com
* @since 1.0【版本】
* @Description:(可以在这里描述这个类的作用)
*/
public class AddEmpServlet extends HttpServlet{
public void service(HttpServletRequest request,
HttpServletResponse response)
throws ServletException,IOException{
request.setCharacterEncoding("utf-8");
//读请求参数
String name = request.getParameter("name");
String salary = request.getParameter("salary");
String age = request.getParameter("age");
//服务端验证一定要有,此处省略...
response.setContentType(
"text/html;charset=utf-8");
PrintWriter out = response.getWriter();
//将员工信息插入数据库【详见JDBC知识点】
//首先要在mysql里面,建数据库jsd1308db,
//建表t_emp,才能进行如下操作【mySql建库、表,详见文档】
Connection conn = null;
PreparedStatement prep = null;
try {
//Class.forName("com.mysql.jdbc.Driver"); //提示被弃用
Class.forName("com.mysql.cj.jdbc.Driver");
conn =
DriverManager.getConnection(
"jdbc:mysql://localhost:3306/jsd1108db",
"root","qwe123654");
prep =
conn.prepareStatement("insert into " +
"t_emp(name,salary,age) " +
"values(?,?,?)");
prep.setString(1, name);
//salary写成sal,报NullPointerException
//执行后面的-->"系统繁忙,稍后重试"
prep.setDouble(2, Double.parseDouble(salary));
prep.setInt(3, Integer.parseInt(age));
prep.executeUpdate();
out.println("插入成功");
/*
show对应web.xml的“<url-pattern>/show</url-pattern>”
它也可以是一个html,如:ListEmpServlet类调用了addEmp.html
out.println("<a href='addEmp.html'>添加新员工</a>");
*/
out.println("<a href='show'>"+"查看雇员</a>");
} catch (Exception e) {
//记日志
e.printStackTrace();
//判断异常是否能恢复,如果
//能够恢复,立即恢复;如果不能够
//恢复(系统异常,比如数据库服务暂停,
//连接数据库的网络中断),则提示用户稍后重试。
out.println("系统繁忙,稍后重试");
}finally{
if(prep != null){
try {
prep.close();
} catch (SQLException e) {
//一定不执行,所以日志都没打印了
}
}
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
}
}
}
}
}
5、效果演示
(1)下面我们来操作演示一下【查询】
启动tomact,部署web项目,在谷歌浏览器输入:http://localhost:8080/web03/show
(2)点击“添加新员工”【添加】
它的地址变为:http://localhost:8080/web03/addEmp.html
(3)填入信息,点击“提交”
它的地址变为:http://localhost:8080/web03/add
(4)点击“查看雇员”【查询】
它的地址变为:http://localhost:8080/web03/show
可以看到多了一条信息,我们依次按照以上方式:循环查询添加员工信息
6、执行流程简单介绍
步骤1:浏览器输入地址
http://www.localhost:8080/web03/show
步骤2:匹配配置文件 web.xml
浏览器地址的 show 对应 <url-pattern>的 /show
<!-- 查询员工信息 -->
<servlet>
<servlet-name>showFormEmp</servlet-name>
<servlet-class>t07_循环查询添加员工信息.ListEmpServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>showFormEmp</servlet-name>
<url-pattern>/show</url-pattern>
</servlet-mapping>
然后找到 java包、类ListEmpServlet
步骤3:java类ListEmpServlet,进行数据库访问操作,并输出显示
ListEmpServlet类查询数据库,并以表格的形式输出显示,目前的表格是在java类中嵌套 html 代码的形式
步骤4:点击添加新员工
java类ListEmpServlet的关键代码,如下:
out.println("<a href='addEmp.html'>添加新员工</a>");
它会链接到文件:addEmp.html,地址为:http://localhost:8080/web03/addEmp.html
即跳转到下面界面(数据是后加上的)
步骤5:点击提交,表单对应web.xml
addEmp.html 表单提交的关键代码,如下:
<form action="add" method="post">
表单提交的 add 对应
配置文件 web.xml 中 <url-pattern>的 /add
<!-- 添加员工信息 -->
<servlet>
<servlet-name>addEmp</servlet-name>
<servlet-class>t07_循环查询添加员工信息.AddEmpServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>addEmp</servlet-name>
<url-pattern>/add</url-pattern>
</servlet-mapping>
然后找到 java包、类AddEmpServlet
步骤6:类AddEmpServlet获取表单提交信息,访问并插入数据库
员工数据插入数据库成功,出现如下界面:
它的地址变为:http://localhost:8080/web03/add
步骤7:点击 查看雇员
java类AddEmpServlet的关键代码,如下:
out.println("<a href='show'>"+"查看雇员</a>");
这里的 show 对应配置文件 web.xml 的 /show
<!-- 查询员工信息 -->
<servlet>
<servlet-name>showFormEmp</servlet-name>
<servlet-class>t07_循环查询添加员工信息.ListEmpServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>showFormEmp</servlet-name>
<url-pattern>/show</url-pattern>
</servlet-mapping>
然后找到 java包、类ListEmpServlet
步骤8:java类ListEmpServlet,进行数据库访问操作,并输出显示【即回到步骤3】
ListEmpServlet类查询数据库,并以表格的形式输出显示,目前的表格是在java类中嵌套 html 代码的形式
它的地址从 http://localhost:8080/web03/add 变为:http://localhost:8080/web03/show
三、注意点
1、Servlet对应关系与变换
(1)addEmp.html 表单提交的关键代码,如下:
<form action="add" method="post">
表单提交的 add 对应
配置文件 web.xml 中 <url-pattern>的 /add
<!-- 添加员工信息 -->
<servlet>
<servlet-name>addEmp</servlet-name>
<servlet-class>t07_循环查询添加员工信息.AddEmpServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>addEmp</servlet-name>
<url-pattern>/add</url-pattern>
</servlet-mapping>
然后找到 java包、类AddEmpServlet
(2)java类ListEmpServlet的关键代码,如下:
out.println("<a href='addEmp.html'>添加新员工</a>");
它会链接到文件:addEmp.html,地址为:http://localhost:8080/web03/addEmp.html
(3)java类AddEmpServlet的关键代码,如下:
out.println("<a href='show'>"+"查看雇员</a>");
这里的 show 对应配置文件 web.xml 的 /show
它的地址从 http://localhost:8080/web03/add 变为:http://localhost:8080/web03/show
<!-- 查询员工信息 -->
<servlet>
<servlet-name>showFormEmp</servlet-name>
<servlet-class>t07_循环查询添加员工信息.ListEmpServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>showFormEmp</servlet-name>
<url-pattern>/show</url-pattern>
</servlet-mapping>
然后找到 java包、类ListEmpServlet
2、复习2个快捷键
值得注意的是myEclipse和Android Studio都有一些快捷键,大家要熟悉,这里复习两个
(1)打开其所在计算机目录
(2)快捷拷贝myEclipse上的:项目名、包名、类名等纯文本
3、方便查看,新建 web03 项目
之前的 web02 项目已经演示了6个案例,配置文件和其他文件越来越多,
有起冲突的,同时也为了方便查看就新建一个 web03 项目,如下图:
有时候新建 web项目,有些耗时间,你可以直接拷贝 web02 进行删减:
1、右击 web02,copy,右击 web02,paste
2、然后会出现如下提示框,点击 OK 即可
如下图,都复制过来了,
然后你就可以删除 不要的案例包 和 web.xml等配置文件
如上右图,我这里把它进行重命名为 web03,
值得注意的是无论你是重命名项目,还是上面这样拷贝项目,
它的名字上下文都要对应,这个我以前有讲到,详细可参考博文:
java服务器开发-servlet:1_3、入门注意点,如:重命名、项目导入、常见问题 一、项目重命名