दिलचस्प पोस्ट
File_get_contents का उपयोग कर छवि दिखाएं ASP.NET कोर में स्टार्टअप सी.एस.एस. में केस्टल शटडाउन फ़ंक्शन 2 की अगली शक्ति तक गोल करना पीछे की ओर और असफलता के बाद कार्य करता है सी ++ सीन और कॉस रनटाइम पर app.config system.net सेटिंग अपडेट करें एसक्यूएल शामिल है: एक-से-कई रिश्ते में अंतिम अभिलेख का चयन करना ASP.NET के लिए अनुकूल यूआरएल SQL सर्वर 2008 में पुनरावर्ती समान-तालिका क्वेरी ब्राउज़र से ग्राहक समय क्षेत्र प्राप्त करें मैं CoffeeScript के लिए Rails 3.1 में "-bare" विकल्प का उपयोग कैसे कर सकता हूं? एंड्रॉइड ऐप 0 डिवाइसों द्वारा समर्थित है उत्तरदायी छवि मानचित्र त्रुटि: एएपीटी नहीं चल सकता नोटपैड ++ में प्रत्येक स्ट्रिंग में मौजूद सभी स्ट्रिंगों को कैसे बदल सकता है?

स्थिर वैश्विक संसाधनों तक पहुंचने के लिए कैसे / * पर एक वैश्विक सामने नियंत्रक सर्वलेट मानचित्रण

