JavaWeb程序设计学习笔记整理(5)-删除员工

二、删除员工的功能

在这里插入图片描述

创建一个servlet

名为EmpDeleteServlet,以下是属性修改效果图
在这里插入图片描述

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>

	<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>
</web-app>

测试doGet、doPost、service方法的区别

代码部分:

EmpDeleteServlet.java
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 EmpDeleteServlet extends HttpServlet {

	//浏览器端发送的是get请求方式 -- doGet和service方法
	//浏览器端发送的是post请求方式 -- doPost和service方法
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		System.out.println("测试doGet...");
	}

	//do Post 快捷键 Alt + /
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		System.out.println("测试doPost...");
	}
	
	//service 快捷键 Alt + /
	protected void service(HttpServletRequest arg0, HttpServletResponse arg1)
			throws ServletException, IOException {
		System.out.println("测试service...");
	}
}
registe.html
<!-- 版本信息 -->
<!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>Insert title here</title>
	</head>
	<body>
		<!-- action="" 表示点击提交按钮此表单会向哪个servlet发送请求,双引号中写哪一个url-pattern地址,
		此表单就会向哪一个servlet发送请求。【访问页面,点击提交,成功访问到RegisteServlet】-->
		<!-- 默认浏览器地址栏中会显示数据,method="get";而不显示则修改为,method="post" -->
		<form action="delete" method="post">
			用户名:<input type="text" name="username"/>
			<br/>
			密码:<input type="password" name="pwd"/>
			<br/>
			兴趣爱好:读书<input type="checkbox" name="love" value="readbook"/>
				        写字<input type="checkbox" name="love" value="write"/>
				        打球<input type="checkbox" name="love" value="playball"/>
				        上网<input type="checkbox" name="love" value="online"/>
			<br/>
			<input type="submit" name="smt" value="提交"/>
		</form>
		
		<!-- 测试超链接的请求方式 -->
		<a href="http://www.baidu.com">你好</a>
		<br/>
		<!-- 没有传递参数,username接收为空,异常为NullPointerException -->
		<!-- <a href="registe">hello</a> -->
		<a href="ho">hello</a>
		<br/>
		<a href="registe?username=ls&pwd=123&love=ds&love=xz&id=1001">点我可访问RegisteServlet</a>
	</body>
</html>

service方法优先执行

第一步:

registe.html中修改代码:
在这里插入图片描述

第二步:

若在浏览器中输入http://localhost:8080/servlettest/registe.html,则如图下显示:
在这里插入图片描述
在这里插入图片描述

第三步:

点击提交,在控制台内看到如图所示:
在这里插入图片描述
上述做法为EmpDeleteServlet.java代码不进行注释,所造成的结果
在get请求方式两种方法都支持,优先执行service方法

doGet方法

EmpDeleteServlet.java代码内部注释掉service方法
再点击提交,故控制台内如图显示:
在这里插入图片描述

doPost方法

registe.html中修改代码:
在这里插入图片描述
EmpDeleteServlet.java代码内部注释掉servicedoGet方法
提交,故控制台内如图显示:
在这里插入图片描述

service方法

registe.html中修改代码为getpost使用service方法都可以,效果图如下:

post

在这里插入图片描述
控制台内显示:
在这里插入图片描述

get

在这里插入图片描述
控制台内显示:
在这里插入图片描述

针对上述问题的讨论,我们选用doGet方法,其他方法注释掉,原因如下:

在浏览器端向服务器端发送请求的几种方式:
1)浏览器地址栏输入地址回车
2)点击超链接
3)表单 --> get post
4)普通按钮 button + js -->
具体上述几种方式用法可点击本处

选用点击超链接的方式,而其为get请求方式,故删除请求方式使用doGet请求方式

通过EmpDeleteServlet去连接数据库,进行删除操作

第一步:

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,则如图下显示:
在这里插入图片描述

第二步:

测试数据库mysql是否连接成功
代码如下:

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 EmpDeleteServlet extends HttpServlet {

	//浏览器端发送的是get请求方式 -- doGet和service方法
	//浏览器端发送的是post请求方式 -- doPost和service方法
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//1)通过EmpDeleteServlet去连接数据库,进行删除 -- jdbc技术
		try {
			//① 注册加载驱动
			Class.forName("com.mysql.jdbc.Driver");
			//② 获得数据库的连接
			//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语句
			//④ 执行sql语句
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		//2)通过EmpDeleteServlet,将删除成功后的结果在页面上显示出来
		
		//System.out.println("测试doGet...");
	}

	//do Post 快捷键 Alt + /
	/*
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		System.out.println("测试doPost...");
	}
	*/
	
	//service 快捷键 Alt + /
	/*
	protected void service(HttpServletRequest arg0, HttpServletResponse arg1)
			throws ServletException, IOException {
		System.out.println("测试service...");
	}
	*/
}

