2012-03-01 8 views
6

यह मेरा पहला प्रश्न है (इसलिए नम्र रहें :))। मैंने हर जगह देखा है और मेरी समस्या का जवाब नहीं मिला (प्रक्रिया में थोड़ा पागल भी चला गया)।अपाचे टॉमकैट: अनुरोधित संसाधन() उपलब्ध नहीं है (संसाधन का आकलन करते समय जो उपलब्ध होना चाहिए)

मैं जावा ईई डेवलपर्स (ग्रहण प्लेटफार्म 3.7.2 और जावा ईई आईडीई 1.4.2) के लिए टोमकैट 7 और नवीनतम ग्रहण आईडीई का उपयोग कर रहा हूं। तो, मुझे यह त्रुटि मिलती है: "http://127.0.0.1:8080/myTest/WEB-INF/jsp/savename.jsp तक पहुंचने पर अनुरोधित संसाधन() उपलब्ध नहीं है"। मैंने कई बार जांच की है कि यह फ़ाइल डिस्क पर सटीक फ़ोल्डर में है। मैंने एक्लिप्स के अंदर टॉमकैट चलाने और टोमकैट में निर्यात किए गए .war को तैनात करने का प्रयास किया है। हर बार एक ही त्रुटि पॉप अप करता है।

मेरे फाइलें:

myTest/index.jsp 
myTest/WEB-INF/html/GetName.html 
myTest/WEB-INF/jsp/savename.jsp 

जब मैं चलाने के "http: // localhost/myTest" index.jsp हमेशा सही ढंग से चले। तब मैं

"<jsp:forward page="WEB-INF/html/GetName.html"></jsp:forward>" 

का उपयोग अपने index.jsp अंदर GetName.html नेविगेट करने के लिए और वह भी काम करता है। समस्या GetName.html में पॉप अप होता है:

<form action='WEB-INF/jsp/savename.jsp' method="post" > 
What's your name? <INPUT TYPE=TEXT NAME=username SIZE=20> 
<P><INPUT TYPE=SUBMIT> 
</form> 

जब मैं रूप में सबमिट बटन दबाते हैं, तो ब्राउज़र पर रीडायरेक्ट: http://127.0.0.1:8080/myTest/WEB-INF/jsp/savename.jsp और त्रुटि दिखाई नहीं देता।

इसलिए मैं वास्तव में समझने के नहीं क्यों यह हो रहा है ... चूक बिलाव क्षुधा पूरी तरह से काम ...

पी.एस. मैं भी कोशिश की है manualy फ़ाइलों को नेविगेट:

http://127.0.0.1:8080/myTest/WEB-INF/html/GetName.html 
http://127.0.0.1:8080/myTest/WEB-INF/jsp/savename.jsp 

लेकिन मैं यह भी त्रुटि मिलती है (यहां तक ​​कि जब idex.jsp भी बिना किसी समस्या के GetName.html पर जाता) ..

किसी भी मदद की बहुत apreciated है! धन्यवाद !!

उत्तर

4

आप वेब-आईएनएफ निर्देशिका (मेटा-आईएनएफ के लिए भी मान्य) के तहत रखी गई किसी भी फाइल/कलाकृतियों पर सीधे नेविगेट नहीं कर सकते हैं। यह सर्वलेट इंजन की एक सुरक्षा सुविधा है: WEB-INF के तहत सामग्री सुरक्षित है और से URL के माध्यम से "बाहर" पहुंच योग्य नहीं है। अन्यथा, कोई भी उपयुक्त यूआरएल को इकट्ठा करके एप्लिकेशन/डाटाबेस कॉन्फ़िगरेशन इत्यादि जैसे संवेदनशील विवरण पढ़ सकता है।

कारण है कि "jsp: आगे" टैग अभी भी/में फ़ाइलों तक पहुँचने की वेब-INF निर्देशिका के अंतर्गत सक्षम है कि आगे आंतरिक करता है सर्वर पर, यानी अनुरोध पहले से ही सर्वलेट इंजन के लिए आ गया है और है index.jsp निष्पादित किया गया है, इसलिए सर्वलेट इंजन ने इसके सुरक्षा कर्तव्यों को पूरा किया है और अब उदाहरण के लेखक हैं index.jsp यह तय करने के लिए ज़िम्मेदार है कि कौन सी फाइलों को एक्सेस किया जाना है।

पीएस
"जेएसपी: आगे" टैग का उपयोग करने के अलावा, आप निर्देश (स्थिर शामिल) का उपयोग कर सकते हैं, उदाहरण के लिए

<%@ include file=”/WEB-INF/dir/file.extension” %> 

या इसमें जेएसपी टैग (गतिशील शामिल) शामिल है, उदा।

<jsp:include page=”/WEB-INF/dir/file.extension” /> 

इन दोनों के बीच अंतरों को गुमराह किया जा सकता है, अच्छे परिणाम उदा। http://java.sun.com/products/jsp/tags/11/syntaxref117.html
http://java.sun.com/products/jsp/tags/11/syntaxref1112.html
http://www.coderanch.com/how-to/java/IncludesActionDirective
http://docs.oracle.com/cd/B14099_17/web.1012/b14014/keydev.htm#i1005631

+0

धन्यवाद आदमी! लेकिन समस्या अभी भी बनी हुई है ... मैं विभिन्न फाइलों के अंदर विभिन्न फाइलों को कैसे जोड़ सकता हूं? GetName.html में फॉर्म WEB-INF/jsp/savename.jsp तक क्यों नहीं पहुंच सकता है? समाधान क्या होगा? (रूट निर्देशिका में सभी फाइलों को छोड़कर ...) – MoD

+1

कहने के लिए खेद है, लेकिन सादा जेएसपी के साथ कोई और समाधान नहीं है। फॉर्म डेटा ब्राउज़र द्वारा भेजा जाता है, इसलिए ब्राउज़र यूआरएल को इकट्ठा करता है और उस यूआरएल का उपयोग कर डेटा को सर्वर भेजता है, और सर्वर कहता है "नहीं, आप वेब-आईएनएफ में नहीं जा सकते"। इसलिए आपको रूट निर्देशिका में * savename.jsp * डालना होगा, या रूट निर्देशिका के तहत एक और निर्देशिका डालना होगा, और उपयोग करने के लिए WEB-INF के अंतर्गत फ़ाइलों से वास्तविक सामग्री को लोड करने के लिए टैग या निर्देश शामिल करना होगा। – t0r0X

+3

मुझे लगता है कि मुझे पता है कि आप क्या हासिल कर रहे हैं: सभी जेएसपी और संबंधित कोड की रक्षा/छुपाएं। जैसा कि मैंने कहा था कि सादा जेएसपी के साथ नहीं किया जा सकता है। आपको एक सर्वलेट या फ़िल्टर बनाने की ज़रूरत है जो "गेटवे" के रूप में कार्य करता है और इसे यूआरआई-आईएनएफ के नीचे/नीचे नहीं यूआरआई में मैप किया जाता है, और जो आपके वेबपेज को वेब-आईएनएफ के अंदर अनुरोध करता है। मैं बजाय एक ढांचे का उपयोग करने की सिफारिश करता हूं जो आपको ऐसी क्षमताओं की पेशकश करता है, जैसे उदा। वसंत एमवीसी ढांचे। मुझे आपको कुछ पॉइंटर्स दें: http://static.springsource.org/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-features – t0r0X