Военный файл Spring Boot 2.1.0 не может настроить «context-path» или «включить» в JSP не работает - PullRequest
0 голосов
/ 06 января 2019

Я использую Spring Boot 2.1.0 для разработки веб-приложения. Я упаковываю коды в WAR файл с помощью maven.

Я настроил server.servlet.context-path=/marpt в файле application.properties, чтобы приложение не могло получить прямой доступ через порт ip +.
Затем я запускаю WAR, используя команду java -jar marpt.war, и она успешно запускается.
Затем я открываю запущенное веб-приложение в Chrome, возникают некоторые проблемы:
1. Страница входа в систему указывается правильно;
2. После входа в систему jsp include не работает, оба из двух типов включают команду <jsp:include page="${ctx}/home/sidebar" /> и <%@include file="../../pages/share/partial/header.jsp" %> и любые другие ссылки.

Я использую javascript для оповещения о ${ctx}, который я определил в другом файле jsp, и включаю его в начало домашней страницы с помощью <%@ include file="../../pages/common/taglibs.jsp" %>, это очень странно, taglibs.jsp может быть включен. В нем я установил <c:set var="ctx" value="${pageContext.request.contextPath}" />. На домашней странице я делаю это: alert('${pageContext.request.contextPath}'), результат / март .
Я запутался, где не так.

Я пытаюсь упаковать файл jar, он также запускается правильно, но страницы вообще не могут открываться в браузере.

Ниже приведены основные конфигурационные файлы:
POM.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.test</groupId>
    <artifactId>ma-rpt</artifactId>
    <version>1.5.0</version>
    <packaging>war</packaging>

    <name>ma-rpt</name>
    <description>Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.0.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-cache</artifactId>
        </dependency>
        <dependency>
            <groupId>net.sf.ehcache</groupId>
            <artifactId>ehcache-core</artifactId>
            <version>2.6.11</version>
        </dependency>
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-spring</artifactId>
            <version>1.4.0</version>
        </dependency>
        <!-- Shiro ehCache -->
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-ehcache</artifactId>
            <version>1.4.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>
        <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>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc7</artifactId>
            <version>12.1.0.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
        </dependency>
        <!-- jstl支持 -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>

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

    <build>
        <finalName>marpt</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
                <includes>
                    <include>application.properties</include>
                    <include>properties/*.properties</include>
                    <include>**/*.xml</include>
                    <include>**/*.tld</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/webapp</directory>
            </resource>
        </resources>
    </build>

</project>

application.properties

# Spring Public
server.port                         =8096
server.servlet.context-path         =/marpt
# Cache
spring.cache.type                   =ehcache
# Db
spring.datasource.driver-class-name =oracle.jdbc.driver.OracleDriver
spring.datasource.url               =jdbc:oracle:thin:@192.168.0.1:1521:marpt
spring.datasource.username          =admin
spring.datasource.password          =123456
# MyBatis
mybatis.config-location             =classpath:/configs/mybatis/mybatis.cfg.xml
mybatis.mapper-locations            =classpath*:/mybatis/**/*Mapper.xml
# Log
spring.output.ansi.enabled          =DETECT
logging.path                        =/data/home/www/marpt/logs
logging.file                        =ma-rpt
logging.level.*                     =DEBUG
#debug=false

rpt.project.name                    =ma-rpt
rpt.project.develop                 =true

SpringBootConfig.java

@SpringBootConfiguration
public class SpringBootConfig implements WebMvcConfigurer {

    @Override
    public void configurePathMatch(PathMatchConfigurer configurer) {
        configurer.setUseSuffixPatternMatch(false);
        configurer.setUseRegisteredSuffixPatternMatch(true);
    }

    @Override
    public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
        configurer.favorPathExtension(true)
                .favorParameter(true)
                .parameterName("format")
                .ignoreAcceptHeader(true)
                .defaultContentType(MediaType.TEXT_HTML)
                .mediaType("html", MediaType.TEXT_HTML)
                .mediaType("json", MediaType.APPLICATION_JSON)
                .mediaType("xls", MediaType.valueOf("application/vnd.ms-excel"))
                .mediaType("xlsx", MediaType.valueOf("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"));
    }

    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        Set<String> modelKeys=new HashSet<>();
        modelKeys.add("list");
        modelKeys.add("table");

        registry.jsp("/views/", ".jsp");
        registry.enableContentNegotiation(new MappingJackson2JsonView());

        XlsView xlsView=new XlsView();
        xlsView.setModelKeys(modelKeys);
        registry.enableContentNegotiation(xlsView);

        XlsxView xlsxView=new XlsxView();
        xlsxView.setModelKeys(modelKeys);
        registry.enableContentNegotiation(xlsxView);

    }
}

Main of homepage.jsp

<%@ page language="java" pageEncoding="UTF-8" errorPage="../error/error.jsp" %>
<%@ include file="../../pages/common/taglibs.jsp" %>

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8"/>
        <meta http-equiv="content-type" content="text/html;charset=UTF-8"/>
        <title>Home</title>
        <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
        <meta name="viewport" content="width=device-width, initial-scale=1.0"/>

        <link href="${ctx}/assets/global/plugin/bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
        <script src="${ctx}/assets/global/plugin/jquery/jquery.min.js" type="text/javascript"></script>
    </head>
    <body >
        <div class="page-wrapper">
            <%@include file="../../pages/share/partial/header.jsp" %>
            <div id="pageContainer" class="page-container">
                <jsp:include page="${ctx}/home/sidebar" />
                <jsp:include page="${ctx}/home/content" />
            </div>
        </div>

        <script src="${ctx}/assets/global/plugin/bootstrap/js/bootstrap.min.js" type="text/javascript"></script>
        <script>
            $(function() {
                alert('${ctx}');  // result is '/marpt'
                alert('${pageContext.request.contextPath}');    // result is '/marpt' too
            });
        </script>
    </body>
</html>

Структура приложения:

структура приложения

Итак, если я определю конфигурацию server.servlet.context-path=/marpt, как я могу заставить <%@include... или <jsp:include... работать в файле jsp в Spring Boot? Спасибо большое!

======================== снабжение ====================== =====
Я тоже пытался понизить версию 1.5.18, изменил свойства до server.context-path=/marpt, проблема все еще существует, не относится к версии весенней загрузки.

В число включаемых файлов входят некоторые html-теги, js и некоторые атрибуты модели связывания (такие как $ {param.dt} ..), файлы JSP, которые НЕ отображаются на сервлет . Если я настраиваю их по пути статических ресурсов, также происходит сбой.

======================== выяснить ===================== ======
см. комментарий JB Nizet

1 Ответ

0 голосов
/ 06 января 2019

Добавьте следующий пружинный тег, чтобы получить значение свойства "server.servlet.context-path", используя @environment.getProperty ('some.property') должно работать.

<spring:eval expression="@environment.getProperty('server.servlet.context-path')" var="ctx" />
<link href="${ctx}/assets/global/plugin/bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
...