Java Web开发中,采用MVC模式的时候,在控制器完成模型的调用之后会选择界面对用户响应,用常有两种方式:
1、通过response对象的sendRedirect方法。
2、通过RequestDispatcher对象的forward方法。
例如要跳转登录界面login.jsp,可以使用下面的两种方式:
1、使用response
response.sendRedirect("login.jsp");
2、使用RequestDispatcher
RequestDispatcher rd = request.getRequestDispatcher("login.jsp");
rd.forward(request,response);
这两种方式有什么区别?什么情况下应该使用哪一种方式呢?
首先介绍两者的区别。
第一点区别,过程不同:第一种方式相当于浏览器接收到了响应之后又向服务器发送了一次请求,所以相当于两次请求。第二种方式相当于方法调用,在执行当前文件的过程中转向执行目标文件,两个文件(当前文件和目标文件)属于同一次请求,最本质的特点就是两次请求共享了reques对象和response对象。
第二点区别,地址栏不同:第一种方式下用户在浏览器地址栏中看到的是目标文件的地址,第二种方式下用户在浏览器地址栏中看到的是当前文件的地址。这一点也非常重要,后面介绍。
在使用的时候具体应如何选择呢?
如果两个文件的关系非常密切,则应该使用RequestDispatcher,如果两个文件没有直接的关联关系,则应该使用response的sendRedirect方法。什么样的关系算是关系密切,什么样的关系算是没有直接的关联关系呢?例如查询的控制器和查询的结果界面之间就应该算是关系密切,因为查询控制器处理完之后肯定要转向查询结果界面。再例如添加信息的控制器和查询控制器之间的关系就是没有直接关系,通常在添加信息之后会跳转到列表界面的控制器然后再跳转到列表界面,修改信息或者删除信息之后也可能会跳转到列表界面的控制器然后再跳转到列表界面。
下面是两个比较特殊的应用:
1、如果希望通过request把当前在控制器中获取的信息传递给目标文件(通过request.setAttribute和request.getAttribute),这时候应该选择RequestDispatcher。因为需要当前文件和目标文件共享request对象。通常用于查询。
2、对数据进行修改(包括删除和添加操作)的功能的控制器与之后的界面或者控制器应该采用response.sendRedirect方式。如果采用了RequestDiapatcher的forward方式,会产生严重错误。因为地址栏是修改信息的控制器,如果用户在刷新的时候,会重新发送一次对数据进行修改的请求,这不是用户想看到的结果。所以有同学在做添加功能的时候,每刷新一次就添加一条。
如何采用第二种方式,如何传递数据呢?有两种方式:
1、可以选择session,但是在第二个文件中一定要删除。
2、可以在请求字符串中编写,例如login.jsp?info="用户不存在!
为什么response.sendRedirect()不跳转,在其后加上return;就能够跳转了呢
response.sendRedirect是通过浏览器来做转向的,所以只有在整个页面处理完成后,才会有实际的动作。
分享到:
相关推荐
### jsp response.sendRedirect不跳转的原因分析及解决 #### 一、问题背景 在进行Web应用开发的过程中,经常需要使用到服务器端重定向的技术。在Java Server Pages (JSP) 技术中,`response.sendRedirect()` 是一...
### JSP中利用`response.sendRedirect`与Cookie进行参数传递 #### 概述 在Web开发中,特别是使用Java Server Pages(JSP)进行网站构建时,数据的传递是至关重要的。其中,`response.sendRedirect`方法和Cookie...
jsp response.sendRedirect()用法详解 jsp response.sendRedirect()函数是JSP中一种常用的重定向方法,它可以将用户重定向到指定的页面。下面我们将详细介绍jsp response.sendRedirect()函数的用法和实现原理。 ...
对于如何进行页面跳转以及如何解决跳转中出现的问题,response.sendRedirect()是其中一种常用的方法。然而,在实际使用时,开发者可能会遇到response.sendRedirect()不跳转的情况。以下是对这个问题的原因分析及解决...
response.sendRedirect(request.getContextPath()+"/admin/login.jsp"); } public void register(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //...
sendRedirect()和forward()方法的区别 sendRedirect()和forward()方法都是Servlet编程中常用的方法,它们可以将客户端的请求重定向或转发到其他的资源,如Servlet、JSP页面或HTML文件中。但是,这两个方法之间存在...
JSP 中有五种跳转方式,包括 RequestDispatcher.forward()、response.sendRedirect()、jsp:forward、RequestDispatcher.include() 和 HttpServletResponse.sendRedirect()。下面我们将详细介绍这五种跳转方式的区别...
* 不能在 response.sendRedirect() 之前使用 out.flush(),否则将抛出 java.lang.IllegalStateException 异常。 * 跳转后,浏览器地址栏将发生变化。 * 如果跳转到不同主机下,response.sendRedirect() 之后的语句将...
与客户端跳转不同,服务器端跳转使用`<jsp:forward>`标签或`response.sendRedirect()`方法(但参数不同)。服务器端跳转不会在浏览器的地址栏显示新的URL,而且可以携带请求属性。`<jsp:forward>`是立即跳转,而`...
本文将详细介绍几种实现这一功能的方法,并针对`response.sendRedirect()`在使用过程中遇到的一些常见问题给出解决方案。 #### 一、问题背景 在使用`response.sendRedirect()`进行页面跳转时,需要注意该方法调用...
用户管理系统。语言JAVA public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, ... response.sendRedirect(request.getContextPath()+"/manager.jsp"); }
使用 response.sendRedirect 方法可以将请求重定向到另一个 JSP 页面。例如: ```jsp response.sendRedirect("test2.jsp"); %> ``` 3. 使用 forward 标签 使用 forward 标签可以将请求转发到另一个 JSP 页面。...
response.sendRedirect("http://example.com/new-page"); ``` #### 四、构建Excel电子表格 当需要通过Web应用生成并发送Excel电子表格时,可以设置合适的`Content-Type`报头,并通过`OutputStream`将Excel文件的...
response.sendRedirect("jspPages/login.jsp"); }else{ HttpSession session = request.getSession(); session.setAttribute("userName", name); session.setAttribute("pwd", pwd); session.setAttribute(...
在Servlet中,有两种主要的跳转方式:`RequestDispatcher.forward()`和`ServletResponse.sendRedirect()`。这两种方法在处理客户端请求时有不同的行为和应用场景。 1. `RequestDispatcher.forward()` - `forward()...
与 `RequestDispatcher.forward()` 不同,`response.sendRedirect()` 是一种客户端的跳转方式。这意味着它可以在用户的浏览器端完成跳转操作,并且可以携带参数进行传递。例如,从一个页面传递参数到另一个页面。 *...
response.sendRedirect("/newLocation"); ``` 2. 转发:`RequestDispatcher`的`forward(ServletRequest request, ServletResponse response)`方法可以在服务器端将请求转发到另一个资源。这不会改变客户端的URL。 ``...
response.sendRedirect(response.encodeRedirectURL(finalUrl)); 改为了 StringBuffer str = new StringBuffer(); str.append("{"); str.append("status: \"true\","); str.append("url: \""); str.append...
这里主要介绍五种常见的JSP页面跳转方法,包括RequestDispatcher.forward()、response.sendRedirect()、、Meta标签以及JavaScript的location对象。 1. RequestDispatcher.forward() 这种方法在服务器端执行,它允许...