2015-07-14 25 views
5

Ich versuche, das gesamte Spring Framework zu verstehen. Meiner Kenntnis nach machen die relativ neuen Techniken der Verwendung von Gradle viele der Tutorials und Posts online veraltet?Spring hält String statt JSP/HTML-Inhalt

Das Hauptproblem, in dem ich ausgeführt werde, wenn ich versuche, eine JSP- oder HTML-Seite anzuzeigen, zeigt der Körper der Webseite Text: "filename.jsp".

Das Projekt wurde von New-> Other-> Spring Starter Project mit Gradle und STS 3.7 erstellt. Ziel ist es, eine Webanwendung mit MVC-Muster zu erstellen.

Ordnerstruktur:

TEST

--Spring Elements (von STS erstellt)

--src/main/java
++ - TEST
+++ + - TestApplication.java (erstellt von STS)
++ - TEST.Controller
++++ - JSPController.java

--sec/main/resources
++ - application.properties (von STS erstellt, leere Datei)

--src/main/webapp (** ich dieses Verzeichnis erstellt, ist aber dies erforderlich)
++ - WEB-INF
++++ - home.jsp
++++ - home.html
++++ - web.xml (** Weitere Frage unten)

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' 
} 

Als ich nach http://localhost:8080/jsp gehen, die HTML-Seite hat den Körper: /webapp/WEB-INF/home.jsp

So ist die jsp überhaupt nicht angezeigt wird. Ich habe versucht, HTML und mit oder ohne Methode = RequestMethod.GET/POST. Nichts funktioniert.

** Zusätzliche Frage: Eine Menge von Online-Posts/Tutorial geht in XML-Dateien, zum Beispiel web.xml. Nach meinem Verständnis werden diese nicht mehr benötigt oder benötigt, weil Spring + Gradle automatisch eine .xml aus den @notations generiert?

Antwort

12

Das ist, weil Sie @RestController anstelle von @Controller verwenden.

aus Ihrer Klasse Annotation ändern

@RestController 
public class JSPController { 
    ... 
} 

zu:

@Controller 
public class JSPController { 
    ... 
} 

Wenn Sie eine Klasse mit RestController mit Anmerkungen versehen, die alle mit @RequestMapping kommentierten Methoden gehen davon aus @ResponseBody Semantik standardmäßig. Mit anderen Worten, Ihre Methode serialisiert die Zeichenfolge /webapp/WEB-INF/home.jsp als JSON, anstatt ihren Wert einer Ansicht zuzuordnen.

+0

Danke für die schnelle Antwort, aber wenn ich es zu @Controller ändern, erhalte ich einen Fehler im Browser: Whitelabel Error Page. Es ist ein unerwarteter Fehler aufgetreten (Typ = Nicht gefunden, Status = 404). – JustAName

+0

Jetzt haben Sie ein anderes Problem! :) Da Sie Spring Boot verwenden, sollten Ihre Ansichten unter dem Verzeichnis 'src/main/resources/templates' stehen, so dass Sie das Verzeichnis' src/main/webapp' nicht benötigen. Ich schlage auch vor, dass Sie JSP nicht als Ihre Ansichtstechnologie verwenden (besonders wenn Sie mit Spring-Boot gepaart sind). Bitte lesen Sie das Referenzhandbuch hier: http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#boot-features-spring-mvc-template-engines –

+0

Vielen Dank. Ich lese jetzt den Ref-Guide. Sie erwähnten das Erstellen einer pom.xml. Was mich auf die obige Zusatzfrage zurückbringt. Muss ich pom.xml oder irgendeine .xml machen, obwohl ich mit grddle baue? – JustAName

Verwandte Themen