无法在spring mvc中加载默认索引页面

时间:2016-05-17 07:03:46

标签: java spring spring-mvc

这是web.xml:

<?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文件夹中,但我仍然得到相同的错误。我检查了所有配置,但我不确定为什么找不到该页面。

3 个答案:

答案 0 :(得分:0)

尝试在控制器中添加以下方法

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

        return "index";

    }

答案 1 :(得分: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>

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

    BulkSMS2     / *

要                     BulkSMS2             /         

这会覆盖容器默认servlet处理程序,但不会覆盖特殊容器servlet。要处理静态资源,请将以下行添加到BulkSMS2-servlet.xml

<mvc:default-servlet-handler/>

要将index.jsp作为静态资源访问,需要将其放在WEB-INF文件夹外的根webapp文件夹中。但是,如果您想将其保存在WEB-INF文件夹中,那么您的请求应由控制器处理

@RequestMapping("/")
public class HomeController{

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

答案 2 :(得分:0)

好的,您将DispatcherServlet映射到/*,以便它将收到空的servlet路径/

你能做的最简单的事情(IMHO)是删除web.xml文件中的<welcome-file-list>块,只是将一个空的servlet路径作为默认地址传递:它将由Spring-MVC处理。

然后你只需添加一个SimpleUrlHandlerMapping来将默认URL映射到一个只显示你的视图的ParameterizedViewController。

因此,在dispatcher-servlet上下文中,添加以下bean:

<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的两个不同实例结束,首先是在子上下文中的后一个中。这可能导致奇怪且难以发现问题......短篇小说:不要那样做