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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_28295425/article/details/53192636

重定向

什么是重定向
服务器通知浏览器向一个新的地址发送请求
注: 可以发送一个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>&nbsp;&nbsp;<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。要努力修改,而且并没有对传入的参数做过滤啊什么的。只是个简单的练习。

学习到了很多~很喜欢写代码。

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页