在我的Spring MVC应用程序中,我想使用AJAX index.jsp在final.jsp页面之间重定向我的页面。但是,当我单击Redirect Page应用程序中的按钮时,未显示重定向页面(final.jsp)。我已经使用Java代码System.out.println("inside /redirect");并System.out.println("inside /finalPage");在Java代码内部检查了是否在服务器上接收到AJAX GET请求,并且仅inside /redirect在打印该消息,这意味着/finalPage未在调用AJAX GET请求。而且,我的浏览器的控制台没有显示任何错误。因此,请告诉我们,问题可能出在哪里,问题出在哪里?我在下面发布了完整的代码:
index.jsp
final.jsp
Redirect Page
System.out.println("inside /redirect");
System.out.println("inside /finalPage");
inside /redirect
/finalPage
WebController.java
package com.tutorialspoint; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @Controller public class WebController { @RequestMapping(value = "/index", method = RequestMethod.GET) public String index() { return "index"; } @RequestMapping(value = "/redirect", method = RequestMethod.GET) public String redirect() { System.out.println("inside /redirect"); return "redirect:/finalPage"; } @RequestMapping(value = "/finalPage", method = RequestMethod.GET) public String finalPage() { System.out.println("inside /finalPage"); return "final"; } }
<%@taglib uri = "http://www.springframework.org/tags/form" prefix = "form"%> <html> <head> <title>Spring Page Redirection</title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> </head> <body> <h2>Spring Page Redirection</h2> <p>Click below button to redirect the result to new page</p> <button onClick="redFun()">Redirect Page</button> <script> function redFun() { $.ajax({ type : "GET", url : "/HelloWeb/redirect" }); } </script> </body> </html>
<%@taglib uri = "http://www.springframework.org/tags/form" prefix = "form"%> <html> <head> <title>Spring Page Redirection</title> </head> <body> <h2>Redirected Page</h2> </body> </html>
web.xml:
<web-app id = "WebApp_ID" version = "2.4" xmlns = "http://java.sun.com/xml/ns/j2ee" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation = "http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>Spring MVC Application</display-name> <servlet> <servlet-name>HelloWeb</servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>HelloWeb</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
HelloWeb-servlet.xml
<beans xmlns = "http://www.springframework.org/schema/beans" xmlns:context = "http://www.springframework.org/schema/context" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation = " http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <context:component-scan base-package = "com.tutorialspoint" /> <bean class = "org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name = "prefix" value = "/WEB-INF/jsp/" /> <property name = "suffix" value = ".jsp" /> </bean> </beans>
您的浏览器未遵循重定向,因为您使用的是Ajax来访问控制器的重定向方法。您有两种选择:
完全不要使用ajax,让您的浏览器自然地响应重定向状态。
function redFun() { window.location = "/HelloWeb/redirect";
}
查找对XmlHttpRequest的HTTP 302响应,并将window.location更改为响应中Location头的值:
function redFun() { $.ajax({ type: "GET", url: "/HelloWeb/redirect" }).fail(function (jqXHR, status, err) { if (jqXHR.status === 302) { window.location = jqXHR.getResponseHeader('Location'); } });