मैंने स्प्रिंग एमवीसी प्रेषक को /* पर एक वैश्विक सामने नियंत्रक सर्वलेट के रूप में मैप किया है

 <servlet> <servlet-name>home</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>home</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> 

हालांकि, इस मैपिंग में सीएसएस, जेएस, इमेज आदि जैसी स्थिर फाइलों तक पहुंच बंद हो जाती है, जो सभी /res/ फ़ोल्डर में हैं।

मैं उन्हें कैसे पहुंच सकता हूं?

Solutions Collecting From Web of "स्थिर वैश्विक संसाधनों तक पहुंचने के लिए कैसे / * पर एक वैश्विक सामने नियंत्रक सर्वलेट मानचित्रण"

मैंने इसे भी चलाया है और कभी भी एक महान समाधान नहीं पाया। मैंने यूआरएल पदानुक्रम में अपने सर्वोलेट को एक स्तर उच्च मैप किया है:

 <servlet-mapping> <servlet-name>home</servlet-name> <url-pattern>/app/*</url-pattern> </servlet-mapping> 

और अब बेस कंटेनर (और आपकी / रेस निर्देशिका में) पर सब कुछ आपके कंटेनर द्वारा परोसा जा सकता है।

एक अधिक विशिष्ट url-pattern जैसे /pages/* पर नियंत्रक सर्वलेट को मैप करें, स्थिर सामग्री को स्थिर /static जैसे फ़ोल्डर में डालें और /* पर सुनकर एक Filter बनाओ, जो कि किसी भी स्थिर सामग्री के लिए श्रृंखला को जारी रखता है और डिस्पैच को अनुरोध करता है अन्य सामग्री के लिए नियंत्रक सर्वलेट

संक्षेप में:

 <filter> <filter-name>filter</filter-name> <filter-class>com.example.Filter</filter-class> </filter> <filter-mapping> <filter-name>filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <servlet> <servlet-name>controller</servlet-name> <servlet-class>com.example.Controller</servlet-class> </servlet> <servlet-mapping> <servlet-name>controller</servlet-name> <url-pattern>/pages/*</url-pattern> </servlet-mapping> 

फिल्टर के doFilter() में निम्नलिखित के साथ:

 HttpServletRequest req = (HttpServletRequest) request; String path = req.getRequestURI().substring(req.getContextPath().length()); if (path.startsWith("/static")) { chain.doFilter(request, response); // Goes to default servlet. } else { request.getRequestDispatcher("/pages" + path).forward(request, response); } 

नहीं, यह ब्राउज़र पता बार में /pages साथ समाप्त नहीं होता है यह पूरी तरह से पारदर्शी है। यदि आवश्यक हो तो "/static" और / या "/pages" फिल्टर का एक init-param कर सकते हैं।

स्प्रिंग 3.0.4.RELEASE और उच्चतर के साथ आप उपयोग कर सकते हैं

 <mvc:resources mapping="/resources/**" location="/public-resources/"/> 

जैसा कि स्प्रिंग संदर्भ में देखा गया है

आप क्या करते हैं आपके web.xml में एक स्वागत योग्य फ़ाइल जोड़ें

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

और फिर इसे अपने सर्वलेट मैपिंग में जोड़ें ताकि जब कोई आपके आवेदन की जड़ को जाता है, तो वह index.html को आंतरिक रूप से भेजा जाता है और फिर मैपिंग आंतरिक रूप से आपको उस सर्विसलेट को भेज देगा जिसे आप इसे मैप करते हैं

 <servlet-mapping> <servlet-name>MainActions</servlet-name> <url-pattern>/main</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>MainActions</servlet-name> <url-pattern>/index.html</url-pattern> </servlet-mapping> 

अंतिम परिणाम: आप / आवेदन पर जाएं, लेकिन आपको किसी अन्य रूट अनुरोधों को खारिज किए बिना / अनुप्रयोग / मुख्य क्रियाएं सर्वलेट के साथ प्रस्तुत किया गया है।

उसे ले लो? इसलिए आपका ऐप अभी भी उप यूआरएल पर बैठता है, लेकिन जब उपयोगकर्ता आपकी साइट की जड़ में जाता है तो स्वचालित रूप से प्रस्तुत किया जाता है। यह आपको /images/bob.img को अभी भी नियमित स्थान पर जाने की अनुमति देता है, लेकिन '/' आपका ऐप है

अगर आप टोमकैट का उपयोग करते हैं, तो आप संसाधनों को डिस्ट्रिबेट सर्विसेज में मैप कर सकते हैं:

 <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>/static/*</url-pattern> </servlet-mapping> 

और यूआरएल के साथ अपने संसाधनों का उपयोग http: // {context path} / static / res / …

जेटी के साथ भी काम करता है, यह सुनिश्चित नहीं है कि अन्य सर्विसलेट कंटेनरों के बारे में

कई सर्विसलेट-मैपिंग परिभाषाओं में उपयुक्त प्रत्यय के साथ स्थिर सामग्री की सेवा से सुरक्षा के मुद्दे को हल किया गया, जिसका जवाब उत्तर में पोस्ट की गई एक टिप्पणी में दिया गया है। नीचे दिए गए उद्धरण:

यह टोमकैट में एक सुरक्षा छेद था (वेब-आईएनएफ और मेटा-आईएनएफ सामग्री इस तरह से पहुंच योग्य है) और इसे 7.0.4 में तय किया गया है (और साथ ही साथ 5.x और 6.x के लिए पोर्ट किया जाएगा)। – बलूस 2 नवंबर को 22:44 बजे

जो मुझे बहुत मदद की और यहां बताया गया है कि मैंने इसे कैसे हल किया:

 <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.js</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.css</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.jpg</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.htm</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.html</url-pattern> </servlet-mapping> 

3.0.4 के रूप में आप mvc:resources को mvc:default-servlet-handler साथ संयोजन के mvc:default-servlet-handler में उपयोग करने में सक्षम होना चाहिए जैसा कि यह प्राप्त करने के लिए वसंत दस्तावेज में वर्णित है।

http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/mvc.html#mvc-static-resources

ऐप इंजिन में 'स्टैटिक' फाइलें आपके ऐप से सीधे पहुंच नहीं हैं आपको या तो उन्हें दो बार अपलोड करने की ज़रूरत है, या एक स्थैतिक हैंडलर का उपयोग करने के बजाय, स्थिर फ़ाइलों को स्वयं की सेवा दें।

टक्कर का कारण लगता है, क्योंकि डिफ़ॉल्ट रूप से संदर्भ रूट, "/", org.apache.catalina.servlets.DefaultServlet द्वारा नियंत्रित किया जाता है। यह सर्वलेट स्थिर संसाधनों के लिए अनुरोध को प्रबंधित करने के लिए है।

यदि आप गतिशील अनुरोधों को संभालने के इरादे से अपने खुद के सर्विसलेट के साथ रास्ते से बाहर निकलने का निर्णय लेते हैं, तो शीर्ष-स्तरीय सर्विसलेट को कैटलिना के मूल "डिफॉल्ट सैर्ललेट" हैंडलर द्वारा पूरा किए गए किसी भी कार्य को भी पूरा करना चाहिए।

यदि आप टॉमकेट डॉक्स के माध्यम से पढ़ते हैं, तो वे यह उल्लेख करते हैं कि स्थिर अपाचे (एपीके) से बेहतर ऐप्पचे (एचपीडी) स्थिर सामग्री से निपटने के लिए बेहतर है, क्योंकि यह एक ऐसा उद्देश्य है जो ऐसा करना है। मेरा अनुमान है क्योंकि डिफ़ॉल्ट रूप से टोमैक ने org.apache.catalina.servlets.DefaultServlet को स्थिर अनुरोधों को प्रबंधित करने के लिए उपयोग करता है। चूंकि यह सभी एक जेवीएम में लिपटे हुए हैं, और टॉमकेट का उद्देश्य सर्विसलेट / जेएसपी कंटेनर के रूप में है, शायद वे उस क्लास को सुपर-ऑप्टिमाइज़ की गई स्थिर सामग्री हैंडलर के रूप में नहीं लिखते थे। यह वहाँ है। इससे काम हो जाता है। काफी है।

लेकिन यह ऐसी स्थिति है जो स्थिर सामग्री को संभालती है और यह "/" पर रहता है इसलिए यदि आप वहां कुछ और डालते हैं, और वह चीज स्थिर अनुरोधों को संभाल नहीं लेती है, डब्ल्यूएचओपीएस, आपका स्थैतिक संसाधन

मैं एक ही उत्तर के लिए उच्च और निम्न खोज रहा हूं और मुझे हर जगह उत्तर मिल रहा है "यदि आप ऐसा नहीं करना चाहते हैं, ऐसा मत करो"।

इतनी लंबी कहानी कम है, आपका कॉन्फ़िगरेशन डिफ़ॉल्ट स्थिर संसाधन हैंडलर को कुछ के साथ स्थानांतरित कर रहा है जो बिल्कुल स्थिर संसाधन हैंडलर नहीं है आपको उन परिणामों को प्राप्त करने के लिए आपको एक अलग कॉन्फ़िगरेशन की कोशिश करनी होगी (जैसा कि मैं होगा)।

यह संभाल करने का सबसे अच्छा तरीका किसी भी प्रकार के यूआरएल पुनः लेखन का उपयोग कर रहा है। इस तरीके से, आप को अचूक यूआरएल साफ़ कर सकते हैं, और किसी भी विस्तार के साथ नहीं कर सकते हैं, जैसे abc.com/welcom/register abc.com/welcome/resister.html

मैं टकई यूआरएल का उपयोग करता हूं जो बहुत अच्छा है।

इसे आपके वेब ऐप को सेट अप करने के निर्देश दिए गए हैं। मैंने इसे अपने स्प्रिंग एमवीसी वेब ऐप के साथ सेट किया है। बेशक, जब तक मैं स्प्रिंग 3 मान्यताओं जैसे @Email या @Null ऑब्जेक्ट्स के लिए एनोटेशन के लिए एनोटेशन का उपयोग करना चाहता था तब तक सब ठीक था।

जब मैं स्प्रिंग एमवीसी निर्देशों को जोड़ता हूं:

 < mvc:annotation-driven /> < mvc:default-servlet-handler /> 

.. यह अच्छा ओल तुकी कोड को तोड़ता है जाहिर है, < mvc:default-servlet-handler /> टिकी की जगह है, जो मैं अभी भी हल करने की कोशिश कर रहा हूं।

वे फ़ोल्डर्स जोड़ें, जिन्हें आप अपने ऐपगेइन-वेब.एक्सएमएल फ़ाइल के <static-files> अनुभाग में सर्वलेट प्रोसेसिंग को ट्रिगर नहीं करना चाहते।

मैंने ऐसा किया और ऐसा लगता है कि चीजें ठीक से काम करना शुरू हो रही हैं यहां मेरी संरचना है:

/

/pages/<.jsp फ़ाइलें>

/ सीएसएस

मैंने " <static-files> अनुभाग में" / पृष्ठों / ** "और" / css / ** "जोड़ दिया है और अब मैं एक असीमित लूप बिना बिना किसी servlet doGet के अंदर से .jsp फ़ाइल पर जा सकते हैं।

सफलता के बिना फिल्टर के प्रयास की कोशिश करने के बाद (यह किसी कारण के लिए doFilter () फ़ंक्शन दर्ज नहीं किया गया) मैंने अपनी स्थापना थोड़ा बदल दी और जड़ की समस्या के लिए एक बहुत आसान समाधान पाया:

मेरे मुख्य सर्विस में "/ *" की सेवा करने के बजाय, अब मैं सिर्फ समर्पित भाषा उपसर्गों "एन", "एन / *", "डीई", "डे / *"

स्थैतिक सामग्री को डिफ़ॉल्ट सर्विसलेट द्वारा सेवा प्रदान की जाती है और रिक्त रूट अनुरोध्स index.jsp पर जाते हैं जो मेरी मुख्य सर्विसलेट को डिफ़ॉल्ट भाषा के साथ कॉल करता है:

<jsp: शामिल करें पृष्ठ = "/ एन /" /> (सूचकांक पृष्ठ पर कोई अन्य सामग्री नहीं।)

मुझे पता चला कि का उपयोग कर

 <mvc:default-servlet-handler /> 

वसंत MVC सर्वलेट बीन परिभाषा फ़ाइल मेरे लिए काम करती है। यह किसी भी अनुरोध से गुजरता है जो एक पंजीकृत एमवीसी नियंत्रक द्वारा कंटेनर के मूल डिफॉल्ट हैंडलर को नियंत्रित नहीं करता है, जिसे इसे स्थिर सामग्री के रूप में सेवा देना चाहिए। बस सुनिश्चित करें कि आपके पास कोई नियंत्रक पंजीकृत नहीं है जो सब कुछ संभालता है, और इसे ठीक से काम करना चाहिए। सुनिश्चित नहीं है कि क्यों @logixplayer यूआरएल पुनरीक्षण का सुझाव देता है; आप प्रभाव को प्राप्त कर सकते हैं जो वह बस स्प्रिंग एमवीसी अकेले उपयोग करने की तलाश कर रहे हैं।

मैं जब भी संभव हो तो किसी डिफ़ॉल्ट सर्वलेट के बजाय फ़िल्टर का उपयोग करने की कोशिश करूँगा

अन्य दो संभावनाएं:

एक फाइल सर्विलेट खुद को लिखें आपको बहुत सारे उदाहरण मिलेंगे, इसे यूआरएल से फाइल खोलना चाहिए और इसकी सामग्री को आउटपुट स्ट्रीम में लिखना चाहिए फिर, इसे स्थिर फ़ाइल अनुरोध देने के लिए उपयोग करें।

Google App Engine और कॉल सेवा (अनुरोध, प्रतिक्रिया) द्वारा उस फ़ाइल सर्विलेट पर उपयोग किए जाने वाले फ़ाइलसेस्टलेट क्लाउड को इंस्टेंटिएट करें, जब आपको किसी दिए गए URL पर स्थिर फ़ाइल की आवश्यकता होती है

आप अपने फाइल सर्च या / DispatcherServlets के हैंडलिंग से इसे बाहर करने के लिए, या DispatcherServlet से सीधे फोन कर सकते हैं जो करने के लिए / res / * नक्शा कर सकते हैं।

और, मुझे पूछना होगा, स्प्रिंग दस्तावेज़ इस टक्कर के बारे में क्या कहते हैं? मैंने इसका इस्तेमाल कभी नहीं किया है

मुझे डमी इंडेक्स फ़ाइल के साथ एक सरल समाधान मिला।

"/index.html" पर नज़र डालने वाला एक सर्विस (या जिसका आप उपयोग करना चाहते हैं "/") का उपयोग करें (यहां बताया गया समाधान, XML के माध्यम से मानचित्रण का उपयोग करते हैं, मैंने एनबॉटेशन के साथ 3.0 संस्करण का प्रयोग किया था @WebServlet) तब एक स्थिर (खाली) फ़ाइल को "index.html" नामक स्थिर सामग्री की जड़ में दर्ज करें

मैं जेटी का उपयोग कर रहा था, और जो हुआ वह था कि सर्वर ने निर्देशिका को सूचीबद्ध करने के बजाय फ़ाइल को मान्यता दी, लेकिन जब संसाधन के लिए पूछा गया तो मेरी सर्विस ने इसके बजाय नियंत्रण ले लिया अन्य सभी स्थिर सामग्री अप्रभावित बने रहे।

एंबेडेड जेटटी में वेब। एक्सएमएल में "सीएसएस" डायरेक्टरी के लिए मैपिंग जोड़कर कुछ इसी तरह से हासिल करने में कामयाब रहे I स्पष्ट रूप से यह डिफ़ॉल्ट सेवा का उपयोग करने के लिए कह रहा है:

 <servlet> <servlet-name>DefaultServlet</servlet-name> <servlet-class>org.eclipse.jetty.servlet.DefaultServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>DefaultServlet</servlet-name> <url-pattern>/css/*</url-pattern> </servlet-mapping> 
 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> <mvc:default-servlet-handler/> </beans> 

और यदि आप कोड के नीचे एनोटेशन आधारित कॉन्फ़िगरेशन उपयोग करना चाहते हैं

 @Override public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { configurer.enable(); }