Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Проблемы с JSP


Автор: chaineg 4.3.2009, 12:31
Почему при загрузке main.jspx 
Код

<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" xmlns:c="http://java.sun.com/jsp/jstl/core" version="2.0">
    <jsp:directive.page contentType="text/html; charset=Uft-8"/>
    <html>
    <head><title>Welcome</title></head>
    <body>
    <h3>Welcome</h3>
    <hr>
        <c:out value="${user}, Hello!"/>
        <a href="http://127.0.0.1:8082/Web/jsp/login.jsp">Return to login page</a>
    </hr>
    </body>
    </html>
</jsp:root>

выскакивает эксэпшин 
Код

java.lang.NoClassDefFoundError: javax/servlet/jsp/tagext/TagLibraryValidator


В либах томката класс 
Код

javax.servlet.jsp.tagext.TagLibraryValidator
 лежит в C:\Program Files\Apache Software Foundation\Tomcat 5.5\common\lib\jsp-api.jar  smile 

Автор: mbasil 4.3.2009, 14:16
Код

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

Автор: chaineg 4.3.2009, 15:11
Цитата(mbasil @ 4.3.2009,  14:16)
Код

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

Код

<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" xmlns:c="http://java.sun.com/jsp/jstl/core" version="2.0">
    <jsp:directive.taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"/>
    <html>
    <head><title>Welcome</title></head>
    <body>
    <h3>Welcome</h3>
    <hr>
        <c:out value="${user}, Hello!"/>
        <a href="http://127.0.0.1:8082/Web/jsp/login.jsp">Return to login page</a>
    </hr>
    </body>
    </html>
</jsp:root>


Тот же эскэпшин и к тому же получаю: "Element jsp:directive.taglib is not allowed here"  smile 

Автор: bvfalcon 5.3.2009, 13:13
Цитата

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

Вас обманули, в XML-разметке JSP-страницы директива taglib записывается в элементе jsp:root, как и было изначально. И ошибка похоже не в JSP-странице вовсе, не там копаете. Обрисуйте ситуацию более подробно (версия Tomcat например и проч.), может и получится помочь.

Автор: chaineg 5.3.2009, 13:40
Цитата(bvfalcon @ 5.3.2009,  13:13)
Цитата

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

Вас обманули, в XML-разметке JSP-страницы директива taglib записывается в элементе jsp:root, как и было изначально. И ошибка похоже не в JSP-странице вовсе, не там копаете. Обрисуйте ситуацию более подробно (версия Tomcat например и проч.), может и получится помочь.

Версия томката 5.5, щас запустил томкат как службу через администрирование, набрал в браузере урл к своей jspx, при этом максимально упростил jspx:
Код

<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" xmlns:c="http://java.sun.com/jsp/jstl/core" version="2.0">
    <jsp:directive.taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"/>
    <html>
    <head><title>Welcome</title></head>
    <body>
    <h3>Welcome</h3>
    <hr>
        <c:out value="Abcd, Hello!"/>
    </hr>
    </body>
    </html>
</jsp:root>


И в итоге получился такой эксэпшин:
Код

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:50)
    org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407)
    org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:114)
    org.apache.jasper.compiler.TagLibraryInfoImpl.generateTLDLocation(TagLibraryInfoImpl.java:316)
    org.apache.jasper.compiler.TagLibraryInfoImpl.<init>(TagLibraryInfoImpl.java:147)
    org.apache.jasper.compiler.Parser.parseTaglibDirective(Parser.java:418)
    org.apache.jasper.compiler.Parser.parseDirective(Parser.java:483)
    org.apache.jasper.compiler.Parser.parseElements(Parser.java:1539)
    org.apache.jasper.compiler.Parser.parse(Parser.java:126)
    org.apache.jasper.compiler.ParserController.doParse(ParserController.java:211)
    org.apache.jasper.compiler.ParserController.parse(ParserController.java:100)
    org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:146)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:286)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:267)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:255)
    org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:556)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:296)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
   smile

Добавлено через 1 минуту и 42 секунды
Пробовал в браузере набрать http://java.sun.com/jsp/jstl/core, есс-но его браузер не нашёл.

Автор: Samotnik 5.3.2009, 14:09
chaineg, web.xml имеется  ? 

Автор: chaineg 5.3.2009, 15:46
web.xml имеется, если не запускпать мой сервлет, а чисто томкат, то jsp уже открывается нормально, но если запускать сервлет 
Код

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        processRequest(req, resp);
    }

    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        processRequest(req, resp);
    }

    private void processRequest(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String page = null;
        try {
            Command command = reqHelper.getCommand(req);
            page = command.execute(req, resp);
        } catch (ServletException ex) {
            ex.printStackTrace();
            req.setAttribute("errormessage", MessageManager.getInstance().getProperty(MessageManager.SERVLET_EXCEPTION_ERROR_MESSAGE));
            page = ConfigurationManager.getInstance().getProperty(ConfigurationManager.ERROR_PAGE_PATH);
        } catch (IOException ex) {
            ex.printStackTrace();
            req.setAttribute("errormessage", MessageManager.getInstance().getProperty(MessageManager.IO_EXCEPTION_ERROR_MESSAGE));
            page = ConfigurationManager.getInstance().getProperty(ConfigurationManager.ERROR_PAGE_PATH);
        }
        System.out.println(page);
        RequestDispatcher disp = getServletContext().getRequestDispatcher("/jsp/main.jsp");
        disp.forward(req, resp);
    }

то на строке 
Код
disp.forward(req, resp);
 вылетает эксэпшин 
