2015-07-14 19 views
5

Tôi đang cố gắng hiểu toàn bộ Khung công tác mùa xuân. Theo hiểu biết của tôi, các kỹ thuật tương đối mới của việc sử dụng gradle làm cho rất nhiều hướng dẫn và bài đăng trực tuyến đã lỗi thời?Mùa xuân tiếp tục trả về chuỗi thay vì nội dung jsp/html

Vấn đề chính mà tôi đang gặp phải là khi tôi cố gắng hiển thị trang jsp hoặc html, nội dung của trang web hiển thị văn bản: "filename.jsp".

Dự án được tạo bởi New-> Other-> Spring Starter Project bằng Gradle và STS 3.7. Mục đích là tạo một ứng dụng web bằng cách sử dụng mẫu MVC.

cấu trúc thư mục:

THI

--Spring Elements (tạo ra bởi STS)

--src/main/java
++ - THI
+++ + - TestApplication.java (được tạo bởi STS)
++ - TEST.Controller
++++ - JSPController.java

--sec/main/nguồn
++ - application.properties (tạo ra bởi STS, file EMPTY)

--src/main/webapp (** Tôi tạo ra thư mục này, nhưng là yêu cầu này)
++ - WEB-INF
++++ - home.jsp
++++ - home.html
++++ - web.xml (** bổ sung câu hỏi bên dưới)

TestApplication.java

package TEST; 

import org.springframework.boot.SpringApplication; 
import org.springframework.boot.autoconfigure.SpringBootApplication; 

@SpringBootApplication 
public class TestApplication { 

    public static void main(String[] args) { 
     SpringApplication.run(TestApplication.class, args);   
    } 
} 

home.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Test</title> 
</head> 
<body> 

    <h1>Test 1</h1> 

    <form> 
     First name:<br> <input type="text" name="firstname"> <br> 
     Last name:<br> <input type="text" name="lastname"> 
    </form> 

</body> 
</html> 

JSPController.java

package TEST.controller; 

import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.bind.annotation.RestController; 

@RestController 
public class JSPController { 

    @RequestMapping(value = "/jsp", method = RequestMethod.GET) 
    public String home(){ 
     return "/webapp/WEB-INF/home.jsp"; 
    } 

} 

web.xml

//empty file right now 

build.gradle

buildscript { 
    ext { 
     springBootVersion = '1.2.5.RELEASE' 
    } 
    repositories { 
     mavenCentral() 
    } 
    dependencies { 
     classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") 
     classpath("io.spring.gradle:dependency-management-plugin:0.5.1.RELEASE") 
    } 
} 

apply plugin: 'java' 
apply plugin: 'eclipse' 
apply plugin: 'idea' 
apply plugin: 'spring-boot' 
apply plugin: 'io.spring.dependency-management' 

jar { 
    baseName = 'TEST' 
    version = '0.0.1-SNAPSHOT' 
} 
sourceCompatibility = 1.8 
targetCompatibility = 1.8 

repositories { 
    mavenCentral() 
} 


dependencies { 
    compile("org.springframework.boot:spring-boot-starter-web") 
    testCompile("org.springframework.boot:spring-boot-starter-test") 
} 


eclipse { 
    classpath { 
     containers.remove('org.eclipse.jdt.launching.JRE_CONTAINER') 
     containers 'org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8' 
    } 
} 

task wrapper(type: Wrapper) { 
    gradleVersion = '2.3' 
} 

Khi tôi đi đến http://localhost:8080/jsp, trang html có cơ thể: /webapp/WEB-INF/home.jsp

Vì vậy, jsp không hiển thị gì cả. Tôi đã thử html và có hoặc không có phương pháp = RequestMethod.GET/POST. Không có gì hiệu quả.

** Câu hỏi bổ sung: Rất nhiều bài đăng/hướng dẫn trực tuyến đi vào tệp .xml, ví dụ: web.xml. Theo hiểu biết của tôi, những điều này không còn cần thiết hoặc cần thiết vì spring + gradle tạo một .xml tự động từ @notations?

Trả lời

12

Đó là vì bạn đang sử dụng @RestController thay vì @Controller.

Thay đổi chú thích lớp học của bạn từ

@RestController 
public class JSPController { 
    ... 
} 

tới:

@Controller 
public class JSPController { 
    ... 
} 

Khi bạn chú thích một lớp học với RestController, tất cả các phương pháp chú thích với @RequestMapping giả @ResponseBody ngữ nghĩa theo mặc định. Nói cách khác, phương pháp của bạn #home đang tuần tự hóa chuỗi /webapp/WEB-INF/home.jsp làm JSON, thay vì ánh xạ giá trị của nó cho chế độ xem.

+0

Cảm ơn bạn đã phản hồi nhanh, nhưng khi tôi đổi thành @Controller, tôi nhận được lỗi trên trình duyệt: Trang Lỗi trắng. Đã xảy ra lỗi không mong muốn (loại = Không tìm thấy, trạng thái = 404). – JustAName

+0

Bây giờ bạn có một vấn đề khác! :) Vì bạn đang sử dụng Spring Boot, các khung nhìn của bạn nên được đặt trong thư mục 'src/main/resources/templates', vì vậy bạn không cần thư mục' src/main/webapp'. Tôi cũng đề nghị bạn sử dụng không sử dụng JSP như công nghệ xem của bạn (đặc biệt khi kết hợp với khởi động mùa xuân). Vui lòng đọc hướng dẫn tham khảo tại đây: http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#boot-features-spring-mvc-template-engines –

+0

Cảm ơn. Im đọc hướng dẫn ref bây giờ. Họ đã đề cập việc tạo một tệp pom.xml. Điều này đưa tôi trở lại câu hỏi bổ sung ở trên. Tôi có cần phải tạo pom.xml hoặc bất kỳ sự kiện .xml nào mà tôi đang xây dựng bằng gradle không? – JustAName

Các vấn đề liên quan