我试图从Interceptor和Handler Mapping程序重定向到动态页面.我已经定义了一个控制器,它通过模型处理和重定向(/hello.htm)(我的程序中只有这个控制器).在此之前,它工作正常.除此之外,我注册了一个处理程序,一旦满足某些条件,它将重定向到页面.
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;
..............
..............
}
但是一旦涉及到response.sendRedirect,即使提到的页面存在,它也显示未找到的资源.我试图重定向到“WEB-INF / jsp / hello.jsp”,但仍然显示相同的错误.如果不满足拦截器中的条件,则程序正常.
下面显示了程序中唯一存在的控制器.
@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);
}
}
(如果我改变拦截器条件,处理hello.html的控制器工作正常)
如果我只是在控制台中打印一条消息,该程序可以正常工作,而不是重定向.但是一旦涉及到重定向,就会显示错误.我是否需要指定一个单独的控制器来处理此请求?这个重定向请求会转到dispatcher-servlet吗?
最佳答案
您需要在视图名称中添加redirect:前缀,重定向的代码如下所示:
@RequestMapping(value = "/redirect",method = RequestMethod.GET)
public String redirect() {
return "redirect:finalPage";
}
要么
@RequestMapping(value = "/redirect",method = RequestMethod.GET)
public ModelAndView redirect() {
return new ModelAndView("redirect:finalPage");
}
您可以从这里获得详细说明:
enter link description here