Разница между jstl-тегом core и core_rt

Когда я использую <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> для своего проекта struts 1.3.10, он выдает следующее исключение:

org.apache.jasper.JasperException: The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar files deployed with this application
    org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:56)
    org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:445)
    org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:117)
    org.apache.jasper.compiler.TagLibraryInfoImpl.generateTLDLocation(TagLibraryInfoImpl.java:311)
    org.apache.jasper.compiler.TagLibraryInfoImpl.<init>(TagLibraryInfoImpl.java:152)
    org.apache.jasper.compiler.Parser.parseTaglibDirective(Parser.java:410)
    org.apache.jasper.compiler.Parser.parseDirective(Parser.java:475)
    org.apache.jasper.compiler.Parser.parseElements(Parser.java:1427)
    org.apache.jasper.compiler.Parser.parse(Parser.java:138)
    org.apache.jasper.compiler.ParserController.doParse(ParserController.java:242)
    org.apache.jasper.compiler.ParserController.parse(ParserController.java:102)
    org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:198)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:373)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:353)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:340)
    org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:646)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:357)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1083)
    org.apache.struts.tiles.TilesRequestProcessor.doForward(TilesRequestProcessor.java:295)
    org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:396)
    org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(TilesRequestProcessor.java:347)
    org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:232)
    org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
    org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)

Затем, когда я изменил его на

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

это работает нормально. Мне нравится знать, в чем разница между этими двумя и почему возникает исключение, когда я пытаюсь использовать <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>. Кстати, я использую сервер apache-tomcat-7.0.42. Пожалуйста помогите.


person gjman2    schedule 22.09.2013    source источник


Ответы (2)


Если вы не используете очень старую версию JSP (точнее, JSP 1.2 или 1.1), вам не следует использовать ни одну из них. Это URI JSTL 1.0, которые не подходят для современных версий JSP.

Эти две библиотеки различались тем, что одна позволяла использовать выражения времени выполнения в качестве значений атрибутов тега, а другая — нет. В современных JSP и JSTL, где механизм JSP выполняет всю оценку выражений, это уже не актуально.

person Vishal Kukreja    schedule 22.09.2013
comment
@vhisal-kukreja, как узнать версию jsp в netbean? - person gjman2; 22.09.2013
comment
@gjman2, создайте простую страницу JSP и поместите следующий код: Версия JSP: ‹%= JspFactory.getDefaultFactory().getEngineInfo().getSpecificationVersion()%› - person Vishal Kukreja; 22.09.2013
comment
у меня jsp 2.2, что теперь делать? - person gjman2; 26.09.2013

Я думаю, вы получаете исключение, потому что URI отличается для версии _rt (добавлено _rt), поэтому ваш импорт taglib неверен для тегов в банке, которую вы используете.

Разница в том, что один вид допускает использование языка выражений ${someExpr}, а термин основан на скриптлетах <%= some code %>. Вы должны быть в состоянии найти надлежащие детали с помощью Google.

person Aaron    schedule 22.09.2013