JSTL कैसे स्थापित करें? पूर्ण uri: http://java.sun.com/jstl/core को हल नहीं किया जा सकता है


134

मुझे नहीं पता कि मैंने क्या गलत किया है, लेकिन मैं JSTL को शामिल नहीं कर सकता। मेरे पास jstl-1.2.jar है, लेकिन दुर्भाग्य से मुझे अपवाद मिलता है:

org.apache.jasper.JasperException: The absolute uri: http://java.sun.com/jstl/core cannot be resolved in either web.xml or the jar files deployed with this application
    at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:51)
    at org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:409)
    at org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:116)
    at org.apache.jasper.compiler.TagLibraryInfoImpl.generateTLDLocation(TagLibraryInfoImpl.java:315)
    at org.apache.jasper.compiler.TagLibraryInfoImpl.<init>(TagLibraryInfoImpl.java:148)
    at org.apache.jasper.compiler.Parser.parseTaglibDirective(Parser.java:429)
    at org.apache.jasper.compiler.Parser.parseDirective(Parser.java:492)
    at org.apache.jasper.compiler.Parser.parseElements(Parser.java:1439)
    at org.apache.jasper.compiler.Parser.parse(Parser.java:137)
    at org.apache.jasper.compiler.ParserController.doParse(ParserController.java:255)
    at org.apache.jasper.compiler.ParserController.parse(ParserController.java:103)
    at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:170)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:332)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:312)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:299)
    at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:586)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
    at java.lang.Thread.run(Thread.java:619)

मेरे पास है:

  • pom.xml

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.5</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.1</version>
      <scope>provided</scope>
    </dependency>
    
    <dependency>
      <groupId>taglibs</groupId>
      <artifactId>standard</artifactId>
      <version>1.1.2</version>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>
    
  • web.xml

    <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">
    
  • index.jsp

    <%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
    <html> 
    <head></head>
    <body></body>
    </html>
    

4
मुझे jstl के बगल में टैगलीब डिपेंडेंसी भी जोड़ना था और बस काम करना था।
क्रिश्चियन विल्मा

जवाबों:


193

org.apache.jasper.JasperException: पूर्ण uri: http://java.sun.com/jstl/core को इस एप्लिकेशन के साथ तैनात web.xml या जार फाइलों में हल नहीं किया जा सकता है

वह URI JSTL 1.0 के लिए है, लेकिन आप वास्तव में JSTL 1.2 का उपयोग कर रहे हैं, जो एक अतिरिक्त /jspपथ के साथ URI का उपयोग करता है (क्योंकि JSTL, जिसने EL अभिव्यक्तियों का आविष्कार किया था, तब से संस्करण 1.1 को JSP के हिस्से के रूप में एकीकृत किया गया था ताकि EL तर्क साझा / पुन: उपयोग कर सकें सादा JSP भी)।

इसलिए, JSTL प्रलेखन के आधार पर टैगलिब URI को ठीक करें :

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

इसके अलावा आपको यह सुनिश्चित करने की आवश्यकता है कि आप रनटाइम क्लासपाथ में एक साथ कई अलग-अलग वर्जन वाली JSTL JAR फाइलें न फेंकें। यह Tomcat उपयोगकर्ताओं के बीच एक बहुत ही सामान्य गलती है। टॉमकैट के साथ समस्या यह है कि यह बॉक्स से JSTL की पेशकश नहीं करता है और इस प्रकार आपको इसे मैन्युअल रूप से स्थापित करना होगा। सामान्य जावा ईई सर्वर में यह आवश्यक नहीं है। यह भी देखें कि वास्तव में जावा ईई क्या है?

आपके विशिष्ट मामले में, आपका pom.xml मूल रूप से बताता है कि आपके पास jstl-1.2.jar और मानक-1.1.2.jar एक साथ हैं। ये गलत है। आप मूल रूप से JSTL 1.2 API + को मिक्स कर रहे हैं, जो कि Oracle से JSTL 1.1 के साथ Apache से बना है। आपको कोई भी निकालने की आवश्यकता है standard-xxx.jar। बस केवलjstl-1.2.jar पर्याप्त है।

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>

नॉन-मावेन उपयोगकर्ता वेब एप्लिकेशन प्रोजेक्ट के फ़ोल्डर में भौतिक jstl-1.2.jar फ़ाइल को ड्रॉप करके ही प्राप्त कर सकते हैं /WEB-INF/lib( बिल्कुल मानक नहीं छोड़ें। या कोई भी .tld फ़ाइलें!)। यदि आवश्यक हो तो उन्हें हटा दें।