Код

java.lang.NoClassDefFoundError: javax/servlet/jsp/tagext/TagLibraryValidator
    java.lang.ClassLoader.defineClass1(Native Method)
    java.lang.ClassLoader.defineClass(ClassLoader.java:620)
    java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
    java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
    java.net.URLClassLoader.access$100(URLClassLoader.java:56)
    java.net.URLClassLoader$1.run(URLClassLoader.java:195)
    java.security.AccessController.doPrivileged(Native Method)
    java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    java.lang.ClassLoader.loadClass(ClassLoader.java:251)
    java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
    java.lang.ClassLoader.defineClass1(Native Method)
    java.lang.ClassLoader.defineClass(ClassLoader.java:620)
    java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
    java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
    java.net.URLClassLoader.access$100(URLClassLoader.java:56)
    java.net.URLClassLoader$1.run(URLClassLoader.java:195)
    java.security.AccessController.doPrivileged(Native Method)
    java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    java.lang.ClassLoader.loadClass(ClassLoader.java:299)
    sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
    java.lang.ClassLoader.loadClass(ClassLoader.java:251)
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1247)
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1181)
    org.apache.jasper.compiler.TagLibraryInfoImpl.createValidator(TagLibraryInfoImpl.java:645)
    org.apache.jasper.compiler.TagLibraryInfoImpl.parseTLD(TagLibraryInfoImpl.java:246)
    org.apache.jasper.compiler.TagLibraryInfoImpl.<init>(TagLibraryInfoImpl.java:179)
    org.apache.jasper.compiler.Parser.parseTaglibDirective(Parser.java:418)
    org.apache.jasper.compiler.Parser.parseDirective(Parser.java:483)
    org.apache.jasper.compiler.Parser.parseElements(Parser.java:1539)
    org.apache.jasper.compiler.Parser.parse(Parser.java:126)
    org.apache.jasper.compiler.ParserController.doParse(ParserController.java:211)
    org.apache.jasper.compiler.ParserController.parse(ParserController.java:100)
    org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:146)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:286)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:267)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:255)
    org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:556)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:296)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    by.bsu.famcs.jspservlet.Controller.processRequest(Controller.java:53)
    by.bsu.famcs.jspservlet.Controller.doGet(Controller.java:30)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
  smile 

Автор: garbuz 5.3.2009, 16:03
Попробуйте так
Код

<%@page session="false" contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>



Если не получится, http://www.apache.org/dist/jakarta/taglibs/standard/jakarta-taglibs-standard-current.ziptld файлы, положите в WEB-INF/tld
Код

<%@ taglib uri="/WEB-INF/tld/c.tld" prefix="c" %>



Возможно в web.xml придется прописать след. ...или это в случе своих тегов...не помню  smile 
Код

<taglib>

            <taglib-uri>
                  http://www.someurl.ru
            </taglib-uri>

            <taglib-location>
                  /WEB-INF/myTag.tld
            </taglib-location>

      </taglib>

Автор: chaineg 5.3.2009, 17:04
Перепробовал, всё тот же эксэпшин. А могут ли версия томката 5.5.8 и версия jstl 1.1.2 несовместимы?  smile 

Автор: garbuz 5.3.2009, 17:25
Покажите весь код жсп.

Автор: chaineg 5.3.2009, 19:28
Весь код jsp:
Код

<%@page session="false" contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib uri="/WEB-INF/tld/c.tld" prefix="c" %>
<html>
<head><title>Welcome</title></head>
<body>
<h3>Welcome</h3>
<hr>
    <c:out value="Abcd Hello!"/>
    <a href="http://127.0.0.1:8082/Web/jsp/login.jsp">Return to login page</a>
</hr>
</body>
</html>
   smile 

Автор: garbuz 5.3.2009, 19:41
Еще раз стектрейс и web.xml. tld-хи скачал и положил куда надо?

ЗЫ. А если jstl не использовать, то все нормально?

Автор: chaineg 5.3.2009, 20:24
Если не использовать jstl, то всё ОК, однако при использовании jstl, disp обращается к странице main.jsp и потом метод forward считывает весь код страницы main.jsp и лезет к классу TagLibraryValidator, который по каким-то причинам не может найти

Автор: garbuz 5.3.2009, 21:50
Цитата(chaineg @  5.3.2009,  20:24 Найти цитируемый пост)
Если не использовать jstl, то всё ОК, однако при использовании jstl, disp обращается к странице main.jsp и потом метод forward считывает весь код страницы main.jsp и лезет к классу TagLibraryValidator, который по каким-то причинам не может найти 

Значит у вас что-то с jstl не так, скорее всего что-то неправильно делаете. Попробуйте погуглить на эту тему, перекачайте jstl-ные либы, можете сюда структуру приложения привести. 


http://www.developer.com/java/ejb/article.php/1447551
http://www.ibm.com/developerworks/java/library/j-jsp05273.html

Автор: skhilkov 6.3.2009, 07:29
chaineg,  а можно все-таки WEB.xml показать?

Автор: chaineg 6.3.2009, 12:30
А вот и web.xml
Код

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
         version="2.4">
    <display-name>FirstProject</display-name>
    <servlet>
        <description></description>
        <display-name>Controller</display-name>
        <servlet-name>Controller</servlet-name>
        <servlet-class>by.bsu.famcs.jspservlet.Controller</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Controller</servlet-name>
        <url-pattern>/controller</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>30</session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
    <login-config>
        <auth-method>BASIC</auth-method>
    </login-config>
 </web-app>   
    smile  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)