스프링 부트 웹 응용 프로그램에서 JSP 파일이 렌더링되지 않음
내장된 Tomcat(기본값)을 사용하여 Spring Boot 웹 응용 프로그램을 실행하고 있습니다.컨트롤러에서 지정한 뷰를 렌더링할 때 JSP 파일을 사용할 경우 JSP는 렌더링되지 않고 내용을 인쇄합니다.예를 들어 다음과 같습니다.
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html lang="en">
<head></head>
<body>Test</body>
</html>
브라우저에서 보기를 렌더링할 때 예상 내용 대신 위의 내용이 표시됩니다.
Test
하세요.pom.xml
Tomcat Tomcat JSP 」 음 specifies specifies 、 「 Tomcat JSP 」
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
Embedded Tomcat은 JSP 렌더링을 옵션으로 취급하는 것 같습니다.
다음에 기술한 바와 같이 이 JAR도 필요할 수 있습니다.
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<scope>provided</scope>
</dependency>
(이 JAR은 서블릿 컨테이너에 포함되어 있어야 하기 때문에 추가했습니다.
1의 2의 jstl(jasper' jstl)에는가 아니라가 필요합니다.pom.xml
이게 먹혀들게.
<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>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
</dependencies>
나는 댄이 말한 것처럼 똑같이 일했다.제공된 범위를 제거합니다.
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
고마워!
나 역시 효과가 있었지만, 나는 그것을 없애야 했다.
<scope>provided</scope>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
그래들(메이븐을 따라잡고 있는 것)을 사용하는 것이 좋습니다.build.gradle 파일에서 이 종속성을 사용합니다.
//JSP에 필요한 의존관계
providedRuntime 'org.apache.tomcat.embed:tomcat-embed-jasper'
- 확인해 주세요.
spring-boot-starter-tomcat
,tomcat-embed-jasper
★★★★★★★★★★★★★★★★★」jstl
pom.xml을 사용하다 - 패키징 타입이 다음과 같은지 확인합니다.
war
. - 여러 이 [Run [ ]-> [ 하여 [Run]-> [ Edit configuration ]-> [ Configuration ]를 선택하거나 합니다.
$MODULE_WORKING_DIR$
' Directory에 있습니다작업 디렉토리'입니다.
바로 그겁니다.
JSP의 통합은 간단하기 때문에 설정을 빠뜨린 것 같습니다.
1 - tomcat-embad-interminal 의존관계
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
2 - 다음 구성은 application.properties입니다.
spring.mvc.view.prefix: /
spring.mvc.view.suffix: .jsp
아직 의문이 남아 있습니다.다음 링크에서 확인해 주세요.
그 이유는 @Controller 대신 @RestController 주석을 사용하고 있기 때문입니다.
RestController를 사용하여 클래스에 주석을 달면 기본적으로는 @RequestMapping으로 주석을 단 모든 메서드가 @ResponseBody의 의미를 가정합니다.즉, 메서드 #index는 String /webapp/WEB-INF/index.jsp 값을 뷰에 매핑하지 않고 JSON으로 시리얼화합니다.
답 중 하나에서 언급했듯이, 그것은 반드시
@Controller 퍼블릭클래스 YourController {...}
이전에 설명한 것 외에 문제를 해결했습니다.
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
added ViewResolver:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
@Configuration
@ComponentScan
@EnableWebMvc
public class SpringServletConfig {
@Bean
public InternalResourceViewResolver resolver() {
InternalResourceViewResolver vr = new InternalResourceViewResolver();
vr.setPrefix("/WEB-INF/jsps/");
vr.setSuffix(".jsp");
return vr;
}
}
from: Spring MVC가 404로 응답하여 "No mapping for HTTP request with URI [...in Dispatcher Servlet]"을 보고하는 이유는 무엇입니까?
종속성을 변경하기만 하면 됩니다.
<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-jasper</artifactId>
</dependency>
Spring-MVC 및 임베디드 Tomcat 서버를 사용한Spring-Boot의 풀 그래들 셋업:
build.gradle
buildscript {
ext {
springBootVersion = '1.5.8.RELEASE'
}
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java'
apply plugin: 'org.springframework.boot'
//WEB-MVC
compile 'org.springframework.boot:spring-boot-starter-web:1.5.8.RELEASE'
compile 'org.apache.tomcat.embed:tomcat-embed-jasper:9.0.1'
compile 'javax.servlet:jstl:1.2'
App.class
@SpringBootApplication
public final class App {
public static void main(final String[] args) {
new SpringApplicationBuilder(App.class)
.build(args)
.run();
}
@Bean
public ViewResolver viewResolver() {
final InternalResourceViewResolver r = new InternalResourceViewResolver();
r.setPrefix("/WEB-INF/jsp/");
r.setSuffix(".jsp");
return r;
}
}
클래스 패스에는 jsp 컴파일러 jar(tomcat-jasper)가 필요합니다.내장형 Tomcat은 함께 제공되지 않습니다.이미 추가된 경우 tomcat-embed-jasper.jar를 제거하고 아래에 추가합니다.
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jasper</artifactId>
<version>9.0.1</version>
</dependency>
Spring Boot와 Spring Boot가 변화하고 있는 것을 알 수 있듯이, 여기 최신 솔루션이 있습니다.
build.gradle
:
dependencies {
compile group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: '2.3.0.RELEASE'
compile group: 'org.apache.tomcat.embed', name: 'tomcat-embed-jasper', version: '9.0.35'
}
IndexController.java
있습니다.
@Controller
public class IndexController {
@RequestMapping("/index")
public String index(Model model) {
model.addAttribute("name", "jancsi");
return "index";
}
}
WebConfig.java
@Configuration
@EnableWebMvc
@ComponentScan
public class WebConfig implements WebMvcConfigurer {
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
registry.jsp("/WEB-INF/views/", ".jsp");
}
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
}
""를 사용하는 ""를 사용합니다.WebMvcConfigurerAdapter
「 」를 합니다.WebMvcConfigurer
디폴트 서블릿핸들러를 유효하게 하는 것을 잊지 말아 주세요.
다음으로 jsp 파일의 폴더 구조를 나타냅니다.
src/main/webapp
└── WEB-INF
└── views
└── index.jsp
tomcat-embed-jasper를 사용할 수 없기 때문에 tomcat-embed-jasper의 maven 의존관계에서 제공해야 할 수 있습니다.
예:
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<!--scope>provided</scope-->
</dependency>
1.5.8을 사용하고 싶다면.RELEASE 또는 이와 유사한 실행 가능한 예시와 설명은 https://www.surasint.com/spring-boot-jsp/에 있습니다.
pom.xml에 이 파일만 있으면 됩니다.
http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 org.spring framework.spring-boot-boot-parent 1.5.8을 실행합니다.풀어주다
<groupId>com.surasint.example</groupId>
<artifactId>spring-boot-02</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<properties>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.source>1.8</maven.compiler.source>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- JSP -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<!-- jstl for jsp -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
그리고 이것은 application.properties에 있습니다.
spring.mvc.view.prefix: /WEB-INF/jsp/
spring.mvc.view.suffix: .jsp
그런 다음 /WEB-INF/jsp/ 폴더에 jsp를 보관합니다.
이것이 컨트롤러입니다.
package com.surasint.example.web.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import java.util.Date;
import java.util.Map;
@Controller
public class TestController {
@GetMapping("/testjsp")
public String list(Map<String, Object> model) {
model.put("this_time",new Date().toString());
return "testjsp-view";
}
}
나는 이 문제를 가지고 있었고 마침내 해결했어!
는 JSP 를 JSP에 입니다./WEB-INF/index.jsp
그러나 이 페이지는 서블릿이나 컨트롤러에 의해 처리되지 않고 직접 제공됩니다.그러므로, 그것은 편집될 가능성이 없었다.
솔루션:
★★
index.jsp
로 됩니다.views
.★★
web.xml
루트 디렉토리의 제어를 디스패처 서블릿에 넘깁니다.<!-- WEB-INF/web.xml --> <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <display-name>18-655_lab_1</display-name> <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>/</url-pattern> </servlet-mapping> </web-app>
★★
dispatcher-servlet.xml
거죠.views
「」로 ..jsp
.<!-- WEB-INF/dispatcher-servlet.xml --> <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" 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 http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <mvc:annotation-driven /> <context:component-scan base-package="com.app.controller" /> <mvc:default-servlet-handler /> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix"> <value>/WEB-INF/views/</value> </property> <property name="suffix"> <value>.jsp</value> </property> </bean> </beans>
" " " 를 합니다.
base-package
한dispatcher-servlet.xml
ModelAndView model model model model 。package com.app.controller; @Controller @RequestMapping(value = "/") public class RootController { @RequestMapping(method = RequestMethod.GET) public ModelAndView homeGet() { return new ModelAndView("index", "message", "IT WORKS!!!"); } }
- " "
new ModelAndView("index", "message", "IT WORKS!!!")
는는의의의의dispatcher-servlet
looks looks이 looks 、 looks 、 looks looks looks looks 、 。"/WEB-INF/views/" + "index" + ".jsp"
.- 파일이되어 jsp의 모든 됩니다.
${message}
IT WORKS!!!
.
으로 할 은 '아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아!${message}
집 index.jsp
filename을 클릭합니다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<h1>${message}</h1>
</body>
</html>
Spring Boot 버전 1.5.10을 사용하는 경우릴리스, 아래 maven 의존 관계를 추가하는 데 성공했습니다.
주의:제공하지 않는 데만 힘썼다<scope>
이 두 사람을 위해서.
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<!--<scope>provided</scope>-->
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<!--<scope>provided</scope>-->
</dependency>
또한 application.properties 파일에서 다음 구성을 제공합니다.
spring.mvc.view.prefix: /WEB-INF/jsp/ spring.mvc.view.suffix: .jsp
저는 jsp 파일명을 내용이 아닌 브라우저에 출력하는 것과 같은 문제에 직면했습니다.
pom.xml에 jsp 페이지 렌더링용 아래 스니펫을 추가하면 올바르게 렌더링됩니다.
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherSe rvlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
I took the * off so it was just from web.xml
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherSe rvlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
JSP의 제한에 대해 검토해 주십시오.를 설정할 수 없습니다.packaging
고객님의pom
로.jar
이 JSP의 제한사항을 읽어보십시오.
언급URL : https://stackoverflow.com/questions/20602010/jsp-file-not-rendering-in-spring-boot-web-application
'programing' 카테고리의 다른 글
AngularJS에서 사용자가 템플릿/페이지를 떠날 때 어떻게 감지합니까? (0) | 2023.03.14 |
---|---|
react-select drowdown에서 zIndex를 변경하는 방법 (0) | 2023.03.14 |
JSON을 나타내는 Redis 문자열 vs Redis 해시: 효율성? (0) | 2023.03.14 |
application.properties를 사용하여 봄에 CSRF를 비활성화하려면 어떻게 해야 합니까? (0) | 2023.03.14 |
WordPress에서 wp_get_nav_menu_items를 사용하여 커스텀 메뉴/서브메뉴 시스템을 생성하는 방법은 무엇입니까? (0) | 2023.03.14 |