यदि आप वास्तव में एक सामान्य जावा ईई सर्वर का उपयोग कर रहे हैं जैसे कि वाइल्डफली, पेरा, आदि जैसे नंगे पाँव सर्विसलेटकंटेनर जैसे कि टॉमकैट, जेट्टी, इत्यादि, तो आपको जेएसटीएल को स्पष्ट रूप से स्थापित करने की आवश्यकता नहीं है। सामान्य जावा ईई सर्वर पहले से ही बॉक्स से JSTL प्रदान करते हैं। दूसरे शब्दों में, आपको वेब में pom.xmlकिसी भी JAR / TLD फाइल को छोड़ने के लिए JSTL को जोड़ने की आवश्यकता नहीं है । पूरी तरह से providedस्कॉप्ड जावा ईई समन्वय पर्याप्त है:

<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-api</artifactId>
    <version><!-- 8.0, 7.0, etc depending on your server --></version>
    <scope>provided</scope>
</dependency>

इसके अलावा, आपको यह भी सुनिश्चित करना चाहिए कि आपका कम से कम सर्वलेट 2.4 के web.xmlअनुरूप घोषित किया गया है और इस प्रकार से सर्वलेट 2.3 या अधिक पुराना नहीं है। अन्यथा JSTL टैग के अंदर ईएल अभिव्यक्तियाँ काम करने में विफल होंगी। अपने लक्ष्य कंटेनर से मेल खाते उच्चतम संस्करण को चुनें और सुनिश्चित करें कि आपके पास कहीं भी नहीं है । यहाँ एक सर्वलेट 4.0 (टॉमकैट 9) संगत उदाहरण है:<!DOCTYPE>web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
    version="4.0">

    <!-- Config here. -->

</web-app>

यह सभी देखें:


मैं बदल गया हूं / jsp और: org.apache.jasper.JasperException : पूर्ण uri: java.sun.com/jsp/jstl/core को web.xml में हल नहीं किया जा सकता है ....
lukastymo

4
फिर आपका क्लासपैथ गड़बड़ है। इसे साफ करें। मुझे नहीं पता कि मावेन क्या कर रहा है और क्या यह स्मार्ट है, लेकिन जेएसटीएल 1.2 के लिए आपको टैगलिब की आवश्यकता नहीं है standard। अधिक जानकारी के लिए टैग जानकारी पृष्ठ पढ़ें।
बालूसी

4
मुझे वास्तव में JSTL विकी पेज पसंद है जो आपने एक साथ रखा है। हालांकि, चूंकि यह प्रश्न विशेष त्रुटि संदेश के लिए Google से शीर्ष हिट है, इसलिए मैं इसे संपादित करने के लिए स्वतंत्रता ले रहा हूं और ध्यान दें कि "गैर-जेएसपी" यूआरआई जेएसटीएल 1.0 से है।
kdgregory

2
@kdgregory: साभार :)
BalusC

1
यदि आप compile('javax.servlet:jstl:1.2')
ग्रैडल

36

@BalusC पूरी तरह से सही है, लेकिन अगर आप अभी भी इस अपवाद का सामना करते हैं, तो इसका मतलब है कि आपने कुछ गलत किया है। सबसे महत्वपूर्ण जानकारी आपको एसओ जेएसटीएल टैग जानकारी पृष्ठ पर मिलेगी

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

  1. Web.xml में सर्वलेट संस्करण की जाँच करें: <web-app version="2.5">

  2. जाँच करें कि क्या JSTL संस्करण इस सर्वलेट संस्करण के लिए समर्थित है: सर्वलेट संस्करण 2.5 JSTL 1.2 या Servlet संस्करण 2.4 का उपयोग करता है 2.4 GSTL 1.1 का उपयोग करता है

  3. आपके सर्वलेट कंटेनर में उपयुक्त लाइब्रेरी होनी चाहिए, या आपको इसे अपने एप्लिकेशन में मैन्युअल रूप से शामिल करना चाहिए। उदाहरण के लिए: JSTL 1.2 को jstl-1.2.jar की आवश्यकता है

टॉमकैट 5 या 6 का क्या करें :

आपको अपने WEB-INF / lib निर्देशिका में उपयुक्त जार (s) को शामिल करना होगा (यह केवल आपके आवेदन के लिए काम करेगा) या tomcat / lib (सभी अनुप्रयोगों के लिए विश्व स्तर पर काम करेगा)।

आखिरी चीज आपकी जेएसपी फाइलों में एक टैगलिब है। JSTL 1.2 के लिए सही एक यह है:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

3
मैंने देखा है कि यह प्रश्न काफी लोकप्रिय है (कई दर्शक)। तो यही कारण है कि मैंने इस समस्या से निपटने के लिए लघु ट्यूटोरियल लिखने का फैसला किया है
lukastymo

17

