2015-07-14 15 views
5

की बजाय स्ट्रिंग लौटने रखता है मैं पूरे स्प्रिंग फ्रेमवर्क को समझने की कोशिश कर रहा हूं। मेरे ज्ञान के लिए, ग्रेडल का उपयोग करने की अपेक्षाकृत नई तकनीकें ऑनलाइन ट्यूटोरियल और पोस्ट को बहुत पुरानी बनाती हैं?स्प्रिंग जेएसपी/एचटीएमएल सामग्री

जब मैं एक जेएसपी या एचटीएमएल पेज प्रदर्शित करने का प्रयास करता हूं तो मुख्य मुद्दा यह है कि वेबपृष्ठ का बॉडी टेक्स्ट दिखाता है: "filename.jsp"।

यह परियोजना नई-> अन्य-> स्प्रिंग स्टार्टर प्रोजेक्ट द्वारा ग्रैडल और एसटीएस 3.7 का उपयोग करके बनाई गई थी। लक्ष्य एमवीसी पैटर्न का उपयोग कर एक वेब अनुप्रयोग बनाना है।

फ़ोल्डर संरचना:

टेस्ट

--Spring तत्वों (एसटीएस द्वारा बनाई गई)

--src/मुख्य/जावा
++ - टेस्ट
+++ + - TestApplication.java (एसटीएस द्वारा निर्मित)
++ - टेस्ट। नियंत्रक
++++ - जेएसपी नियंत्रक.जावा

--sec/मुख्य/संसाधनों
++ - application.properties (एसटीएस द्वारा बनाई गई, खाली फ़ाइल)

--src/मुख्य/webapp (** मैं इस निर्देशिका बनाया है, लेकिन है इस आवश्यक)
++ - वेब-INF
++++ - home.jsp
++++ - home.html
++++ - web.xml (** अतिरिक्त नीचे प्रश्न)

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

जब मैं http://localhost:8080/jsp पर जाते हैं, html पृष्ठ शरीर है: /webapp/WEB-INF/home.jsp

तो jsp बिल्कुल दिखाई नहीं दे रहा। मैंने एचटीएमएल की कोशिश की है और विधि के बिना या request =ethodMethod.GET/POST। कुछ भी काम नहीं करता है।

** अतिरिक्त प्रश्न: कई ऑनलाइन पोस्ट/ट्यूटोरियल .xml फ़ाइलों में जाता है, उदाहरण के लिए, web.xml। मेरी समझ के लिए, इन्हें अब आवश्यक या आवश्यक नहीं है क्योंकि वसंत + ग्रेडल स्वचालित रूप से @notations से .xml उत्पन्न करता है?

उत्तर

12

ऐसा इसलिए है क्योंकि आप @Controller के बजाय @RestController का उपयोग कर रहे हैं।

करने से

@RestController 
public class JSPController { 
    ... 
} 

अपनी कक्षा एनोटेशन बदलें: जब आप RestController के साथ एक कक्षा व्याख्या

@Controller 
public class JSPController { 
    ... 
} 

, सभी तरीकों @RequestMapping साथ एनोटेट डिफ़ॉल्ट रूप से @ResponseBody अर्थ विज्ञान मान। दूसरे शब्दों में, आपकी विधि #home स्ट्रिंग /webapp/WEB-INF/home.jsp को जेएसओएन के रूप में क्रमबद्ध करने के बजाय, इसके मूल्य को मैप करने के बजाय क्रमबद्ध कर रही है।

+0

तेज प्रतिक्रिया के लिए धन्यवाद, लेकिन जब मैं इसे @ नियंत्रक में बदलता हूं, तो मुझे ब्राउज़र पर एक त्रुटि मिल रही है: व्हाइटेलबेल त्रुटि पृष्ठ। एक अनपेक्षित त्रुटि थी (प्रकार = नहीं मिला, स्थिति = 404)। – JustAName

+0

अब आपको एक और समस्या है! :) चूंकि आप स्प्रिंग बूट का उपयोग कर रहे हैं, इसलिए आपके विचार निर्देशिका 'src/main/resource/templates'' के अंतर्गत रखा जाना चाहिए, इसलिए आपको निर्देशिका 'src/main/webapp' की आवश्यकता नहीं है। मैं यह भी सुझाव देता हूं कि आप अपनी दृश्य तकनीक के रूप में जेएसपी का उपयोग न करें (खासकर जब वसंत-बूट के साथ जोड़ा जाता है)। कृपया यहां संदर्भ मार्गदर्शिका पढ़ें: http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#boot-features-spring-mvc-template-engines –

+0

धन्यवाद। मैं अब रेफरी गाइड पढ़ रहा हूँ। उन्होंने एक pom.xml बनाने का उल्लेख किया। जो मुझे ऊपर दिए गए अतिरिक्त प्रश्न पर वापस लाता है। क्या मुझे pom.xml या किसी भी .xml ईवेंट बनाने की ज़रूरत है, क्या मैं धीरे-धीरे निर्माण कर रहा हूं? – JustAName

संबंधित मुद्दे

 संबंधित मुद्दे