最近想自我实现一个spring+springmvc,自定义了一个DispatcherServlet,拦截所有请求(/*),这时候发现,如果我的自定义controller里返回String,则会再次被我的DispatcherServlet拦截。请问有什么解决方法,可以让我正常跳转到页面?
我自己弄出来了,Tomcat服务器解析jsp的servlet名字是jsp,因此在的doGet或doPost方法种写上:
RequestDispatcher rd = this.getServletContext().getNamedDispatcher("jsp");
rd.forward(request, response);
这样就可以将这个jsp请求发送给Tomcat的Servlet来解决
我在controller里试了其他的跳转方法(如:request.getRequestDispatcher("/index.jsp").forward(request,response);),也会被我的DispatcherServlet拦截,也不成功
关于页面跳转的建议用Struts2实现
返回字符串时,视图解析器会根据你定义的视图名转换器转换成*.*的资源,你配置的是拦截所有,index.jsp也是服务器的资源也会被拦截,
在配置文件中使用取消对静态资源的拦截
1、要么设置拦截所有请求(/*)为*.do,只拦截.do请求
2、要么
mvc:interceptors
mvc:interceptor
//添加不拦截的
/mvc:interceptor
/mvc:interceptors
可不可以你自己试试吧
但我的这个解决方法依旧会显得很繁琐,感觉不是那么完美。假如我要请求的index.jsp页面在/WEB-INF/views下,那么我发送的请求就得是/WEB-INF/views/index.jsp,这样感觉好麻烦,请问大家还有什么其他的办法吗?
如果你是springmvc的开发人员会怎么写?为了拦截访问路径和静态资源等,肯定需要写一个拦截类去拦截所有请求,然后自己定义拦截规则,
读取指定名称的配置文件(要识别出类似mvc:interceptors这种标签),进而在controller中注解value实现跳转,没那么简单的