Spring boot: ошибка 404 при вызове JSP с использованием контроллера - PullRequest
7 голосов
/ 23 марта 2019

Я получаю следующую ошибку при запуске проекта с помощью Spring Tool Suite,

enter image description here

Но в случае моей проблемы я уже добавил соответствующие зависимости в файл pom.XML. Так в чем может быть проблема?

Мой pom.XML файл зависимости следующим образом,

        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <version>2.1.3.RELEASE</version>
        </dependency>

Мой контроллер ApplicationController.java следующим образом,

package com.example.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class ApplicationController {

    @RequestMapping("/")
    public String Welcome() {
        return "welcomepage";
    }
}

Мои Vives в src/main/webapp/WEB-INF/view/welcomepage.jsp Вы можете посмотреть дерево ниже,

enter image description here

И я уже изменил файл application.properties. Но все же я не могу понять, что не так.

Мой application.properties файл выглядит следующим образом,

spring.mvc.view.prefix=/WEB-INF/view/
spring.mvc.view.suffix=.jsp

Я просто печатаю привет в Моих welcomepage.jsp,

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
hello
</body>
</html>

Ответы [ 3 ]

7 голосов
/ 24 марта 2019

Похоже, вы были очень близки к рабочему приложению.Основная проблема в вашем коде в <scope>provided</scope> для вашей зависимости от Jasper.Кроме того, похоже, что вы выполняете свой код из IDE затмения с помощью метода main.

Короче говоря:

Если вы хотите запустить приложение с помощью метода main вMyApplication.java, затем просто удалите область действия provided для Джаспера.

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

Или вы можете запускать ваше приложение точно в том же состоянии, как у вас прямо сейчас с консоли:

mvn clean spring-boot:run

Но я предлагаю удалить эту область, чтобы вы могли иметь возможностьзапустите ваш код из IDE и из консоли.Кроме того, похоже, что spring-boot-starter-tomcat зависимость является избыточной (она должна быть доступна в spring-boot-starter-web).В двух словах, пожалуйста, попробуйте использовать следующий файл pom:

<?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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.3.RELEASE</version>
        <relativePath/>
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

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

        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
        </dependency>
    </dependencies>
</project>

Надеюсь, мой ответ поможет вам.

5 голосов
/ 23 марта 2019

Вам также может понадобиться добавить это в pom.xml

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

ОБНОВЛЕНИЕ 1:

Ограничение JSP

При запуске приложения Spring Boot, которое использует встроенный контейнер сервлета (и упакован в виде исполняемого архива), существуют некоторые ограничения в поддержке JSP.

  • С Jetty и Tomcat это должно работать, если вы используете военную упаковку. Исполняемая война будет работать при запуске с java -jar, а также будет развернута в любом стандартном контейнере. JSP не поддерживаются при использовании исполняемого файла jar.
  • Undertow не поддерживает JSP.
  • Создание пользовательской страницы error.jsp не переопределяет представление по умолчанию
    для обработки ошибок. Вместо этого следует использовать пользовательские страницы ошибок.

Объем

compile Это область по умолчанию, используемая, если ни одна не указана. Зависимости компиляции доступны во всех classpath проекта. Кроме того, эти зависимости распространяются на зависимые проекты.

provided Это очень похоже на компиляцию, но указывает, что вы ожидаете, что JDK или контейнер предоставят зависимость во время выполнения. Например, при создании веб-приложения для Java Enterprise Edition вы должны установить зависимость от API-интерфейса сервлета и связанных API-интерфейсов Java EE, так как веб-контейнер предоставляет эти классы. Эта область доступна только для пути к классам компиляции и тестирования и не является транзитивной.

runtime Эта область указывает, что зависимость не требуется для компиляции, но предназначена для выполнения. Он находится во время выполнения и пути к классам теста, но не в пути к классам компиляции.

Также попробуйте изменить следующее в tomcat-embed-jasper

Remove <scope>provided</scope> OR change the scope to compile <scope>compile</scope>

Ограничения JSP Пружинный пыльник JSP 404

0 голосов
/ 29 мая 2019

Мне удалось создать jar из моего приложения, а затем запустить его с помощью java -jar myapp.jar Но мне удалось запустить этот jar только с версией ниже spring-boot-starter-parent:

MyApp / pom.xml:

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

Я исследовал: Spring Boot JSP 404

...