Servlet总结十四:转发与重定向

Servlet总结十四:转发与重定向1、跳转的方式转发: forward重定向: redirect2、转发和重定向代码怎么完成1、转发//请求转发到/b对应的Servletrequ

大家好,欢迎来到IT知识分享网。Servlet总结十四:转发与重定向"

1、跳转的方式

转发: forward

重定向: redirect

2、转发和重定向代码怎么完成

1、转发
//请求转发到/b对应的Servlet
request.getRequestDispatcher("/b").forward(request,response);

2、重定向
response.sendRedirect(request.getContextPath() + "/b");

3、转发和重定向的区别?

相同点:都可以完成资源的跳转

不同点:

转发是request对象触发的,服务器内部进行转发

重定向是response对象触发的,要将重定向的路径相应给浏览器

转发是一次请求,浏览器地址栏上地址不变

重定向是两次请求,浏览器地址栏上的地址发生变化

重定向路径需要加项目名(webapp跟路径web目录)

转发是在本项目内部完成资源的跳转

重定向可以完成跨app跳转,例如可以跳转到https://www.baidu.com

4、什么时候采用转发,什么时候采用重定向

1、大部分情况下都使用重定向

2、若想完成跨app跳转,必须采用重定向

若在上一个资源中向request范围中存储了数据,希望在下一个资源中从request范围中取出,必须使用转发

3、重定向可以解决浏览器的刷新问题

5、重定向解决页面刷新问题

public class Save extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
        throws ServletException, IOException {

        //解决中文乱码
        request.setCharacterEncoding("UTF-8");

        //获取表单数据
        String usercode = request.getParameter("usercode");
        String username = request.getParameter("username");

        Connection conn = null;
        PreparedStatement ps = null;
        int row = 0;

        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/javaee", "root", "admin");
            conn.setAutoCommit(false);
            ps = conn.prepareStatement("insert into t_user(usercode,username) value(?,?)");
            ps.setString(1,usercode);
            ps.setString(2,username);
            row = ps.executeUpdate();
            conn.commit();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException throwables) {
            //如果发生异常,如果conn!=null,回滚数据
            if(conn != null) {
                try {
                    conn.rollback();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            throwables.printStackTrace();
        } finally {
            //省略关闭
        }

        if(row ==1) {
            //执行成功,跳转到成功页面

            //1. 转发
            //浏览器只进行一次请求,如果此时浏览器进行刷新,浏览器刷新的是最后一次请求,即提交表单的请求,
            //此时多次刷新浏览器,那么就会请求多次,就会执行多次Servlet,
            //就会多次连接数据库插入数据,导致数据重复插入
            //request.getRequestDispatcher("/success.html").forward(request,response);

            //2. 重定向
            //服务器返回重定向的地址(success.html),浏览器就会请求新的地址,
            //一共有两次请求:提交表单的请求和重定向的请求
            //此时如果浏览器多次刷新,那么请求的也是重定向的success.html静态页面,
            //不会因为刷新而导致多次提交表单
            response.sendRedirect(request.getContextPath() + "/success.html");
        }
    }
}

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/45255.html

(0)
上一篇 2024-03-23 18:45
下一篇 2024-04-24 07:19

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信