【问题标题】:Spring MVC home pageSpring MVC 主页
【发布时间】:2017-07-05 18:19:09
【问题描述】:

我有 HomeController 类:

@Controller
public class HomeController {

    @RequestMapping("/")
    public String showPage() {
        return "main-menu";
    }
}

我的项目结构:

春季版:4.3.9 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">
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/applicationContext.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>*.form</url-pattern>
    </servlet-mapping>
</web-app>

调度程序-servlet.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       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.xsd">

</beans>

它总是显示 index.jsp,从不显示 main-menu.jsp 我想要一个主菜单我的主页。我该怎么办?

【问题讨论】:

  • spring 默认将 index.jsp、index.html 等作为欢迎页面。可以根据这篇文章stackoverflow.com/a/29054676/3981536 禁用此功能
  • 所以我不能用其他名字设置主页?
  • 可以,但是需要覆盖spring的默认行为
  • 同样在spring启动日志中验证,如果请求端点注册了..
  • 告诉我们dispatcher-servlet.xmlweb.xml

标签: java spring jsp spring-mvc


【解决方案1】:

我在我的项目中使用了一种方法来解决这个问题。 我在下面与你分享它

仅保留 index.jsp 中的以下内容

index.jsp

<meta http-equiv="refresh" content="0;url=welcome" />

在您的控制器 java 程序中,RequestMapping 必须保存在&lt;meta&gt; 文件中指定的&lt;meta&gt; 标记的url 属性中指定的值。

在本例中,url 属性的值为 welcome

@Controller
public class HomeController {

    @RequestMapping("/welcome")
    public String welcome() {
        return "main-menu";
    }
}

这对我有用

更新 #1:

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

更新 #2:

<context:annotation-config />
<context:component-scan base-package="add your base folder here" />

【讨论】:

  • 对我不起作用。 IDE 总是说“未找到视图解析器”
  • 您是否在 yourdispatcher-servlet.xml 中定义了 viewResolver?
  • 不,看post中的dispatcher-servlet.xml
  • @Raspberry 我已在 answer.verify 中更新了视图解析器的代码
  • @Raspberry 将 main-menu.jsp 放在 pages 文件夹中,以防您遵循我发布的相同代码
【解决方案2】:

问题在于您的web.xml 文件:

<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>*.form</url-pattern>
</servlet-mapping>

您向 servlet 容器声明 SpringMVC DispatcherServlet 将只处理以 .form 结尾的 URL。所以对 home 的请求永远不会到达 SpringMVC 机器 - 顺便说一句,这也解释了为什么神圣的 /welcome 提案也不起作用,但 /welcome.form 应该......

您也可以查看我的另一个post,了解如何使用 SpringMVC 处理根 URL。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-20
    • 1970-01-01
    • 1970-01-01
    • 2021-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-18
    相关资源
    最近更新 更多