1

私はJSPを学んでいて、Tomcat7でJSTLを使用してテストしています。カスタムタグを正常に定義して使用することができます。しかし、JSTLを実装しようとすると、コンテナーは2つの例外をスローします。jspが正しく変換されるように、これを修正するにはどうすればよいですか?

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

次のjarファイルを使用しています。

javax.servlet.jsp.jstl-1.2.1.jar javax.servlet.jsp.jstl-api-1.2.1.jar

2つのJSTL1.2.1jarをテストWebアプリのWEB-INF/libとJREのCLASSPATHに配置しました。また、Eclipseのビルドパスオプションでエクスポート用に2つのjarをマークしました。

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ 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=UTF-8">
        <title>Insert title here</title>
    </head>
    <body>
        <c:out value="JSTL works."></c:out>
    </body>
</html>
4

2 に答える 2

4

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

このクラスはJSP2.0の一部です。Tomcatはサーブレット3.0/JSP2.2コンテナです。web.xmlサーブレット3.0に準拠していると宣言されていることを確認してください。

<?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_3_0.xsd"
    version="3.0">

    <!-- Config here. -->

</web-app>

jsp-api.jarまた、Tomcat5.5などとは異なるコンテナのメーカー/バージョンの任意のJARファイルがにないこともわかります/WEB-INF/lib。そうでなければ、衝突するだけです。Eclipseプロジェクトにjavax.servletAPIをインポートするにはどうすればよいですか?も参照してください。


2つのJSTL1.2.1jarをテストWebアプリのWEB-INF/libに配置しました

それで十分なはずです。とクラスパスをクリーンweb.xmlアップしても問題が解決しない場合は、適切なJARがまったくない可能性があります。JSTL wikiページには、単一のjstl-1.2.jarファイルへのダウンロードリンクがあります。ドロップイン/WEB-INF/libして、他のJARを削除します。


そして私のJREのCLASSPATH。

お願い、それはやめて。JSTLJARをドロップするだけ/WEB-INF/libで十分です。JRE/libまた、またはに任意のservletcontainer固有のJARをドロップしないようにしてくださいJRE/lib/ext。それらのフォルダには触れないでください。Webapp固有のライブラリはに入れる必要があり/WEB-INF/libます。IDEを使用している場合は、必要なすべての魔法が自動的に実行されます。ビルドパスのプロパティをいじる必要はありません。CLASSPATH環境変数は、コマンドコンソールでコマンドを実行する場合にのみ使用され、その場合でも、および引数なしでコマンドを実行する場合にのみ使用されます。java-cp-classpath-jar

于 2012-05-14T14:59:35.737 に答える
0

apache tomcat 7で実行するには、これらをPOMに追加するのがおそらく適切です。これらのjarは、glassfishのjarのようにjavax.servlet jarを参照しないため、除外する必要はありません。

<dependency>
    <groupId>org.apache.taglibs</groupId>
    <artifactId>taglibs-standard-spec</artifactId>
    <version>1.2.1</version>
</dependency>
<dependency>
    <groupId>org.apache.taglibs</groupId>
    <artifactId>taglibs-standard-impl</artifactId>
    <version>1.2.1</version>
</dependency>
于 2014-07-23T17:44:09.187 に答える