若在浏览器中输入http://localhost:8080/servlettest/list,则如图下显示:
在这里插入图片描述
点击删除,出现此形式:
在这里插入图片描述
控制台显示为这种格式的,说明连接成功:
在这里插入图片描述

第三步:

EmpDeleteServlet.java中修改代码:
在这里插入图片描述
若在浏览器中输入http://localhost:8080/servlettest/list,则如图下显示:
在这里插入图片描述
每把鼠标移动到编号1 2 3 4对应的删除,左下角显示为:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第四步:

EmpDeleteServlet.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 EmpDeleteServlet extends HttpServlet {

	//浏览器端发送的是get请求方式 -- doGet和service方法
	//浏览器端发送的是post请求方式 -- doPost和service方法
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//通过request接收删除超链接请求中的参数值localhost:8080/servlettest/delete?id=1/2/3..
		String s = request.getParameter("id");
		System.out.println("参数值为:" + s);
		
		//1)通过EmpDeleteServlet去连接数据库,进行删除 -- jdbc技术
		try {
			//① 注册加载驱动
			Class.forName("com.mysql.jdbc.Driver");
			//② 获得数据库的连接
			//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 = "delete from emp where id=?";
			PreparedStatement prep = con.prepareStatement(sql);
			//Integer.parseInt("3") --> 3 将字符串类型转换成int类型
			prep.setInt(1, Integer.parseInt(s));
			//④ 执行sql语句
			prep.executeUpdate(); //删除、修改和插入都调用executeUpdate方法
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		//2)通过EmpDeleteServlet,将删除成功后的结果在页面上显示出来
		
		//System.out.println("测试doGet...");
	}

	//do Post 快捷键 Alt + /
	/*
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		System.out.println("测试doPost...");
	}
	*/
	
	//service 快捷键 Alt + /
	/*
	protected void service(HttpServletRequest arg0, HttpServletResponse arg1)
			throws ServletException, IOException {
		System.out.println("测试service...");
	}
	*/
}

其中存在bug,setInt爆红,原因接收的值为字符串类型,效果图如下:
在这里插入图片描述
解决方法:
在这里插入图片描述
在这里插入图片描述
在控制台显示:
在这里插入图片描述

第五步:

测试运行,若在浏览器中输入http://localhost:8080/servlettest/list,则如图下显示:
在这里插入图片描述
点击编号为3对应的删除,地址跳转结果为:
在这里插入图片描述
空白
在这里插入图片描述
需手动输入http://localhost:8080/servlettest/list,则如图下显示:
在这里插入图片描述
在这里插入图片描述
查询mysql数据库,对应的编号3员工删除成功,效果图如下:
在这里插入图片描述

通过EmpDeleteServlet,将删除成功后的结果在页面中显示出来

代码部分:

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 EmpDeleteServlet extends HttpServlet {

	//浏览器端发送的是get请求方式 -- doGet和service方法
	//浏览器端发送的是post请求方式 -- doPost和service方法
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//通过request接收删除超链接请求中的参数值localhost:8080/servlettest/delete?id=1/2/3..
		String s = request.getParameter("id");
		System.out.println("参数值为:" + s);
		
		//1)通过EmpDeleteServlet去连接数据库,进行删除 -- jdbc技术
		try {
			//① 注册加载驱动
			Class.forName("com.mysql.jdbc.Driver");
			//② 获得数据库的连接
			//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 = "delete from emp where id=?";
			PreparedStatement prep = con.prepareStatement(sql);
			//Integer.parseInt("3") --> 3 将字符串类型转换成int类型
			prep.setInt(1, Integer.parseInt(s));
			//④ 执行sql语句
			prep.executeUpdate(); //删除、修改和插入都调用executeUpdate方法
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		//2)通过EmpDeleteServlet,将删除成功后的结果在页面上显示出来
		//删除成功以后,只需要重新回到http://localhost:8080/servlettest/list地址就可以了
		//重定向:当事情执行完毕以后,重新回到某一个地址
		//response.sendRedirect("url-pattern的地址"),根据url-pattern的地址来访问哪个servlet
		response.sendRedirect("list");
		
		//System.out.println("测试doGet...");
	}

	//do Post 快捷键 Alt + /
	/*
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		System.out.println("测试doPost...");
	}
	*/
	
	//service 快捷键 Alt + /
	/*
	protected void service(HttpServletRequest arg0, HttpServletResponse arg1)
			throws ServletException, IOException {
		System.out.println("测试service...");
	}
	*/
}
效果图:

把对应编号1 2 4都删除,显示结果为:
注意:点击删除成功以后,自动回到http://localhost:8080/servlettest/list地址
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值