从webapp下跳转到WEB-INF下的jsp

 

问题从webapp下跳转到WEB-INF下的jsp_第1张图片这是文件目录图,我最开始的目的很简单,就是从webapp下的index.jsp通过标签跳转到WEB-INF下的jsp。

解决:通过网上的大量参考资源,大概有以下几种查错方法:

①是不是webapp下的跳转写错了?

<jsp:forward page="${APP_PATH }/index.do">jsp:forward>
   
   
   
   

*这个${APP_PATH }是什么呢?


   
   
   
   
  1. public class StartSystemListener implements ServletContextListener {
  2. public void contextInitialized(ServletContextEvent sce) {
  3. ServletContext servletContext = sce.getServletContext();
  4. String contextPath = servletContext.getContextPath();
  5. servletContext.setAttribute( "APP_PATH", contextPath);
  6. System.out.println(contextPath);
  7. System.out.println( "0.0.");
  8. }
  9. public void contextDestroyed(ServletContextEvent sce) {
  10. }
  11. }

如图,其实就是项目的根路径名:从webapp下跳转到WEB-INF下的jsp_第2张图片所以应该输出为:/Atcrowdfunding-main

所以到目前为止没有错,这是完全按照那位老师的代码敲得。

②你是不是视图解析器没配置啊?

打开我的springmvc-context.xml,找到视图解析那里


   
   
   
   
  1. <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  2. <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"> property>
  3. <property name="prefix" value="/WEB-INF/jsp/"> property>
  4. <property name="suffix" value=".jsp"> property>
  5. bean>

跟网上正确的代码相对照,也没有什么毛病。???

③是不是controller没配置对啊?


   
   
   
   
  1. @Controller
  2. @RequestMapping( "/")
  3. public class DispatcherController {
  4. @RequestMapping( "/index")
  5. public String index() {
  6. return "index";
  7. }
  8. }

????

④肯定是没捕捉到.do文件,检查一下你的web.xml


   
   
   
   
  1. <servlet>
  2. <servlet-name>springmvc servlet-name>
  3. <servlet-class>org.springframework.web.servlet.DispatcherServlet servlet-class>
  4. <init-param>
  5. <param-name>contextConfigLocation param-name>
  6. <param-value>classpath:spring/springmvc-context.xml param-value>
  7. init-param>
  8. <load-on-startup>1 load-on-startup>
  9. servlet>
  10. <servlet-mapping>
  11. <servlet-name>springmvc servlet-name>
  12. <url-pattern>*.htm url-pattern>
  13. <url-pattern>*.do url-pattern>
  14. <url-pattern>/ url-pattern>
  15. servlet-mapping>

wtf!!!》》》》》》》》????????也配置了呀?再看下一步

⑤是不是注解没扫描到?


   
   
   
   
  1. <context:annotation-config />

我在springmvc-context配置如上,在spring-context的配置如下


   
   
   
   
  1. <context:component-scan base-package="com.bean.atcrowdfunding.*">
  2. <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
  3. context:component-scan>

也没毛病呀?????????

所以我回到了起点,替换掉了这个让人不熟悉的标签,而改成了熟悉的


   
   
   
   
  1. <%
  2. response.sendRedirect("index.do");
  3. %>

终于可以跳转正常了,可是404

 

后来,突然看到一句话,你是不是没配置,这仿佛开启了我的新世界,什么玩意这是?后来一查才发现这是@Controller的前提配置,如果没有它,controller不会被解析,所有的请求都会被捕捉到.

那么为什么静态资源访问不到呢?因为所有请求都被拦截了,包括静态资源,换句话说,就是只要用了@Controller,最好在springmvc-context.xml把都配置好,否则不是404,就是静态资源加载不到。关于这两个标签详细内容可参考 点我 和 点我。

全部改完之后从webapp下跳转到WEB-INF下的jsp_第3张图片

瞬间明朗了许多,我发现只要这两个标签加上了,写成/或者*.do都能加载出页面


   
   
   
   
  1. springmvc
  2. class>org.springframework.web.servlet.DispatcherServletservlet-class>
  3. <init-param>
  4. <param-name>contextConfigLocationparam-name>
  5. <param-value>classpath:spring/springmvc-context.xmlparam-value>
  6. init-param>
  7. <load-on-startup>1load-on-startup>
  8. servlet>
  9. <servlet-mapping>
  10. <servlet-name>springmvcservlet-name>
  11. <url-pattern>/url-pattern>
  12. servlet-mapping>

 

你可能感兴趣的:(Bugs)