java服务器端开发-servlet:3_4、Servlet使用jdbc访问数据库:重定向

目录

一、前言

二、重定向介绍

三、重定向操作

1、修改 AddEmpServlet.java 文件

2、效果说明

3、修改后,完整的 AddEmpServlet.java 文件

四、员工列表页:添加表头、某个字段居中

1、修改 ListEmpServlet.java 文件

2、效果说明

3、修改后,完整的 ListEmpServlet.java 文件

五、其他代码

1、配置文件 web.xml 

2、html 表单提交代码:addEmp.html


一、前言

上一篇文章我们介绍了循环查询添加员工信息,详见可参考博文:原创 java服务器端开发-servlet:3_3、Servlet使用jdbc访问数据库:循环查询添加员工信息 这篇文章我们将介绍一下重定向操作

二、重定向介绍

有关重定向,这篇博文有简单介绍:原创 java服务器端开发-servlet:3、Servlet使用jdbc访问数据库、mysql的简单使用、重定向

重定向需要注意的两个问题: 1)重定向之前,不能够调用out.close方法。  2)重定向之前,会先清空response上缓存的数据。

那么为什么呢?有关深入介绍以后再讲,我们先来看看代码操作

三、重定向操作

我们基于上篇文章的案例进行修改,复制 web03 重命名为 web04,

怎么复制重命名,上篇文章有讲到,这个就不多讲了。

1、修改 AddEmpServlet.java 文件

只需把 AddEmpServlet.java 文件修改一下即可,关键代码如下:

			/*
			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>");
			
			//重定向操作
			//上面注释代码,需要点击跳转。重定向不需要点击,自动跳转
			response.sendRedirect("show");
			//out.close();//不写此代码: 此流,容器会自动关掉。

2、效果说明

上面这样修改以后,点击“提交”,

插入成功 查看雇员” 这个界面,将直接自动跳转到员工信息列表页,无需点击“查看雇员”

3、修改后,完整的 AddEmpServlet.java 文件

package t08_循环查询添加员工信息_重定向;

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","你的mysql密码");
			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>");
			
			//重定向操作
			//上面注释代码,需要点击跳转。重定向不需要点击,自动跳转
			response.sendRedirect("show");
			//out.close();//不写此代码: 此流,容器会自动关掉。
			

		} 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) {
					
					}
			}
		}
		
		
		
	}
}

四、员工列表页:添加表头、某个字段居中

1、修改 ListEmpServlet.java 文件

为了方便查看,我们可以添加一个表头,也可以尝试让 某个字段居中,修改的关键代码如下:

			//使用查询得到的结果,生成一个表格
			out.println("<table border='1' width='60%' " +
					"cellpadding='0' cellspacing='0'>");
//			out.println("<tr><td>ID</td><td>姓名</td>" +
//					"<td>薪水</td><td>年龄</td></tr>");
			
			//表头
			out.println("<caption>"+"员工信息表"+"</caption>");
			//id 在中间,其它可类似
			out.println("<tr>" + "<td align='center'>ID</td>" + "<td>姓名</td>" + "<td>薪水</td>"
					+ "<td>年龄</td></tr>");

2、效果说明

即效果如下:相对之前加了个表头,ID 字段居中了

3、修改后,完整的 ListEmpServlet.java 文件

package t08_循环查询添加员工信息_重定向;

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/web04/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>");
			
			//表头
			out.println("<caption>"+"员工信息表"+"</caption>");
			//id 在中间,其它可类似
			out.println("<tr>" + "<td align='center'>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) {
				}
			}
		}
	}
	
}

五、其他代码

其他代码其实没做什么修改,只是改了改名字对应上就行了,为了方便查看参照直接贴代码了

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>web04</display-name>
	
	<!-- t08_循环查询添加员工信息_重定向 -->
	<!-- 查询员工信息 -->
	<servlet>
		<servlet-name>showFormEmp</servlet-name>
		<servlet-class>t08_循环查询添加员工信息_重定向.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>t08_循环查询添加员工信息_重定向.AddEmpServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>addEmp</servlet-name>
		<url-pattern>/add</url-pattern>
	</servlet-mapping>
	
</web-app>




2、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>

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

被开发耽误的大厨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值