【问题标题】:Spring MVC Tiles jsp page not load properlySpring MVC Tiles jsp页面无法正确加载
【发布时间】:2014-07-22 16:27:16
【问题描述】:

我正在使用 Tiles 开发一个 Spring MVC 项目。当我运行应用程序时,我没有收到任何错误。但是 jsp 页面未正确加载,如下所示 p>

当我查看此页面的源代码时,我可以看到 layout.jsp 和 home.jsp 代码已加载。但正如您在上面看到的,该页面仅显示 jsp 标记。

开发环境

-> Spring MVC 3.2.8 Release
-> Apache Tiles 2.2.1 
    tiles-core-2.2.1.jar
    tiles-template-2.2.1.jar
    tiles-jsp-2.2.1.jar
    tiles-servlet-2.2.1.jar
    tiles-api-2.2.1.jar
    tiles-request-api-1.0.1.jar

pom.xml

<!-- Servlet -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.1</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

web.xml

<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee      http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 <servlet-mapping>
    <servlet-name>appServlet</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

tiles.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE tiles-definitions PUBLIC "-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN" "http://tiles.apache.org/dtds/tiles-config_2_0.dtd">      

<tiles-definitions>
    <definition name="base.definition"
        template="/WEB-INF/views/templates/template1/layout.jsp">
        <put-attribute name="title" value=""/>
        <put-attribute name="header" value="/WEB-INF/views/templates/components/header.jsp"/>
        <put-attribute name="menu" value="menu"/>
        <put-attribute name="body" value=""/>
        <put-attribute name="footer" value="/WEB-INF/views/templates/components/footer.jsp"/>
    </definition>
    <definition name="menu"
               preparer="menuController"
               template="/WEB-INF/views/templates/components/menu.jsp">
    </definition>
    <definition name="home" extends="base.definition">
    <put-attribute name="title" value="Home"/>
    <put-attribute name="body" value="/WEB-INF/views/home.jsp"/>
</definition>

layout.jsp

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@page language="java"  contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@taglib  uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%>
<%@taglib  uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@taglib  uri="http://www.springframework.org/tags" prefix="spring"%>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>

<html>
<head>

   <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
   <title><tiles:getAsString name="title"/></title> 
  <link rel="stylesheet" type="text/css" href="<c:url 
           value='/resources/css/style.css'/>"/> 

</head>
<body>
   <div id="layout">
    <div id="header">
        <tiles:insertAttribute name="header" />
    </div>
    <div id="content">
        <div id="leftContent">
           <tiles:insertAttribute name="menu" />
        </div>
        <div id="rightContent">
           <tiles:insertAttribute name="body" />
        </div>
    </div>
    <div id="footer">
        <tiles:insertAttribute name="footer" />
    </div>
   </div>
</body>
</html>

home.jsp

<%@taglib  uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>

<%@ page language="java"  contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 

    <c:if test="${!empty kodListe}">
        <h3 >En Son Eklenenler</h3>

        <c:forEach items="${kodListe}" var="kod">
            <form:form action="kod" method="POST">
            <table>
            <tr> 
               <td>
                  <input type="hidden" name="kodId" value="${kod.kodId}" />
                  <input value="${kod.kodBaslik}" type="submit"/>
               </td>
            </tr>
            <tr>
                <td>
                     ${kod.kodEkleyenKullanici.kullaniciAd}
                </td>
                 <td>
                       ${kod.kodEklemeTarihi}
                 </td>
            </tr>

            </table>
            </form:form>
        </c:forEach>

servlet-context.xml

<bean id="viewResolver"
        class="org.springframework.web.servlet.view.UrlBasedViewResolver">
        <property name="viewClass"
            value="org.springframework.web.servlet.view.tiles2.TilesView">
        </property>
    </bean>
    <bean id="tilesConfigurer"
        class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">
        <property name="definitions">
            <list>
                <value>/WEB-INF/tiles.xml</value>
            </list>

        </property>

如何解决这个问题?提前谢谢

【问题讨论】:

    标签: java spring jakarta-ee spring-mvc apache-tiles


    【解决方案1】:

    问题在于 web.xml 中带有 servlet 映射的磁贴配置

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

    当我使用/* 时,home.jsp 会正确加载磁贴配置,但没有 css 和图像。

    /的情况下,home.jsp不加载tile配置,只显示仅在home.jsp中定义的代码

    我找到了解决方案here 作为使用 tukey 编写 url 的 Spring 示例 (https://src.springframework.org/svn/...ebapp/WEB-INF/ ) 来解决问题,我添加了使用 /* url 映射的过滤器和过滤器映射,并将 appServlet url 模式更改为 /

    web.xml

     <!-- Reads request input using UTF-8 encoding -->
    
        <filter>
                <filter-name>characterEncodingFilter</filter-name>
                <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
                <init-param>
                    <param-name>encoding</param-name>
                    <param-value>UTF-8</param-value>
                </init-param>
                <init-param>
                    <param-name>forceEncoding</param-name>
                    <param-value>true</param-value>
                </init-param>
            </filter>
    
            <filter-mapping>
                <filter-name>characterEncodingFilter</filter-name>
                <url-pattern>/*</url-pattern>
            </filter-mapping>
    
           <servlet-mapping>
               <servlet-name>appServlet</servlet-name>
               <url-pattern>/</url-pattern>
           </servlet-mapping>
    

    我从web.xml删除了这个

    <welcome-file-list>
            <welcome-file>/WEB-INF/views/home.jsp</welcome-file>
    </welcome-file-list>
    

    最后我改变了 servlet-context.xml

    <!-- Forwards requests to the "/" resource to the "home" view -->
        <mvc:view-controller path="/" view-name="home" />
    

    然后一切开始工作。希望这可以帮助另一个 * 用户

    【讨论】:

      最近更新 更多