【问题标题】:jstl functions not rendering in spring boot web application when war deployed in tomcat当在tomcat中部署战争时,jstl函数不会在spring boot Web应用程序中呈现
【发布时间】:2018-04-06 02:22:27
【问题描述】:

当 Spring Boot Web 应用程序部署在 tomcat jstl 功能不呈现时。请帮助我解决这个问题。
在tomcat中部署war时应该做哪些改变 添加依赖:

<parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.4.2.RELEASE</version>
        </parent>

        <properties>

            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <java.version>1.8</java.version>
            <start-class>com.**.BootConfig.Application.java</start-class>
        </properties>


        <dependencies>

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
                <scope>provided</scope>
            </dependency>

            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>jstl</artifactId>
            </dependency>

            <dependency>
                <groupId>org.apache.tomcat.embed</groupId>
                <artifactId>tomcat-embed-jasper</artifactId>
                <scope>provided</scope>
            </dependency>

            <dependency>
                <groupId>org.apache.tomcat.embed</groupId>
                <artifactId>tomcat-embed-el</artifactId>
                <scope>provided</scope>
            </dependency>

            <dependency>
                <groupId>taglibs</groupId>
                <artifactId>standard</artifactId>
                <version>1.1.2</version>
            </dependency>

            <dependency>
                <groupId>org.springframework.security</groupId>
                <artifactId>spring-security-taglibs</artifactId>
                <scope>provided</scope>
            </dependency>

            <dependency>
                <groupId>org.webjars</groupId>
                <artifactId>jquery</artifactId>
                <version>2.2.4</version>
            </dependency>

            <dependency>
                <groupId>org.webjars</groupId>
                <artifactId>bootstrap</artifactId>
                <version>3.3.7</version>
            </dependency>

            <dependency>
                <groupId>org.eclipse.jdt.core.compiler</groupId>
                <artifactId>ecj</artifactId>
                <version>4.6.1</version>
                <scope>provided</scope>
            </dependency>

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-jpa</artifactId>
            </dependency>

            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jdbc</artifactId>
            </dependency>

            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
            </dependency>

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
                <optional>true</optional>
            </dependency>

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-security</artifactId>
            </dependency>

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-mail</artifactId>
            </dependency>
        </dependencies>

我尝试使用的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 prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    <%@taglib uri="http://www.springframework.org/tags" prefix="spring"%>
    <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
    <%@ taglib prefix="coe" tagdir="/WEB-INF/tags"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>

在页面中这些函数没有呈现。只是按原样打印。

 <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    <%@taglib uri="http://www.springframework.org/tags" prefix="spring"%>
    <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
    <%@ taglib prefix="coe" tagdir="/WEB-INF/tags"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>

我们是否需要添加任何特定于使用所有这些功能的内容。还有什么需要发布的。让我知道。

添加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 prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<%@ taglib prefix="coe" tagdir="/WEB-INF/tags"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">


<!-- ----CSS Files ----- -->
<link type="text/css" rel="stylesheet"
    href="<c:url value="/css/bootstrap.min.css"/>" />
<link type="text/css" rel="stylesheet"
    href="<c:url value="/font-awesome/css/font-awesome.min.css"/>" />
<link type="text/css" rel="stylesheet"
    href="<c:url value="/css/owl.carousel.css"/>" />
<link type="text/css" rel="stylesheet"
    href="<c:url value="/css/style.css"/>" />
<link type="text/css" rel="stylesheet"
    href="<c:url value="/css/style_home.css"/>" />
<link type="text/css" rel="stylesheet"
    href="<c:url value="/css/responsive.css"/>" />
<link type="text/css" rel="stylesheet"
    href="<c:url value="/css/dataTables.bootstrap.css"/>" />

<!-- Fav and touch icons -->
<link rel="apple-touch-icon-precomposed" sizes="144x144"
    href="/resource/static/images/fav-144.html">
<link rel="apple-touch-icon-precomposed" sizes="114x114"
    href="/resource/static/images/fav-114.html">
<link rel="apple-touch-icon-precomposed" sizes="72x72"
    href="/resource/static/images/fav-72.html">
<link rel="apple-touch-icon-precomposed"
    href="/resource/static/images/fav-57.html">
<link rel="shortcut icon" href="images/fav.html">

<!-- Google Web Fonts -->
<link
    href="http://fonts.googleapis.com/css?family=Roboto+Condensed:300italic,400italic,700italic,400,300,700"
    rel="stylesheet" type="text/css">
<link href="http://fonts.googleapis.com/css?family=Oswald:400,700,300"
    rel="stylesheet" type="text/css">
<link
    href="http://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,700,300,600,800,400"
    rel="stylesheet" type="text/css">


<!-- ----JAVA SCRIPT----- -->
<script type="text/javascript"
    src="<c:url value="/js/jquery-1.11.1.min.js"/>"></script>
<script type="text/javascript"
    src="<c:url value="/js/jquery-migrate-1.2.1.min.js"/>"></script>
<script type="text/javascript"
    src="<c:url value="/js/bootstrap.min.js"/>"></script>
<script type="text/javascript"
    src="<c:url value="/js/bootstrap-hover-dropdown.min.js"/>"></script>
<script type="text/javascript"
    src="<c:url value="/js/jquery.magnific-popup.min.js"/>"></script>
<script type="text/javascript"
    src="<c:url value="/js/owl.carousel.min.js"/>"></script>
