绝对的uri:http://java.sun.com/jsp/jstl/core无法解析

时间:2011-04-14 00:55:45

标签: java tomcat spring-mvc jstl

我选择了一个新创建的maven webapp项目,并想用它做最简单的mvc应用程序。我的环境看起来像这样:

<artifactId>spring-core</artifactId>
        <artifactId>spring-test</artifactId>
        <artifactId>spring-beans</artifactId>
        <artifactId>spring-context</artifactId>
        <artifactId>spring-aop</artifactId>
        <artifactId>spring-context-support</artifactId>
        <artifactId>spring-tx</artifactId>
        <artifactId>spring-orm</artifactId>  
        <artifactId>spring-web</artifactId>
        <artifactId>spring-webmvc</artifactId>
        <artifactId>spring-asm</artifactId>
        <artifactId>log4j</artifactId>
        <artifactId>hibernate-core</artifactId>
        <artifactId>hibernate-cglib-repack</artifactId>
        <artifactId>hsqldb</artifactId>

        <!-- particular arears-->
         <dependency>
           <groupId>taglibs</groupId>
           <artifactId>standard</artifactId>
           <scope>provided</scope>
        </dependency>
        <dependency>
           <groupId>javax.servlet</groupId>
           <artifactId>servlet-api</artifactId>
           <scope>provided</scope>
        </dependency>
        <!-- -->

       <spring.version>3.0.5.RELEASE</spring.version>
       <hibernate.version>3.6.1.Final</hibernate.version>
       <hibernate-cglig-repack.version>2.1_3</hibernate-cglig-repack.version>
       <log4j.version>1.2.14</log4j.version>
       <javax-servlet-api.version>2.5</javax-servlet-api.version>
       <hsqldb.version>1.8.0.10</hsqldb.version>
       <mysql-connector.version>5.1.6</mysql-connector.version>
       <slf4j-log4j12.version>1.5.2</slf4j-log4j12.version>
       <slf4j-api.version>1.5.8</slf4j-api.version>
       <javaassist.version>3.7.ga</javaassist.version>
       <taglibs.version>1.1.2</taglibs.version>


        <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.0.2</version>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.1-beta-1</version>
            <configuration>
                <failOnMissingWebXml>false</failOnMissingWebXml>
            </configuration>
        </plugin>
    </plugins>
    <finalName>admin-webapp</finalName>
</build>
<profiles>
    <profile>
        <id>endorsed</id>
        <activation>
            <property>
                <name>sun.boot.class.path</name>
            </property>
        </activation>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>2.0.2</version>
                    <configuration>
                        <!-- javaee6 contains upgrades of APIs contained within the JDK itself.
                             As such these need to be placed on the bootclasspath, rather than classpath of the
                             compiler.
                             If you don't make use of these new updated API, you can delete the profile.
                             On non-SUN jdk, you will need to create a similar profile for your jdk, with the similar property as sun.boot.class.path in Sun's JDK.-->
                        <compilerArguments>
                            <bootclasspath>${settings.localRepository}/javax/javaee-endorsed-api/6.0/javaee-endorsed-api-6.0.jar${path.separator}${sun.boot.class.path}</bootclasspath>
                        </compilerArguments>
                    </configuration>
                    <dependencies>
                        <dependency>
                            <groupId>javax</groupId>
                            <artifactId>javaee-endorsed-api</artifactId>
                            <version>6.0</version>
                        </dependency>
                    </dependencies>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <netbeans.hint.deploy.server>Tomcat60</netbeans.hint.deploy.server>
    <tomcat.home>${env.CATALINA_HOME}</tomcat.home>
    <web.context>${project.artifactId}</web.context>
</properties>

我的applicationContext就像:

一样简单
<context:component-scan base-package="com.personal.springtest.admin.webapp" />
<mvc:annotation-driven />

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_3_0.xsd"
 version="3.0">
<session-config>
    <session-timeout>
        30
    </session-timeout>
</session-config>

<servlet>
    <servlet-name>iwadminservlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/project-admin-webapp-config.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

   <servlet-mapping>
    <servlet-name>iwadminservlet</servlet-name>
    <url-pattern>/</url-pattern>
   </servlet-mapping>
</web-app>

我的控制器是这样的:

@Controller
public class HomeController {

   @RequestMapping(value="/")
   public String Home(){
    System.out.print("THIS IS a demo mvc, i think i like it");
    // this is temporary, will use viewresolver when everything clears up
    return "/views/home.jsp";
   }

}

我的观点是:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="false" %>
<!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>JSP Page</title>
   </head>
   <body>
      <h1>Hello World!</h1>
   </body>
</html>

我得到的错误是

  

org.apache.jasper.JasperException:无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:http://java.sun.com/jsp/jstl/core

问题1 :我想知道是否由于我正在使用的版本,我想我已经阅读了有关tomcat支持的版本以及java ee版本的内容。真的从那种方式来解决我的问题。我怎样才能解决这个问题?

问题2 :在此错误之前我有代码400,因为我没有正确指向views/home.jsp,但我注意到当我在netbeans中运行应用程序时,它会打开带有网址的浏览器:http://localhot:8080/而我期待http://localhost:8080/admin-webapp/ admin-webapp是我的战争名称。我相信这是一个问题,我想解决它。

2 个答案:

答案 0 :(得分:11)

您需要JSTL实施:

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

或者如果您手动包含JSTL jar:

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

答案 1 :(得分:-1)

  1. here
  2. 下载JSTL API和JSTL实现
  3. 添加此指令:<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

  4. 将JAR文件粘贴到WEB-INF / lib文件夹中。这应该工作。 (它 为我工作。)