दिलचस्प पोस्ट
कोनालर $ दायरा। $ बनाम $ टाइमआउट को एक सुरक्षित $ आवेदन के रूप में लागू करें PostgreSQL 9.3 का उपयोग करके डायनामिक धुरी क्वेरी गतिशील रूप से एक DLL से फ़ंक्शन लोड करें अजगर के भीतर एक जावास्क्रिप्ट लिंक पर क्लिक करें? रेल 4 नेस्टेड विशेषताएँ Unpermitted पैरामीटर ब्राउज़र को कैश छवियों को कैसे प्राप्त करें, php के साथ? रैखिक लयआउट की ऊंचाई पर क्रिएट 0 है डाटा एनोटेशन के साथ डेटटाइम (डेट और टाइम) मान्यता स्ट्रिंग और स्ट्रिंगबिल्डर के बीच अंतर सी # जावा में स्विंगवॉकर एंड्रॉइड में कस्टम रेडियो बटन जोड़ना 1D सरणी में "फ़्लैटन" या "इंडेक्स" 3D-array कैसे करें? पेशेवर jQuery आधारित combobox नियंत्रण? ऑनक्रेट विधि में डायलॉग कैसे दिखाना है? केवल जावास्क्रिप्ट का उपयोग कर किसी फ़ोल्डर से सभी छवि फ़ाइल नामों की सूची वापस करने का कोई तरीका है?

JSP में बाहरी संसाधन (सीएसएस / जावास्क्रिप्ट / छवियों आदि) को जोड़ना

मैंने अपनी परियोजना के लिए एक बाहरी सीएसएस स्टाइलशीट जोड़ा और एक्लिप्से में मेरी परियोजना के वेब-सामग्री फ़ोल्डर में रखा। जब मैंने इसे टॉमकेट पर लगाया था, तो स्टाइलशीट लागू नहीं किया गया था। जब मैंने इसे क्रोम में डिबग किया और इसे खोल दिया, तो मुझे मुझे 404 file not found त्रुटि 404 file not found ऐसा क्यों है और इसे कैसे तय किया जाए?

यहां कोड है:

 <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!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>joined now </title> <link href="globalCSS.css" rel="stylesheet" type="text/css"/> </head> <body> <div>this is at the top</div> <c:import url="header.jsp" /> <c:import url="navigationBar.jsp" /> <c:import url="leftpane.jsp" /> <c:import url="mainContent.jsp" /> <c:import url="rightpane.jsp" /> <c:import url="footer.jsp" /> </body> </html> 

Solutions Collecting From Web of "JSP में बाहरी संसाधन (सीएसएस / जावास्क्रिप्ट / छवियों आदि) को जोड़ना"

कारण है कि आपको 404 File Not Found त्रुटि मिलती है, यह है कि href विशेषता के मान के रूप में दिए गए सीएसएस को अपना पथ संदर्भ पथ अनुपलब्ध है

एक HTTP अनुरोध URL में निम्न भाग होते हैं:

 http://[host]:[port][request-path]?[query-string] 

अनुरोध पथ आगे निम्नलिखित तत्वों से बना है:

  • संदर्भ पथ : सर्वोलेट के वेब एप्लिकेशन के संदर्भ रूट के साथ एक फ़ॉरवर्ड स्लैश (/) का एक संयोजन उदाहरण: http://host[:port]/context-root[/url-pattern]

  • सर्विस पथ : इस अनुरोध को सक्रिय करने वाले घटक उपनाम से संबंधित पथ अनुभाग। यह पथ एक अग्रेषित स्लैश (/) के साथ शुरू होता है

  • पथ जानकारी : अनुरोध पथ का एक हिस्सा जो संदर्भ पथ या सर्वलेट पथ का हिस्सा नहीं है

यहां अधिक पढ़ें


समाधान की

आपकी समस्या के कई समाधान हैं, यहां उनमें से कुछ हैं:

