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

重定向

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

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

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,我为你提供一个简单的示例代码来实现JavaWeb登录注册功能、拦截器、数据库连接以及增删改查操作。请注意,以下代码仅供参考,你还需要根据具体需求和数据库配置进行适当修改。 1. 创建LoginServlet.java: ```java import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class LoginServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = request.getParameter("username"); String password = request.getParameter("password"); // 验证用户名和密码是否正确,这里省略具体实现 if (验证成功) { request.getSession().setAttribute("username", username); response.sendRedirect("home.jsp"); // 登录成功后重定向到首页或其他页面 } else { response.sendRedirect("login.jsp?error=1"); // 登录失败,重定向到登录页面并传递错误信息 } } } ``` 2. 创建RegisterServlet.java: ```java import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class RegisterServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = request.getParameter("username"); String password = request.getParameter("password"); // 将用户名和密码保存到数据库,这里省略具体实现 response.sendRedirect("login.jsp"); // 注册成功后重定向到登录页面 } } ``` 3. 创建拦截器(Interceptor)LoginInterceptor.java: ```java import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class LoginInterceptor implements Filter { public void init(FilterConfig filterConfig) throws ServletException { // 初始化操作 } public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) resp; String username = (String) request.getSession().getAttribute("username"); if (username == null) { response.sendRedirect("login.jsp"); // 未登录,重定向到登录页面 } else { chain.doFilter(request, response); // 已登录,继续执行后续操作 } } public void destroy() { // 销毁操作 } } ``` 4. 连接数据库和增删改查操作的示例代码: ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class DBHelper { private static final String url = "jdbc:mysql://localhost:3306/database_name"; private static final String username = "your_username"; private static final String password = "your_password"; public static Connection getConnection() throws SQLException { return DriverManager.getConnection(url, username, password); } public static void closeConnection(Connection conn) { if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } // 插入操作示例 public static void insertData(String username, String password) throws SQLException { Connection conn = null; PreparedStatement stmt = null; try { conn = getConnection(); String sql = "INSERT INTO user (username, password) VALUES (?, ?)"; stmt = conn.prepareStatement(sql); stmt.setString(1, username); stmt.setString(2, password); stmt.executeUpdate(); } finally { if (stmt != null) { stmt.close(); } closeConnection(conn); } } // 查询操作示例 public static void queryData() throws SQLException { Connection conn = null; PreparedStatement stmt = null; ResultSet rs = null; try { conn = getConnection(); String sql = "SELECT * FROM user"; stmt = conn.prepareStatement(sql); rs = stmt.executeQuery(); while (rs.next()) { String username = rs.getString("username"); String password = rs.getString("password"); System.out.println("Username: " + username + ", Password: " + password); } } finally { if (rs != null) { rs.close(); } if (stmt != null) { stmt.close(); } closeConnection(conn); } } // 其他的更新和删除操作类似,可以根据需要进行实现 } ``` 以上是一个简单的示例代码,你可以根据需求进行适当调整和扩展。希望对你有所帮助!如果还有其他问题,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值