मुझे इस प्रकार की त्रुटि का एक और कारण मिला: मेरे मामले में, किसी ने लॉग इन चेतावनी संदेशों से बचने के लिए conf/catalina.propertiesसेटिंग tomcat.util.scan.StandardJarScanFilter.jarsToSkipगुण सेट किया *, जिससे टॉमकैट द्वारा आवश्यक स्कैन को छोड़ दिया गया। इसे वापस टॉम्कट डिफ़ॉल्ट में बदलना और स्किप करने के लिए जार की एक उपयुक्त सूची जोड़ना (jstl-1.2 या स्प्रिंग-वेबमिक्स को शामिल नहीं करना) ने समस्या को हल किया।


हाँ!। मैं भी। किसी ने (= खुद को) किसी बिंदु tomcat.util.scan.StandardJarScanFilter.jarsToSkip=* पर catalina.propertiesफ़ाइल में डाल दिया (गलत समझा?) टॉमकैट को शुरू करने का प्रयास समय शुरू कर देता है। Arghh!
पीटर

मैं jarsToSkip सूची बनाने के लिए निम्नलिखित स्क्रिप्ट का उपयोग करता हूं जो TLDs और वेब-टुकड़ा जार से
बचता है

1
यदि आप अपनी jarsToSkipसेटिंग बदलना नहीं चाहते हैं , तो इसके नीचे एक ऐसी jarsToScanसेटिंग है जो किसी भी चीज़ को ओवरराइड करती है jarsToSkip। हम जोड़ने समाप्त हो गया taglibs*.jarहमारे लिए jarsToScanके रूप में हमारे taglibs थे taglibs-standard-impl-1.2.5.jarऔर taglibs-standard-spec-1.2.5.jar
जाब

1
यह जवाब है कि मेरे लिए काम किया है। में conf/catalina.properties, मैं बदल tomcat.util.scan.StandardJarScanFilter.jarsToSkip=*.jarगया tomcat.util.scan.StandardJarScanFilter.jarsToScan=jstl*.jarऔर यह तय कर दिया।
गैरी एस।

15
jstl-1.2.jar --> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
jstl-1.1.jar --> <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>

भी निर्भरता जार के लिए जाँच कृपया आप जोड़ लिया है कि javax.servlet.jarऔर javax.servlet.jsp.jstl-1.2.1.jarअपने वेब-INF / lib फ़ोल्डर में है या नहीं। मेरे मामले में इन दोनों ने इस मुद्दे को हल किया।