<script type="text/javascript" src="<c:url value="/js/custom.js"/>"></script>


</head>
<body class="back">
    <!-- Header Section Starts -->
    <header id="header-area"> <!-- Header Top Starts -->
    <div class="header-top-home">
        <div class="container">
            <div class="row">
                <!-- Header Links Starts -->
                <div class="col-sm-8 col-xs-12">
                    <div class="header-links-home">
                        <ul class="nav navbar-nav pull-left">

                        </ul>
                    </div>
                </div>
                <!-- Header Links Ends -->
                <!-- Right Navigation -->
                <div class="col-sm-4 col-xs-12">
                    <div class="pull-right header-links-home">
                        <ul class="nav navbar-nav pull-right">

                        </ul>
                    </div>
                </div>
                <!-- Right Navigation -->
            </div>
        </div>
    </div>
    <!-- Header Top Ends --> <!-- Main Header Starts -->
    <div class="main-header back1">
        <div class="container">
            <div class="row">
                <div class="col-sm-2"></div>


            </div>
        </div>
    </div>
    </header>
    <nav id="main-menu" class="navbar" role="navigation">
    <div class="container">
        <!-- Nav Header Starts -->
        <div class="navbar-header">
            <button type="button" class="btn btn-navbar navbar-toggle"
                data-toggle="collapse" data-target=".navbar-cat-collapse">
                <span class="sr-only">Toggle Navigation</span> <i class="fa fa-bars"></i>
            </button>
        </div>
        <coe:menu userrole="${role}" offeringList="${offeringList}" />
    </div>
    </nav>
    <div id="main-container-home" class="container">
        <div class="row">
            <div class="col-sm-3"></div>
            <div class="col-md-6">

            </div>
            <div class="col-sm-3"></div>
        </div>
        <div class="row">
            <c:forEach items="${OfferingDetails}" var="val" varStatus="loop">
                <div class="col-md-2 col-sm-4 col-xs-6">
                    <div class="dummy"></div>
                    <a href="offeringList.html?val=${val.offName}"
                        class="thumbnail ${val.offColor}"><i class="${val.offIcon}"></i><br>${val.offName}</a>
                </div>
            </c:forEach>
        </div>
        <h3 style="font-size: 18px" class="product-head">My Subscribed
            Solutions:-</h3>


    <!-- Footer Section Starts -->
    <footer id="footer-area"> <!-- Footer Links Starts --> <!-- Footer Links Ends -->

     </footer>

</body>
</html>

控制器部分

@RequestMapping(value="/homePage", method = RequestMethod.GET)
    public String homePage(Map<String, Object> model){

        Authentication auth = SecurityContextHolder.getContext()
                .getAuthentication();
        String name = auth.getName();

        System.out.println("name    "+    name + auth.getAuthorities());
        List<String> offeringList=loginService.getOfferingList();
        model.put("offeringList", offeringList);
        System.out.println(offeringList.size());

        List<OfferingDetails> OfferingDetails=loginService.getOfferingDetailsTable();
        model.put("OfferingDetails", OfferingDetails);

        List<String> hashTag=loginService.getHashTags();
        model.put("hashTag",hashTag);

        Set<SolutionDetails> downloadDetails=loginService.getUserDownloadDetails();
        model.put("downloadDetails", downloadDetails);

        String role=getRole();
        model.put("role",role);

        return "homePage";
    }

jars available in class path

【问题讨论】:

  • 页面上没有显示哪些数据?
  • 这个块没有被渲染...像 ${val.offName}
  • 您是否在控制台中发现任何错误?我的意思是 tomcat 控制台?
  • 没有 rahman 没有错误...页面加载...但是仅 jstl 标签不呈现

标签: jsp spring-boot jstl jsp-tags jstl-functions


【解决方案1】:

在您的pom.xml 中添加标准taglibs jar

<dependency>
    <groupId>taglibs</groupId>
    <artifactId>standard</artifactId>
    <version>1.1.2</version>
</dependency>

另外,别忘了先在你的jsp中包含标准的taglib。

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

【讨论】:

  • 你也应该把你关联的控制器和jsp代码。
【解决方案2】:

如果您能告诉我们您使用的是什么版本的 Tomcat,那将会有所帮助。此外,当您在项目上执行mvn spring-boot:run 时,它会给您预期的结果吗?如果是,则表明您的 TC 安装存在配置问题,或者 TC 预打包的 jar 与您的应用程序创建的类路径问题或不兼容。

【讨论】:

  • apache-tomcat-8.5.23 / apache-tomcat-7.0.55 .. 尝试使用这两个版本,得到相同的错误。但它在 Eclipse 中正常工作。
  • 您能否在javax.servlet:jstl 依赖项上使用provided 的范围并尝试一下?
  • 您在 pom.xml 中提供的packaging 是什么?请使用war。此外,您应该使用spring-boot-maven-plugin。接下来,您可以尝试删除任何可能与您的 TC 运行时冲突的不需要的依赖项;最好从最基本的 Spring 依赖项开始,然后逐步添加依赖项。 @dave-syer 编写了一个示例应用程序。您可以查看here
猜你喜欢
  • 2015-10-28
  • 2016-03-23
  • 2015-10-03
  • 2017-12-17
  • 1970-01-01
  • 2019-10-27
  • 2019-03-21
  • 1970-01-01
  • 2020-07-24
相关资源
最近更新 更多