您的位置:首页 > 编程语言 > Java开发

JAVAWEB之servlet重定向+一个用servlet对员工增删改查的操作例子

2016-11-16 22:59 459 查看

重定向

什么是重定向

服务器通知浏览器向一个新的地址发送请求

注: 可以发送一个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。要努力修改,而且并没有对传入的参数做过滤啊什么的。只是个简单的练习。

学习到了很多~很喜欢写代码。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: