Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use send.redirect() while working with Spring MVC

I was trying to redirect to a dynamic page from Interceptors and Handler Mapping program. I have already defined a controller which handles and redirects (/hello.htm) through model (I have only this controller in my program). Until this point it is working fine. Apart from this, I registered a handler which will redirect to a page once it satisfies some condition.

public class WorkingHoursInterceptor extends HandlerInterceptorAdapter  {
@Override
public boolean preHandle(HttpServletRequest request,
        HttpServletResponse response, Object handler) throws Exception {
    System.out.println("In Working Hours Interceptor-pre");
    Calendar c=Calendar.getInstance();
    if(c.get(Calendar.HOUR_OF_DAY)<10||c.get(Calendar.HOUR_OF_DAY)>20){
        response.sendRedirect("/WEB-INF/jsp/failure.jsp");
                        return false;
    }
    return true;
..............
..............
} 

But once it comes to response.sendRedirect, it is showing resource not found even though the mentioned page is present. I tried to redirect to "WEB-INF/jsp/hello.jsp" as well but keeps showing the same error. If the condition in the interceptor is not satisfied, the program works fine.

Below is shown the only controller present in the program.

@Controller
public class MyController {
@RequestMapping("/hello.htm")
public ModelAndView sayGreeting(){
    String msg="Hi, Welcome to Spring MVC 3.2";
    return new ModelAndView("WEB-INF/jsp/hello.jsp","message",msg);

    }

}

(The controller for handling hello.html works fine if I change the interceptor condition)

Instead of redirecting, if I just print a message in the console, the program works fine. But once it comes to redirect it shows the error. Do I need to specify a separate controller to handle this request? Will this redirection request go to the dispatcher-servlet?

like image 433
bkuriach Avatar asked Sep 09 '14 11:09

bkuriach


People also ask

How use redirect attribute in Spring MVC?

You can use RedirectAttributes to store flash attributes and they will be automatically propagated to the "output" FlashMap of the current request. A RedirectAttributes model is empty when the method is called and is never used unless the method returns a redirect view name or a RedirectView.

How we can redirect to another page or controller in Spring MVC?

We can use a name such as a redirect: http://localhost:8080/spring-redirect-and-forward/redirectedUrl if we need to redirect to an absolute URL.

How do I redirect a page in spring?

Try a URL http://localhost:8080/HelloWeb/index and you should see the following result if everything is fine with your Spring Web Application. Click the "Redirect Page" button to submit the form and to get the final redirected page.

How do I forward a Spring MVC request?

A request can be basically processed in three ways: a) resolved by Spring in a controller action, b) forwarded to a different controller action, c) redirected to client to fetch another URL. Forward: performed internally by Spring. the browser is completely unaware of forward, so its original URL remains intact.


1 Answers

You need to add redirect: prefix in the view name, the code for redirect will look like:

@RequestMapping(value = "/redirect", method = RequestMethod.GET)
   public String redirect() {

      return "redirect:finalPage";
   }

OR

@RequestMapping(value = "/redirect", method = RequestMethod.GET)
public ModelAndView redirect() {

  return new ModelAndView("redirect:finalPage");
}

You may get a detail description from here: enter link description here

like image 100
Jagannath Sabat Avatar answered Sep 30 '22 17:09

Jagannath Sabat