重定向
什么是重定向
服务器通知浏览器向一个新的地址发送请求
注: 可以发送一个302状态码和一个location消息头
该消息头包含了一个地址。这个地址称为重定向地址。浏览器收到之后,会立即向重定向地址发请求
2、如何重定向
response.sendRedirect(String url);
注: url就是重定向地址。
重定向之后,容器会清空response对象中保存的数据
3、特点
重定向地址是任意的。
重定向之后浏览器地址栏的地址会发送改变
只是在原来自己点击跳转员工列表的改成了
response.sendRedirect("emplist");
自动就跳转到emplist页面了。
重定向后的java代码还会继续执行!
每次的out.println并没有发生过去,而是写到了response里去
当然也可以发生一段js代码定时器,几秒后向服务器发送请求。
就可以实现添加完成后等待几s在跳转到员工列表
实现可以删除员工
1、id传给服务器
2、按着id删除
3、重定向当前页面
然后再实现修改,点击修改,带着id参数到一个页面,用这个id进行查询返回有详细信息的form表单,然后可以修改表单的信息,除了id。然后提交给一个servlet。update更新。再次跳转到员工列表
del.java:删除
EmpDemo.java:添加员工
Emplist:列出员工列表
LoadEmpServlet:返回一个根据id返回的form表单
Modify.java:真正修改的,LoadEmpServlet提交给这个
代码:
del.java
package web;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.DriverManager;
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;
public class del extends HttpServlet {
public void service(HttpServletRequest request,HttpServletResponse response)throws
ServletException,IOException{
response.setContentType("text/html;charset=utf-8");
int id = Integer.parseInt(request.getParameter("id"));
PrintWriter out = response.getWriter();
java.sql.Connection conn = null;
java.sql.PreparedStatement prep = null;
try {
//加载驱动
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jsd1507db", "root", "root");
prep =conn.prepareStatement("delete from emp where id=?");
prep.setInt(1, id);
prep.executeUpdate();
//依据查询到的数据生成表格
response.sendRedirect("emplist");
} catch (SQLException e) {
// TODO Auto-generated catch block
/*
* 1、记日志
*/
e.printStackTrace();
/*
* 1、看异常是否能够恢复,如果能够恢复则立即恢复,如果不能够恢复
* (比如,数据库服务暂停,网络中断等,这样的异常一般称之为系统异常)
* 则提示用户稍后重试
*/
out.println("稍后重试");
e.printStackTrace();
}
catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(conn!=null){
}
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
out.println("出现错误");
}
}//finally
}
}
EmpDemo.java
package web;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.DriverManager;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;
public class EmpDemo extends HttpServlet {
public void service(HttpServletRequest request,HttpServletResponse response)throws
ServletException,IOException{
request.setCharacterEncoding("GBK");
String name = request.getParameter("name");
String salary = request.getParameter("salary");
String age = request.getParameter("age");
/*
* 对请求参数一定要做合法性的检查
*/
String str = "<h1>"+"name:"+name+"<h1><br>"+"<h1>"+"salary"+salary+"<h1><br>"+"age"+age;
//设置服务器返回的数据类型及编码
response.setContentType("text/html;charset=GBK");
//获得一个输出流,把内容发送给浏览器
PrintWriter out = response.getWriter();
out.println(str);
//然后将员工信息插入到数据库
java.sql.Connection conn = null;
java.sql.PreparedStatement prep = null;
try {
//加载驱动
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jsd1507db", "root", "root");
prep = conn.prepareStatement("INSERT INTO emp (name,salary,age) VALUES(?,?,?)");
prep.setString(1,name);
prep.setDouble(2, Double.parseDouble(salary));
prep.setInt(3, Integer.parseInt(age));
prep.executeUpdate();
response.sendRedirect("emplist");
} catch (SQLException e) {
// TODO Auto-generated catch block
/*
* 1、记日志
*/
e.printStackTrace();
/*
* 1、看异常是否能够恢复,如果能够恢复则立即恢复,如果不能够恢复
* (比如,数据库服务暂停,网络中断等,这样的异常一般称之为系统异常)
* 则提示用户稍后重试
*/
out.println("稍后重试");
}
catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
out.println("出现错误");
}
}
}
out.close();
}
}
Emplist.java
package web;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
public class Emplist extends HttpServlet {
public void service(ServletRequest request,ServletResponse response)throws
ServletException,IOException{
//设置服务器返回的数据类型及编码
response.setContentType("text/html;charset=GBK");
//获得一个输出流,把内容发送给浏览器
PrintWriter out = response.getWriter();
//然后将员工信息插入到数据库
java.sql.Connection conn = null;
java.sql.PreparedStatement prep = null;
ResultSet rst = null;
try {
//加载驱动
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jsd1507db", "root", "root");
prep =conn.prepareStatement("select * from emp");
rst = prep.executeQuery();
out.println("查询正常~~~");
//依据查询到的数据生成表格
out.println("<table border='1' width='60%'>");
out.println("<tr><td>ID</td><td>姓名</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>" +
"<td><a href='del?id="+id+"'>删除</a> <a href='load?id="+id+"'>修改</a></td></tr>");
}
out.println("</table><br/>");
out.println("<a href ='emp.html'>添加员工</a>");
} catch (SQLException e) {
// TODO Auto-generated catch block
/*
* 1、记日志
*/
e.printStackTrace();
/*
* 1、看异常是否能够恢复,如果能够恢复则立即恢复,如果不能够恢复
* (比如,数据库服务暂停,网络中断等,这样的异常一般称之为系统异常)
* 则提示用户稍后重试
*/
out.println("稍后重试");
e.printStackTrace();
}
catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(conn!=null){
}
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
out.println("出现错误");
}
}//finally
}
}
LoadEmpServlet.java
package web;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.DriverManager;
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;
public class LoadEmpServlet extends HttpServlet{
public void service(HttpServletRequest request,HttpServletResponse response)throws
ServletException,IOException{
response.setContentType("text/html;charset=utf-8");
int id = Integer.parseInt(request.getParameter("id"));
PrintWriter out = response.getWriter();
//读取要修改的员工的id
java.sql.Connection conn = null;
java.sql.PreparedStatement prep = null;
ResultSet rst = null;
try {
//加载驱动
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jsd1507db", "root", "root");
prep =conn.prepareStatement("select * from emp where id=?");
prep.setInt(1, id);
rst = prep.executeQuery();
//依据查询到的员工信息生成一个修改页面
if(rst.next()){
String name = rst.getString("name");
double salary = rst.getDouble("salary");
int age = rst.getInt("age");
out.println("<form action='modify'method='post' >");
out.println("ID:"+id+"<br>");
out.println("姓名:"+"<input name='name' value="+name+">");
out.println("工资:"+"<input name='salary' value="+salary+">");
out.println("年龄:"+"<input name='age' value="+age+">");
//把id参数也给传过去,所以做了一个隐藏的name=id的,只有有写name的才会表单提交
out.println("<input type='hidden' name='id' value='"+id+"'>");
out.println("<input type='submit' value='ok'>");
out.println("<form>");
}
//
} catch (SQLException e) {
// TODO Auto-generated catch block
/*
* 1、记日志
*/
e.printStackTrace();
/*
* 1、看异常是否能够恢复,如果能够恢复则立即恢复,如果不能够恢复
* (比如,数据库服务暂停,网络中断等,这样的异常一般称之为系统异常)
* 则提示用户稍后重试
*/
out.println("稍后重试");
e.printStackTrace();
}
catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(conn!=null){
}
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
out.println("出现错误");
}
}//finally
}
}
Modify.java
package web;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.DriverManager;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Modify extends HttpServlet{
public void service(HttpServletRequest request,HttpServletResponse response)throws
ServletException,IOException{
response.setContentType("text/html;charset=utf-8");
int id = Integer.parseInt(request.getParameter("id"));
String name = request.getParameter("name");
double salary = Double.parseDouble(request.getParameter("salary"));
int age = Integer.parseInt(request.getParameter("age"));
PrintWriter out = response.getWriter();
//对其进行更新
java.sql.Connection conn = null;
java.sql.PreparedStatement prep = null;
try {
//加载驱动
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jsd1507db", "root", "root");
prep =conn.prepareStatement("update emp set name=? ,salary=?,age=? where id=?");
prep.setString(1, name);
prep.setDouble(2, salary);
prep.setInt(3, age);
prep.setInt(4, id);
System.out.println(id);
System.out.println(name);
prep.executeUpdate();
//依据查询到的数据生成表格
response.sendRedirect("emplist");
} catch (SQLException e) {
// TODO Auto-generated catch block
/*
* 1、记日志
*/
e.printStackTrace();
/*
* 1、看异常是否能够恢复,如果能够恢复则立即恢复,如果不能够恢复
* (比如,数据库服务暂停,网络中断等,这样的异常一般称之为系统异常)
* 则提示用户稍后重试
*/
out.println("稍后重试");
e.printStackTrace();
}
catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(conn!=null){
}
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
out.println("出现错误");
}
}//finally
}
}
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">
<servlet>
<servlet-name>emp</servlet-name>
<!-- 完整的类名-->
<servlet-class>web.EmpDemo</servlet-class>
</servlet>
<servlet>
<servlet-name>emplist</servlet-name>
<servlet-class>web.Emplist</servlet-class>
</servlet>
<servlet>
<servlet-name>empdelete</servlet-name>
<servlet-class>web.del</servlet-class>
</servlet>
<servlet>
<servlet-name>empload</servlet-name>
<servlet-class>web.LoadEmpServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>empupdate</servlet-name>
<servlet-class>web.Modify</servlet-class>
</servlet>
<servlet-mapping>
<!-- 两个name要一致!!! -->
<servlet-name>emp</servlet-name>
<!-- 以/开头 -->
<url-pattern>/emp</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>emplist</servlet-name>
<url-pattern>/emplist</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>empdelete</servlet-name>
<url-pattern>/del</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>empload</servlet-name>
<url-pattern>/load</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>empupdate</servlet-name>
<url-pattern>/modify</url-pattern>
</servlet-mapping>
</web-app>
效果
添加员工
添加完,直接302跳转到员工列表,看到增加的员工
有修改和删除功能
修改前:
修改,直接更改,再次表单提交给新的servlet
修改后
删除:
主要是练习servlet与jdbc操作。
首先创建了数据库和表的。
还有一些bug。要努力修改,而且并没有对传入的参数做过滤啊什么的。只是个简单的练习。
学习到了很多~很喜欢写代码。