SSM框架jsp无法从webapp下跳转到WEB-INF下的jsp;偶尔进去了也无法加载jsp的静态资源
前言:最近从网上找课程学ssm整合实战,感觉跟着敲肯定会多少对SSM框架有更深的认识,然而。。照着敲都出现了BUG,花费了我四天是时间才勉强解决了,尤其是当你没有小伙伴询问的条件下,想必一定是痛苦万分(跟我一样),避免跟我遇到相同问题的小伙伴们可以少走一些弯路,所以特意写了这篇博客,希望对你有所帮助。本篇博客尾部会附上视频连接。
问题: 这是文件目录图,我最开始的目的很简单,就是从webapp下的index.jsp通过<jsp:forward>标签跳转到WEB-INF下的jsp。
解决:通过网上的大量参考资源,大概有以下几种查错方法:
①是不是webapp下的跳转写错了?
[code]<jsp:forward page="${APP_PATH }/index.do"></jsp:forward>
*这个${APP_PATH }是什么呢?
[code]public class StartSystemListener implements ServletContextListener { public void contextInitialized(ServletContextEvent sce) { ServletContext servletContext = sce.getServletContext(); String contextPath = servletContext.getContextPath(); servletContext.setAttribute("APP_PATH", contextPath); System.out.println(contextPath); System.out.println("0.0."); } public void contextDestroyed(ServletContextEvent sce) { } }
如图,其实就是项目的根路径名: 所以应该输出为:/Atcrowdfunding-main
所以到目前为止没有错,这是完全按照那位老师的代码敲得。
②你是不是视图解析器没配置啊?
打开我的springmvc-context.xml,找到视图解析那里
[code] <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property> <property name="prefix" value="/WEB-INF/jsp/"></property> <property name="suffix" value=".jsp"></property> </bean>
跟网上正确的代码相对照,也没有什么毛病。???
③是不是controller没配置对啊?
[code]@Controller @RequestMapping("/") public class DispatcherController { @RequestMapping("/index") public String index() { return "index"; } }
????
④肯定是没捕捉到.do文件,检查一下你的web.xml
[code] <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring/springmvc-context.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>*.htm</url-pattern> <url-pattern>*.do</url-pattern> <!-- 默认匹配 --> <url-pattern>/</url-pattern> </servlet-mapping>
wtf!!!》》》》》》》》????????也配置了呀?再看下一步
⑤是不是注解没扫描到?
[code] <!-- 启用注解功能 --> <context:annotation-config />
我在springmvc-context配置如上,在spring-context的配置如下
[code] <context:component-scan base-package="com.bean.atcrowdfunding.*"> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan>
也没毛病呀?????????
所以我回到了起点,替换掉了这个让人不熟悉的标签,而改成了熟悉的
[code]<% response.sendRedirect("index.do"); %>
终于可以跳转正常了,可是404。
后来,突然看到一句话,你是不是没配置<mvc:annotation-driven/>,这仿佛开启了我的新世界,什么玩意这是?后来一查才发现这是@Controller的前提配置,如果没有它,controller不会被解析,所有的请求都会被<mvc:default-servlet-handler />捕捉到.
那么为什么静态资源访问不到呢?因为所有请求都被拦截了,包括静态资源,换句话说,就是只要用了@Controller,最好在springmvc-context.xml把<mvc:annotation-driven/>和<mvc:default-servlet-handler />都配置好,否则不是404,就是静态资源加载不到。关于这两个标签详细内容可参考 点我 和 点我。
全部改完之后
瞬间明朗了许多,我发现只要这两个标签加上了,<url-pattern>写成/或者*.do都能加载出页面
[code]<servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring/springmvc-context.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <!-- 默认匹配 --> <url-pattern>/</url-pattern> </servlet-mapping>
但是Spring3.0推了Rest风格,所以建议改成/,而且写成*.do会有一些302的错误,虽然问题不大,但是毕竟是隐患。
所以视频学习的小伙伴们不要总感觉视频中老师的代码一定是最佳答案,遇到错误了不用完全根据视频中的写法改,否则就有可能永远也解决不了,这次Bug事件可以说是受益匪浅,(#^.^#),大家一起加油!
- ssm 返回jsp页面时请求在WEB-INF里的静态js,css资源404错误
- springmvc controller跳转后jsp页面无法加载静态资源css,图片等错误解决方法
- jsp放在web-inf下访问静态资源
- SpringMVC的WEB-INF下的JSP加载js,css,jpg等静态文件
- WEB-INF下jsp引用外部的静态资源
- 1.SSM-Project-Day06 shiro框架-【重坑】:对web.xml的不了解,导致无法加载shiro的bean
- web.xml中配置访问资源URL<url-pattern>/</url-pattern>时无法访问.html、.jsp、.js、.css等静态资源时的解决方案
- web.xml中配置访问资源URL<url-pattern>/</url-pattern>时无法访问.html、.jsp、.js、.css等静态资源时的解决方案
- spring MVC 跳转js css图片等静态资源无法加载问题
- 关于@requestMapping跳转页面静态资源无法加载问题
- 用maven搭建springmvc项目时,jsp页面无法加载js或者css等静态资源
- Spring Boot + JSP模板配置+WEB-INF下静态资源访问
- web.xml中配置访问资源URL<url-pattern>/</url-pattern>时无法访问.html、.jsp、.js、.css等静态资源时的解决方案
- 解决springMVC 跳转js css图片等静态资源无法加载的问题
- 关于WEB-INF目录下无法访问webapp下的css等静态文件
- 解决Nginx做主服务器与Tomcat整合下无法加载JSP中静态资源的问题
- 遇到问题--jsp---Nginx转发https导致静态资源无法加载--This request has been blocked
- 关于WEB-INF目录下无法访问webapp下的css等静态文件
- jsp访问WEB-INF下面的资源-jsp
- 关于dwz框架中回调函数是进行页面跳转(callbackType=forward)时偶尔会出现页面输入框无法编辑的情况