1) जेएसटीएल से <c:url> टैग का उपयोग करना

मेरे जावा वेब अनुप्रयोगों में मैं आमतौर पर सीएसएस / जावास्क्रिप्ट / छवि और अन्य स्थिर संसाधनों के पथ को परिभाषित करते समय जेएसटीएल से <c:url> टैग का इस्तेमाल करता था ऐसा करने से आप यह सुनिश्चित कर सकते हैं कि उन संसाधनों को हमेशा संदर्भ संदर्भ (संदर्भ पथ) के संदर्भ में संदर्भित किया जाता है।

अगर आप कहते हैं, कि आपका सीएसएस वेबकॉन्टेंट फ़ोल्डर में स्थित है, तो यह काम करना चाहिए:

 <link type="text/css" rel="stylesheet" href="<c:url value="/globalCSS.css" />" /> 

इसका कारण यह काम " जावा सार्वर पेज्स ™ मानक टैग लाइब्रेरी " संस्करण 1.2 विनिर्देशन अध्याय 7.5 (जोर खान) में समझाया गया है:

7.5 <c: url>
उचित रीरलाईटिंग नियमों को लागू करने के साथ एक यूआरएल बनाता है।

JSP.2.2.1 "रिलेबल यूआरएल स्पेसिफिकेशन" में जेएसपी 1.2 द्वारा परिभाषित यूआरएल या तो एक निश्चित यूआरएल को एक स्कीम (जैसे "http: // server / context / page.jsp") या एक रिश्तेदार यूआरएल के साथ शुरू होना चाहिए। एक परिणाम के रूप में, एक कार्यान्वयन को उस URL पर संदर्भ पथ में शामिल करना होगा जो एक स्लैश के साथ शुरू होता है (जैसे "/page2.jsp") ताकि ऐसे URL को क्लाइंट ब्राउज़र द्वारा ठीक से व्याख्या किया जा सके।

ध्यान दें
JSTL टैग का संदर्भ देने में सक्षम होने के लिए अपने जेएसपी में टैगलिब निर्देश का उपयोग करना मत भूलें। यहां एक उदाहरण जेएसपी पृष्ठ भी देखें।

2) जेएसपी अभिव्यक्ति भाषा और अंतर्निहित वस्तुओं का उपयोग करना

एक वैकल्पिक समाधान अनुप्रयोग संदर्भ जोड़ने के लिए अभिव्यक्ति भाषा (ईएल) का उपयोग कर रहा है:

 <link type="text/css" rel="stylesheet" href="${pageContext.request.contextPath}/globalCSS.css" /> 

यहां हमने अनुरोध ऑब्जेक्ट से संदर्भ पथ को पुनः प्राप्त किया है। और अनुरोध ऑब्जेक्ट तक पहुंचने के लिए हमने पृष्ठ का इस्तेमाल किया है।

3) जेएसटीएल से <c:set> टैग का उपयोग करना

अस्वीकरण
इस समाधान का विचार यहां से लिया गया था।

समाधान №2 के मुकाबले संदर्भ पथ को अधिक कॉम्पैक्ट तक पहुंच बनाने के लिए, आप पहले जेएसटीएल <c:set> टैग का उपयोग कर सकते हैं, जो कि एएसएल वैरिएबल के मूल्य या जेएसपी स्कोप में किसी भी एएल चर की संपत्ति को सेट करता है ( पृष्ठ, अनुरोध, सत्र, या एप्लिकेशन) बाद में पहुंच के लिए।

 <c:set var="root" value="${pageContext.request.contextPath}"/> ... <link type="text/css" rel="stylesheet" href="${root}/globalCSS.css" /> 

