2012-08-25 12 views
10

मैं एक जेएसएफ 2 वेब अनुप्रयोग विकसित कर रहा हूं। प्रतिष्ठा purpouses के लिए मैं चाहता हूं कि हर यूआरएल .jsf एक्सटेंशन के साथ समाप्त होता है। अब यह .xhtml के साथ समाप्त होता है। यदि मैं इसे वेब ब्राउज़र पता बार में सीधे .jsf पर बदलता हूं, तो एक HTTP 500 त्रुटि दिखाई देती है।URL में .jsf एक्सटेंशन का उपयोग कैसे करें?

मैं इसे .jsf पर कैसे सेट कर सकता हूं?

+0

आजकल यह प्रतिष्ठा उद्देश्य है '.do' साथ इसे समाप्त करने के। –

+2

@RomanC 2001 में लोकप्रिय चीज़ नहीं थी? (स्ट्रूट्स 1) आजकल एक्सटेंशन का उपयोग नहीं करना कूलर हो सकता है;) जेएसएफ के लिए आप इसके लिए ओमनीफेस या प्रीटीफेस का उपयोग कर सकते हैं। –

+0

यह इतना लोकप्रिय है क्योंकि वे इसे प्रत्येक आईएसबीएन में जोड़ते हैं, उदाहरण के लिए http://shop.oreilly.com/product/9780596005726.do –

उत्तर

2
<context-param> 
    <param-name>javax.faces.DEFAULT_SUFFIX</param-name> 
    <param-value>.xhtml</param-value> 
</context-param> 

<servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>*.jsf</url-pattern> 
</servlet-mapping> 
<servlet-mapping> 
+0

मुझे नहीं लगता कि यह सही है। यह डिस्क पर वास्तविक फ़ाइल का विस्तार है। ओपी शायद यूआरएल प्रत्यय चाहता है, जिसे आप वेब.एक्सएमएल में सर्वलेट-मैपिंग में यूआरएल-पैटर्न के माध्यम से बदलते हैं (या web.xml को * .jsf के रूप में छोड़कर जेएसएफ 2.1 में डिफ़ॉल्ट है)। –

+0

पिछली टिप्पणी को भूल जाएं, टिप्पणी एक और उत्तर के लिए थी जो केवल डिफ़ॉल्ट_सफिक्स को बदलने के लिए कहा गया था। इस मामले में, servlet-mapping पर्याप्त है, default_suffix को बदलने की कोई आवश्यकता नहीं है। –

+0

आपको अपने उत्तर के लिए तत्काल जो अन्य स्रोतों के बारे में शायद सही है। देरी के लिए खेद है - मैं अवकाश पर था, क्या मैं एक और मदद मांगा? जब मैं इसका उपयोग करता हूं और पेज.जेएसएफ (पेज.एक्सएचटीएम सर्वर सर्वर पर मौजूद होता है) शून्य पॉइंटर एक्स्पशन फेंक दिया जाता है, तो समस्या कहां हो सकती है? Web.xml है: http://pastebin.com/3NqyYXSL और स्टैक प्रिंट है http://pastebin.com/g76TgabF – Tomas

17

JSF पृष्ठों के URL प्रतिमान web.xml में FacesServlet की <servlet-mapping> द्वारा निर्दिष्ट किया जाता। आप उल्लेख किया है कि .xhtml ठीक काम करता है, तो आप जाहिरा तौर पर यह कॉन्फ़िगर किया गया इस प्रकार है:

<servlet> 
    <servlet-name>Faces Servlet</servlet-name> 
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>*.xhtml</url-pattern>  
</servlet-mapping> 

आप <url-pattern> बदलने के लिए तदनुसार वांछित वर्चुअल URL विस्तार पाने के लिए की जरूरत है।

<servlet> 
    <servlet-name>Faces Servlet</servlet-name> 
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>*.jsf</url-pattern>  
</servlet-mapping> 

वास्तव में कंक्रीट कार्यात्मक आवश्यकता को प्राप्त करने के लिए आपको बस इतना बदलना होगा।

हालांकि, इससे सुरक्षा समस्या खुलती है। URL में एक्सटेंशन को .jsf से .xhtml पर बदलते समय एंडयूसर अब कच्चे फेसलेट फ़ाइल स्रोत कोड देख सकता है। आप web.xml के लिए निम्न सुरक्षा बाधा जोड़कर इस रोका जा सकता है:

<security-constraint> 
    <display-name>Restrict access to Facelets source code.</display-name> 
    <web-resource-collection> 
     <web-resource-name>Facelets</web-resource-name> 
     <url-pattern>*.xhtml</url-pattern> 
    </web-resource-collection> 
    <auth-constraint/> 
</security-constraint> 
+0

क्या हम वैकल्पिक रूप से हमारी .xhtml फ़ाइलों को WEF-INF में कॉपी करके इस सुरक्षा समस्या को आसानी से कम कर सकते हैं? – abbas

+2

@abbas: '/ WEB-INF' में फ़ाइलें सार्वजनिक रूप से पहुंच योग्य नहीं हैं। बस जेएसएफ मैपिंग को '* .xhtml' पर सेट करें। आभासी यूआरएल के साथ परेशानी की जरूरत नहीं है। – BalusC

-1
you can add this code in your web.xml, and you can run your pages ends with xhtml, jsf or faces 
<servlet> 
    <servlet-name>Faces Servlet</servlet-name> 
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>*.jsf</url-pattern> 
    </servlet-mapping> 
    <servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>*.faces</url-pattern> 
    </servlet-mapping> 
    <servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>*.xhtml</url-pattern> 
    </servlet-mapping> 
+0

आप पहले से दिए गए उत्तर को दोहरा क्यों रहे हैं? – BalusC

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