2016-05-17 45 views
0

这里载入默认索引页的web.xml文件:无法Spring MVC中

<?xml version="1.0" encoding="UTF-8"?> 

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 
     version="3.1"> 
    <session-config> 
     <session-timeout> 
      30 
     </session-timeout> 
    </session-config> 

    <display-name>BulkSMS2</display-name> 
    <welcome-file-list> 
     <welcome-file>index.jsp</welcome-file> 
     <welcome-file>index.html</welcome-file> 
    </welcome-file-list> 

    <servlet> 
     <servlet-name>BulkSMS2</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <init-param> 
      <param-name>contextConfigLocation</param-name> 
      <param-value> 
       /WEB-INF/BulkSMS2-servlet.xml 
      </param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>BulkSMS2</servlet-name> 
     <url-pattern>/*</url-pattern> 
    </servlet-mapping> 

    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/BulkSMS2-servlet.xml</param-value> 
    </context-param> 

    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 
</web-app> 

调度-servlet.xml中:

<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation=" 
     http://www.springframework.org/schema/beans  
     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     http://www.springframework.org/schema/context 
     http://www.springframework.org/schema/context/spring-context-3.0.xsd 
     http://www.springframework.org/schema/mvc 
     http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> 

    <context:component-scan base-package="com.nt.beans" /> 
    <mvc:annotation-driven /> 

    <bean 
     class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="prefix"> 
      <value>/WEB-INF/pages/</value> 
     </property> 
     <property name="suffix"> 
      <value>.jsp</value> 
     </property> 
    </bean> 
</beans> 

当我运行应用程序,我得到404错误。我已将index.jsp文件放入WEB-INF/pages/index.jsp文件夹中,但仍然出现相同的错误。我检查了所有的配置,我不知道为什么它没有找到页面。

+0

您如何访问索引页面。请求是否通过控制器。如果是这样,发布控制器代码。 –

+0

@ekemchitsiga它是一个静态页面 – Satyadev

+0

如果你想要一个索引页面,它必须是可以直接访问的。 WEB-INF下的任何内容都无法访问。你必须将'index.jsp'直接放到你的web应用的根目录中。另外一个快速的提示是基本上加载你的应用程序两次(ContextLoaderListener和DispatcherServlet都加载了相同的配置,基本上都加载了两次)。 –

回答

0

有一对夫妇的配置问题与您的应用程序。首先你指定你的应用程序上下文的方式。从你的配置看来你有一个应用程序上下文BulkSMS2-servlet.xml。因此您不需要根应用程序上下文。所以删除你的web.xml中的这一部分

<context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/BulkSMS2-servlet.xml</param-value> 
    </context-param> 

    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 

第二个问题是你的URL映射/ *。它覆盖所有的servlet映射,包括容器提供的jsp处理。这意味着包括jsps请求在内的所有请求都由您的DispatcherServlet处理。更改此部分

BulkSMS2 /*

要 BulkSMS2 /

这将覆盖容器默认的servlet处理程序,但不会覆盖特殊的容器的servlet。为了处理静态资源下面一行添加到您的BulkSMS2-servlet.xml中

<mvc:default-servlet-handler/> 

要访问您的index.jsp,因为你需要把它的根文件夹web应用的WEB-INF文件夹外的静态资源。但是,如果你想保持它在WEB-INF文件夹,那么你的请求应该由控制器

@RequestMapping("/") 
public class HomeController{ 

    @RequestMapping() 
    public String showHomePage(){ 
    return "index"; 
    } 
} 
+0

所以我可以删除内部视图解析器?这一部分:'<豆 类= “org.springframework.web.servlet.view.InternalResourceViewResolver”> <属性名= “前缀”> /WEB-INF /页/ <属性名=”后缀“> .jsp ' – Satyadev

0

尝试增加以下方法在你的控制器

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

     return "index"; 

    } 
0

好处理,你映射的DispatcherServlet到/*所以它会收到空servlet路径/

您可以做的最简单的方法是删除web.xml文件中的<welcome-file-list>块,以简单地传递一个空的servlet路径作为默认地址:它将由Spring-MVC处理。

然后,您只需添加一个SimpleUrlHandlerMapping以将默认URL映射到仅显示视图的ParameterizedViewController。

因此,在调度员servlet上下文,添加以下豆:

<bean id="indexController" p:viewName="index" 
    class="org.springframework.web.servlet.mvc.ParameterizableViewController"/> 
<bean id="simpleUrlHandlerMapping" 
     class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 
    <property name="mappings"> 
     <value> 
      /=indexController 
     </value> 
    </property> 
</bean> 

但你必须在你的web.xml文件中的问题。您正在使用相同的文件来初始化根上下文(顶层<context-param>块)和DispatcherServlet之一(<servlet><init-param>块)。所以你将以每个bean的两个不同的实例结束,首先在后一个根子元素的子元素中。这可能会导致奇怪和难以发现的问题......短篇小说:不要那样做