`

请求转发servlet不跳转发

阅读更多

  在前台extjs写的登陆页面,在点击表单提交登录时出现后台页面不跳转现象,各种方法都尝试了

还是没能解决:

  原因方法1:在response.sendRedirect()方法后添加return可以实现跳转,添加该语句的原因是因为跳

转语句后面还有未处理的逻辑需要添加return语句返回;或者因为被请求的servlet有同时被其他的请求

访问,即同一个servlet需要处理多个请求造成了该servlet执行了多次(其他业务逻辑同时执行),且请求转发是其中一次。如下图:

 

   原因方法2:ajax请求到后台的servlet类中,设置页面跳转不生效 ajax请求到后台的servlet类中,直接设置页面跳转req.getRequestDispatcher(path).forward(req, resp);(redirect,forward)或resp.sendRedirect(path);从ajax的应用上去解释,使用ajax就是为了页面不刷新的状态下,获取后台数据,当然不能跳转。如果ajax方式要跳转可以在其回调函数中去处理跳转逻辑。后台的servlet类中想要跳转页面,只能通过非ajax方式(表单的get或post方式提交)。为此可以通过下面js直接控制的方法document.location.href="xx.jsp"

  原因方法3:请求转发的路径可能写错了,使用相对路径或绝对路径一定要看看是否能访问到。

   最终解决方法:

   原因分析:FormPanel数据提交包括两种方式,一种是使用BasicForm的submit方式进行ajax的异步提交,另一种是使用原始的HTML表单的提交方式。异步提交如下:

  1. form.getForm().submit({  
  2.     url: 'xx.do',  
  3.     waitTitle : '请等待' ,  
  4.     waitMsg: '正在提交中...',  
  5.     success:function(form,action){  
  6.     Ext.Msg.alert('提示','保存成功');  
  7.     },  
  8.     failure:function(form,action){  
  9.     Ext.Msg.alert('提示','保存失败!');  
  10.     }  
  11. });  

同步提交如下:

new Ext.form.FormPanel({  
          submit: function() {  
            form.getForm().getEl().dom.action = 'xxx.do' ;  
            form.getForm().getEl().dom.submit();  
        },  

  Extjs版本中BasicForm中有一个属性:standardSubmit : Boolean;如果此项设置为true,将使用标准的HTML表单提交代替XHR(Ajax)方式的提交。 (默认值为 false)在FormPanel把standardSubmit设置为true,就可以用同步提交的方式。

 如果上述方法不可行,采用如下方法可以试一试:

	{	
			text:'登陆',
			style:'margin-left:60px;margin-top:10px',
			handler:function()
			{
				if(!formpanel.getForm().isValid()) return;
//				formpanel.getForm().submit();
				Ext.Ajax.request({
				    	url : 'UserLoginServlet.do',
				    	params : {username:Ext.getCmp("userNameId").getValue()},
				    	scope : true,
				    	method: 'POST',
				    	async: false ,
				    	success: function(response, opts) {  
            				if(response.responseText=="true"){
            					location.href='default.jsp'
				    		  } else if(response.responseText=="false"){
				    			  Ext.Msg.alert("提示","登陆失败");
				    		  }
				    	}, //请求成功的回调函数   
            			failure: function() { Ext.Msg.alert("提示","请求数据库失败请重试!"); }  // 请求失败的回调函数
				});//同步加载
			}
		},

 Servlet部分代码

if(action.equals("/UserLoginServlet")) {
			req.getSession().setAttribute("userName", req.getParameter("username"));
			resp.getWriter().write("true");
//			req.getRequestDispatcher("default.jsp").forward(req,resp);
			resp.getWriter().flush();
			resp.getWriter().close();
			return;
		} 

 上述是采用同步请求方式:见http://lovezehui.iteye.com/admin/blogs/2065387

 

  • 大小: 23.1 KB
分享到:
评论
1 楼 xiaoyao9184 2015-12-22  
见http://hejiajunsh.iteye.com/blog/1773304,xhr异步是ajax基础对象,现在的表单提交全部交由xhr处理。
xhr获取返回的html load到浏览器对应你说的跳转。
JQ或者Ext的ajax对象/方法,只是通过xhr获取到返回的数据(可能是html),并没有加载到浏览器,所以没有“跳转”。
forward返回的就是html,需要手动load到浏览器。
redirect返回的是HTTP 302跳转,需要手动模拟浏览器二次请求后,再load到浏览器。
所以你想实现ajax跳转,你就需要从xhr对象中取得http response中的html,转为DOM,load到windwos里面

相关推荐

    servlet中实现请求转发,用户登录

    本文将详细讲解如何在Servlet中实现请求转发以及用户登录验证。 首先,我们来理解请求转发(Request Forward)。在Servlet中,请求转发是一种在服务器内部将一个请求从一个资源传递到另一个资源的技术。这种方式是...

    servlet请求转发、重定向、包含

    Servlet请求转发、重定向和包含是Servlet中处理客户端请求的重要技术,它们都涉及到如何有效地管理用户请求和页面跳转,但各自有不同的特性和应用场景。 1. **请求转发(Request Forward)** - 请求转发是在服务器...

    Java中Request请求转发详解

    在RequestDemo6代码中,我们没有使用RequestDispatcher,因为RequestDemo6只是一个简单的Servlet,它不需要将请求转发到其他页面。 在浏览器中访问/requestDemo5接口时,控制台输出了"requestDemo5进来了......post...

    Servlet转发与重定向

    该方法只能将请求转发给同一个 WEB 应用中的组件,不可以重定向到当前应用程序中的其他资源,也不能重定向到同一个站点上的其他应用程序中的资源。 调用 RequestDispatcher.forward 方法的请求转发过程结束后,...

    一个servlet,请求转发,过滤

    在Java Web开发中,Servlet、请求转发和过滤器是核心概念,它们构成了Web应用程序的基础架构。下面将分别详细解释这三个知识点,并结合 `${}` 符号的使用进行深入探讨。 1. Servlet: Servlet 是 Java 提供的一种...

    直接请求转发(Forward)和间接请求转发(Redirect)两种区别.docx

    直接请求转发是服务器内部的资源调度,用户在浏览器中只会看到最初的请求URL,而感知不到请求被转发的过程。这是因为浏览器并没有重新发起HTTP请求,而是服务器通过`RequestDispatcher`接口的`forward()`方法将请求...

    请求转发与重定向

    Java Servlet 中可以通过 `RequestDispatcher` 的 `forward` 方法来实现请求转发。例如: ```java RequestDispatcher dispatcher = request.getRequestDispatcher("index.jsp"); dispatcher.forward(request, ...

    java servlet请求转发重定向

    ### Java Servlet 请求转发与重定向详解 #### 一、引言 在Java Web开发中,请求转发和重定向是两种非常重要的技术手段,用于控制页面之间的跳转逻辑。这两种技术虽然都能实现页面间的跳转,但其工作原理、应用场景...

    请求转发与重定向的区别

    当客户端发送一个请求到服务器后,服务器通过Servlet或者Filter来处理这个请求,然后决定将请求转发到另一个资源,比如另一个Servlet或JSP页面。在这个过程中,客户端并不知道请求被转发了,因为它只与服务器进行了...

    javaServlet请求转发和重定向.pdf

    Java Servlet 请求转发和重定向 Java Servlet 请求转发和重定向是两种不同的页面跳转机制,它们在 Web 应用程序中扮演着重要的角色。理解这两种机制的区别和使用场景是非常重要的。 请求转发是指将请求再转发到另...

    请求转发与重定向详解代码

    请求转发是一种服务器端的技术,它发生在服务器接收到客户端请求后,不直接生成响应,而是将请求传递给另一个内部资源进行处理。这通常用于整合多个后台服务或合并不同功能模块的情况。在Java Servlet中,我们可以...

    请求转发和重定向的区别共1页.pdf.zip

    当服务器接收到一个请求后,它可以选择不直接处理这个请求,而是通过`RequestDispatcher`对象将请求转发到另一个资源,比如Servlet或JSP页面。在这个过程中,客户端浏览器并不知道这个变化,它仍然认为自己请求的是...

    forward方法实现请求转发

    通过该方法可以将当前请求转发到另一个资源(如Servlet或JSP页面)进行处理,并且转发过程中会保留原请求的数据和状态。这种机制对于构建复杂的应用流程非常有用,它可以帮助开发者更好地组织代码结构,提高程序的可...

    练习servlet

    在“练习Servlet”的过程中,你可能还会接触到MVC(Model-View-Controller)设计模式,这是Web开发中常见的架构模式,Servlet通常作为Controller的角色,负责接收请求、处理数据并调用模型和视图。 总的来说,...

    JavaWeb请求转发和请求包含实现过程解析

    - 请求转发:当前Servlet可以设置响应头,但不能设置响应体,因为响应体将被后续Servlet覆盖。 - 请求包含:当前Servlet和后续Servlet都可以设置响应头和响应体,但需要注意的是,包含的响应会被合并到同一响应中...

    Servlet+jsp.docx

    - **请求转发**:服务器内部行为,客户端看不到转发的过程,只能看到最终的结果页面。 #### 三、会话管理技术 - **Cookie**:客户端保存的小文本文件,用于存储用户的一些基本信息。 - **Session**:服务器端维护...

    JavaWeb中的 请求转发 和 重定向.docx

    总结来说,请求转发适用于多个Servlet之间需要共享数据且不希望用户察觉的情况,而重定向通常用于需要用户参与的跳转,例如登录验证失败后返回登录页或成功操作后跳转到结果页。在实际开发中,应根据具体需求选择...

    jsp和servlet请求与响应

    - **概念**:转发是在服务器端完成的,由服务器将当前请求转发到另一个资源处理,客户端不知道该过程。 - **实现**:通过`RequestDispatcher`接口的`forward(request, response)`方法实现。 ##### 5.2 重定向 - **...

Global site tag (gtag.js) - Google Analytics