2013-02-01 15 views
32

में स्वागत फ़ाइल सूची को कॉन्फ़िगर कैसे करें मेरे पास यह मेरे web.xml दस्तावेज़ में है। मैं एक स्वागत सूची रखने की कोशिश कर रहा हूं इसलिए मुझे होम पेज के लिए पथ टाइप करने की आवश्यकता नहीं है। लेकिन हर बार मेरे टॉमकैट पेज में एक क्लिक पर क्लिक किया गया यह प्रदर्शित करता है अनुरोधित संसाधन उपलब्ध नहीं है।web.xml

<listener> 
    <listener-class>web.Init</listener-class> 
</listener> 

<welcome-file-list> 
    <welcome-file>index.jsp</welcome-file> 
</welcome-file-list> 

<servlet> 
    <servlet-name>index</servlet-name> 
    <servlet-class>web.IndexServlet</servlet-class> 
</servlet> 

<servlet-mapping> 
    <servlet-name>index</servlet-name> 
    <url-pattern>/index</url-pattern> 
</servlet-mapping> 

jsp पेज

package web; 

import java.io.IOException; 

import javax.servlet.RequestDispatcher; 
import javax.servlet.ServletConfig; 
import javax.servlet.ServletContext; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import org.apache.log4j.Logger; 

public class IndexServlet extends HttpServlet 
{ 
    private Logger logger = Logger.getLogger(this.getClass()); 
    private RequestDispatcher jsp; 

    public void init(ServletConfig config) throws ServletException 
    { 
     ServletContext context = config.getServletContext(); 
     jsp = context.getRequestDispatcher("/WEB-INF/jsp/index.jsp"); 
    } 

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException 
    { 
     logger.debug("doGet()"); 
     jsp.forward(req, resp); 
    } 
} 

के लिए मेरे सर्वलेट क्यों कि यह अभी भी काम नहीं कर रहा? मैं अभी भी इस सही ढंग से कैसे करना है मेरी यूआरएल में/सूचकांक टाइप करने की आवश्यकता है ...?

+0

वास्तव में क्या आप अपने URL में प्रवेश कर रहे हैं, तो आप एक index.html पृष्ठ मौजूदा है ?? –

+0

उदाहरण के लिए मैंने टॉमकैट प्रबंधक में अपने वेबएप पर क्लिक किया। यह यूआरएल http: // localhost: 8080/myProj/बहुत पहले प्रदर्शित करेगा। इसलिए मुझे अपना स्वागत पृष्ठ खोलने के लिए उस यूआरएल के बाद भी इंडेक्स टाइप करना होगा। इसके साथ क्या wring? – PeterJohn

+0

आपकी स्वागत फ़ाइल [संदर्भ रूट] /index.jsp स्वागत पृष्ठ के लिए सर्वलेट नहीं कहा जाएगा। – DwB

उत्तर

51

आपको /WEB-INF/jsp/index.jsp में जेएसपी फ़ाइल /index.jsp में डालने की आवश्यकता है। इस तरह से पूरा सर्वलेट रास्ते से superflous है।

WebContent 
|-- META-INF 
|-- WEB-INF 
| `-- web.xml 
`-- index.jsp 

आप पूरी तरह सकारात्मक है कि आप एक सर्वलेट इस अजीब तरीके से लागू करने की जरूरत है कर रहे हैं, तो आप इसके /index.jsp बजाय /index का एक URL पैटर्न पर नक्शा चाहिए। config के बजाय आपको request से अनुरोध प्रेषक प्राप्त करने के लिए केवल इसे बदलने की आवश्यकता है और पूरे init() विधि से छुटकारा पाएं।

मामले में आप वास्तव में एक "घर पृष्ठ सर्वलेट" है करने का इरादा (और इस प्रकार नहीं एक स्वागत योग्य फ़ाइल — जो एक बिल्कुल अलग उद्देश्य है, जो जब एक फ़ोल्डर अनुरोध किया जा रहा है परोसा जा सकता था अर्थात् डिफ़ॉल्ट फ़ाइल , जो इस प्रकार विशेष रूप से रूट फ़ोल्डर नहीं है), तो आपको रिक्त स्ट्रिंग यूआरएल पैटर्न पर सर्वलेट मैप करना चाहिए।

<servlet-mapping> 
    <servlet-name>index</servlet-name> 
    <url-pattern></url-pattern> 
</servlet-mapping> 

Difference between/and /* in servlet mapping url pattern भी देखें।

+0

का पालन करें मेरे पास पहले से ही मेरी index.jsp है मेरे जेएसपी फ़ोल्डर – PeterJohn

+6

के तहत आपके पास यह '/ WEB-INF/jsp/index.jsp' फ़ोल्डर में है। आपके पास रूट फ़ोल्डर में '/ index.jsp' के रूप में नहीं है। एवर इसे रूट फ़ोल्डर में रखना है, वही स्तर '/ WEB-INF' फ़ोल्डर के रूप में। – BalusC

+2

मैंने इसे बदलने की कोशिश की लेकिन फिर भी वही समस्या। संसाधन उपलब्ध नहीं है – PeterJohn

17

मुझे लगता है कि क्या आप चाहते हैं कि आपके सूचकांक सर्वलेट स्वागत पृष्ठ के रूप में कार्य है, इसलिए करने के लिए बदलने के लिए है: ताकि सूचकांक सर्वलेट उपयोग किया जाएगा

<welcome-file-list> 
    <welcome-file>index</welcome-file> 
</welcome-file-list> 

। नोट, ऐसा करने में सक्षम होने के लिए आपको एक सर्वलेट spec 2.4 कंटेनर की आवश्यकता होगी।

नोट भी, @ बाल्लूसी को मेरा वोट मिलता है, क्योंकि आपके इंडेक्स सर्वलेट अपने आप पर अनिवार्य है।

-2

यह उस फ़ाइल पर आधारित है जिस फ़ाइल से आप उन फ़ाइलों तक पहुंचने का प्रयास कर रहे हैं।

यदि यह वही फ़ोल्डर में है जहां आपकी कार्यप्रणाली प्रोजेक्ट फ़ाइल है, तो आप केवल फ़ाइल नाम का उपयोग कर सकते हैं। पथ की कोई ज़रूरत नहीं है।

यह आपके काम प्रोजेक्ट फ़ाइल का एक ही मूल फ़ोल्डर के अंतर्गत है तो आप

अपने उदाहरण में निम्नलिखित /javascript/sample.js में की तरह स्थान का उपयोग कर सकते है अगर आप की कोशिश कर रहे किसी अन्य फ़ोल्डर में है, तो फ़ाइल निम्न स्थान

../javascript/sample.js

उपसर्ग उपयोग कर सकते हैं अपने html से अपने js फ़ाइल का उपयोग ../ (ऊपर की ओर यात्रा फ़ोल्डर) फ़ाइल के पैरेंट फ़ोल्डर के लिए जाना जाएगा

1

मैं इस stackoverflow link में एक अच्छा समाधान रिक्त स्ट्रिंग URL पैटर्न का उपयोग कर "" द्वारा defulat सर्वलेट मुद्दे से निपटने के पाठकों में मदद मिल सकती है कि देखा:

@WebServlet("") 

या

<servlet-mapping> 
    <servlet-name>yourHomeServlet</servlet-name> 
    <url-pattern></url-pattern> <!-- Yes, empty string! --> 
</servlet-mapping> 
संबंधित मुद्दे