महत्वपूर्ण लेख
डिफ़ॉल्ट रूप से, वैरिएबल को इस प्रकार सेट करने के लिए, इस सेट टैग वाले जेएसपी को कम से कम एक बार एक्सेस किया जाना चाहिए ( दायरा विशेषता का उपयोग करते हुए एप्लिकेशन स्कोप में मान की सेटिंग के मामले में, जैसे <c:set var="foo" value="bar" scope="application" /> ), इस नए चर का उपयोग करने से पहले उदाहरण के लिए, आपके पास कई जेएसपी फाइलें हो सकती हैं, जहां आपको इस वैरिएबल की ज़रूरत है। तो आपको एथर चाहिए ए) दोनों को एपरेरेशन स्कोप में नया वैरिएबल होल्डिंग प्रसंग पथ सेट करना होगा और अन्य जेएसपी फाइलों में इस वैरिएबल का उपयोग करने से पहले या जेएसपी को पहले, इस सुविधा का उपयोग करना चाहिए। इसे एक्सेस करने के लिए

4) ServletContextListener का उपयोग करना

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

हमें एक वर्ग की आवश्यकता है जो ServletContextListener इंटरफ़ेस लागू करता है। यहां इस तरह की क्लास का एक उदाहरण है:

 package com.example.listener; import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.annotation.WebListener; @WebListener public class AppContextListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent event) { ServletContext sc = event.getServletContext(); sc.setAttribute("ctx", sc.getContextPath()); } @Override public void contextDestroyed(ServletContextEvent event) {} } 

अब एक जेएसपी में हम इस ग्लोबल वेरिएबल का उपयोग एली को एक्सेस कर सकते हैं:

 <link type="text/css" rel="stylesheet" href="${ctx}/globalCSS.css" /> 

ध्यान दें
@ वेबलिस्टनर एनोटेशन सर्विस सर्विस 3.0 के बाद से उपलब्ध है। यदि आप सर्वलेट कंटेनर या अनुप्रयोग सर्वर का उपयोग करते हैं जो पुराना सर्विसलेट विनिर्देशों का समर्थन करता है, तो @WebServlet एनोटेशन को हटा दें और इसके बजाय परिनियोजन डिस्क्रिप्टर (web.xml) में श्रोता को कॉन्फ़िगर करें। यहां कंटेनर के लिए web.xml फ़ाइल का एक उदाहरण है जो अधिकतम सेवा का संस्करण 2.5 संस्करण का समर्थन करता है। (संक्षेप के लिए अन्य कॉन्फ़िगरेशन छोड़े गए हैं):

 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> ... <listener> <listener-class>com.example.listener.AppContextListener</listener-class> </listener> ... </webapp> 

5) स्क्रिप्टलेट का उपयोग करना

जैसा कि उपयोगकर्ता @ गेवेंको द्वारा सुझाया गया है, आप इस तरह से स्क्रिप्टलेट का उपयोग भी कर सकते हैं:

 <%= request.getContextPath() %> 

ऐसी छोटी सी बात के लिए शायद यह ठीक है, बस ध्यान दें कि आम तौर पर जेएसपी में स्क्रीप्लेट का उपयोग निराश हो गया है ।

निष्कर्ष

मैं व्यक्तिगत तौर पर ईथर को पहला समाधान (मेरी पिछली परियोजनाओं में अधिकांश समय में उपयोग किया जाता है) या दूसरा, क्योंकि वे सबसे स्पष्ट, सहज और निरपेक्ष (आईएमएचओ) हैं। लेकिन आप चुनते हैं जो आपको सबसे अधिक उपयुक्त हैं


अन्य विचार

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

निम्नलिखित कोड का उपयोग करना आप इस प्रश्न का समाधान करते हैं …. अगर आप स्थानीय समस्या सर्वर से इस समस्या को हल करते हुए जेएसपी पृष्ठ कोड का पालन करते हुए फ़ाइल चलाते हैं। यह कोड जेएसपी फ़ाइल में हेड टैग के बीच रखता है

 <style type="text/css"> <%@include file="css/style.css" %> </style> <script type="text/javascript"> <%@include file="js/script.js" %> </script>