आप कृपया प्रश्न यहाँ [पर एक नज़र हो सकता है stackoverflow.com/questions/44039706/...
Kasun Siyambalapitiya

10

फ़ोल्डर jstl-1.2.jarमें जोड़ें tomcat/lib

इसके साथ, आपकी निर्भरता की त्रुटि फिर से तय हो जाएगी।


10
  1. Jstl-1.2.jar डाउनलोड करें
  2. इस निर्देश को अपने पृष्ठ में जोड़ें: <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

  3. अपने WEB-INF / lib फ़ोल्डर में JAR फ़ाइल पेस्ट करें। यह काम करना चाहिए। (यह मेरे लिए काम किया।)


3

मैंने उल्लेख किया है कि pom.xml में मावेन निर्भरता गलत है। यह होना चाहिए

    <dependency>
        <groupId>jstl</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>

दिलचस्प है, जब मैं जेस्टल की तलाश में मैवेन में खुद को पाता हूं: mvnrepository.com/artifact/javax.servlet.jsp.jstl/jstl/1.2 आपको यह निर्भरता कैसे मिली?
कोरे तुगे

3

मैं सिर्फ इस मुद्दे के लिए मुझे मिला फिक्स जोड़ना चाहता था। मुझे यकीन नहीं है कि यह काम क्यों किया। मेरे पास jstl (1.2) का सही संस्करण था और सर्वलेट-एपी (2.5) का सही संस्करण भी था

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.5</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>

इस सूत्र में सुझाए गए अनुसार मेरे पृष्ठ में भी मेरा सही पता था, जो है

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

मेरे लिए यह मुद्दा क्या तय किया गया था मेरे jstl 1.2 निर्भरता के लिए pom में मेरी xml फ़ाइल से स्कोप टैग हटा रहा था। फिर से यह निश्चित नहीं है कि इसे क्यों तय किया गया है, लेकिन सिर्फ अगर कोई व्यक्ति जेपीए और हाइबरनेट ट्यूटोरियल के साथ वसंत पर कर रहा है और इस तरह उनका पोम सेटअप है, तो गुंजाइश टैग को हटाने की कोशिश करें और देखें कि क्या इसे ठीक करता है। जैसा मैंने कहा कि यह मेरे लिए काम किया।


2

मैंने MAVEN और स्प्रिंग टूल को पूरी तरह से अक्षम कर दिया था। और मुझे अपने पर्यावरण को सही बनाने के लिए निम्नलिखित जार को जोड़ना पड़ा।

  • वसंत-aop-4.0.3.RELEASE.jar
  • स्प्रिंग-बीन्स-4.0.3.RELEASE.jar (इस फिक्स को खोजने के लिए कठिन, अन्य org.springframework <3.versions> बस काम नहीं किया।
  • वसंत-संदर्भ 4.0.3.RELEASE.jar
  • वसंत-कोर-4.0.3.RELEASE.jar
  • वसंत अभिव्यक्ति-4.0.3.RELEASE.jar
  • वसंत-वेब-4.0.3.RELEASE.jar
  • वसंत-webmvc-4.0.3.RELEASE.jar
  • JSTL-1.2.jar

सब से बुरा jstl-api-1.2.jarऔर था javax-servlet.jsp.jst-api-1.2.1.jar। उन्होंने सिर्फ काम नहीं किया।

jstl-1.2.jar अच्छा काम किए।


1
+1 घंटे के लिए दीवार के खिलाफ मेरे सिर को मारने के बाद, मेरे लिए भी काम jstl-1.2करने के बजाय jstl-1.2.1, और मुझे पता नहीं क्यों।
21

1

आप वसंत बूट का उपयोग करते हैं, को दूर करने के लिए विचार server.tomcat.additional-tld-skip-patterns=*.jarसे Application.propertiesयदि कोई हो,


0

इस सवाल के सभी जवाबों ने मेरी मदद की लेकिन मुझे लगा कि मैं पोस्टर के लिए कुछ अतिरिक्त जानकारी जोड़ूंगा।

यह पता चला कि मेरे पास एक परीक्षण निर्भरता थी gwt-test-utilsजिस पर gwt-devपैकेज लाया गया था । दुर्भाग्य gwt-devसे जेट्टी, जेएसपी, जेएसटीएल, आदि की एक पूरी प्रतिलिपि शामिल है, जो क्लासपैथ पर उचित पैकेजों से आगे थी। इसलिए भले ही मुझे JSTL 1.2 पर उचित निर्भरता थी, लेकिन यह 1.0 से आंतरिक संस्करण को लोड करेगा gwt-dev। बड़बड़ाना।

मेरे लिए इसका समाधान टेस्ट स्कोप से नहीं चलना था, इसलिए मैं gwt-test-utilsरनटाइम के दौरान पैकेज नहीं उठाता। gwt-devक्लासपैथ से पैकेज को किसी और तरीके से हटाने से भी समस्या ठीक हो जाती।


0

एक्लिप्स में बस इसी तरह की समस्या थी:

rightclick on project->Properties->Deployment Assembly->add Maven Dependencies

इससे पहले कि मैं अपने pom.xml का संपादन कर रहा था, कुछ इसे बाहर निकाल दिया

मुझे सभी जर्रार फाइलें, टैगलिब उरई और web.xml की जरूरत थी


0

वर्ष 2020 के लिए एक जवाब

सवाल अभी भी बहुत लोकप्रिय है, लेकिन सभी उत्तर गंभीरता से पुराने हैं। सभी जावा ईई घटकों को विभिन्न जकार्ता परियोजनाओं में विभाजित किया गया था और जेएसटीएल अलग नहीं है। तो आज के रूप में यहाँ सही मावेन निर्भरताएँ हैं:

<dependency>
    <groupId>jakarta.servlet.jsp.jstl</groupId>
    <artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
    <version>1.2.7</version>
</dependency>
<dependency>
    <groupId>org.glassfish.web</groupId>
    <artifactId>jakarta.servlet.jsp.jstl</artifactId>
    <version>1.2.6</version>
</dependency>

हां, संस्करण और ग्रुपआईड्स मेल नहीं खाते हैं, लेकिन यह परियोजना की वर्तमान स्थिति का एक हिस्सा है


हाँ, लेकिन यह मेरी समस्या को हल नहीं करता है, लेकिन करीब है, tomcat10 के साथ, आपको दो लिबास की आवश्यकता है * टैगलीब्स-स्टैंडर्ड-इम्प्लिट-1.2.5-माइग्रेट-0.0.1.jar * टैगलिब्स-स्टैंडर्ड-स्पेक-1.2.5-माइग्रेट- 0.0.1.jar इस lib tomcat10 नमूना से प्राप्त किए जा सकें भी टीएलडी फ़ाइलों के रूप में स्कैन taglibs मानक * न वेब ऐप्लिकेशन है वहाँ में, इस webapp मेटा-CONF lib में context.xml में अक्षम किया जा सकता है
Jasonw


-1

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

यहाँ छवि विवरण दर्ज करें


-2

आईबीएम राड 7.5 में इसी तरह की समस्या का चयन करके हल:

  1. परियोजनाओं के गुण
  2. परियोजना के पहलू
  3. JSTL चेक-बॉक्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.