2011-04-14 71 views
8

我拿起了一個新創建的maven webapp項目,並且想要用它做最簡單的mvc應用程序。我的環境中看起來像這樣:絕對的uri:http://java.sun.com/jsp/jstl/core無法解析

<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:絕對URI:http://java.sun.com/jsp/jstl/core不能在web.xml或部署該應用

的jar文件來解決

問題1:我想知道,如果它是由於我使用的版本,我想我讀過一些關於在Tomcat中支持的版本,以及Java EE版本used.don't真正得到來來往往那是解決我的問題的一種方法。我怎樣才能解決這個問題?

問題2http://localhot:8080/同時:這個錯誤我有代碼400,因爲我沒有將其指向正確views/home.jsp,但我也注意到,當我運行NetBeans中的應用程序,它的網址打開瀏覽器之前我期待http://localhost:8080/admin-webapp/ admin-webapp成爲我的戰爭名稱。我相信這是一個問題,並希望解決它。

+0

Tomcat的確根本不帶JSTL。閱讀更多在我們的JSTL維基頁面:http://stackoverflow.com/questions/tagged/jstl – BalusC 2011-04-14 04:19:15

+0

感謝您的答案,關於問題的任何想法2。它似乎與我很多 – 2011-04-14 06:53:20

回答

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> 
+0

謝謝jeff現在是固定的。對我來說也是非常珍貴的。應用程序仍然從'http:// localhost:8080 /'開始,而不是'http:// localhost:8080/nameofmywar /'這怎麼解決?謝謝 – 2011-04-14 06:04:03

+2

聽起來好像這不是你的應用程序的問題,而是你想編輯NetBeans中的運行配置。在NetBeans項目屬性中,在「運行」類別下,什麼是「上下文路徑」設置?這聽起來像沒有上下文路徑,或者它被設置爲根(/)。如果它是空白的,則放入「admin-webapp」。 – Jeff 2011-04-14 20:29:46

-1
  1. 同時下載JSTL API和JSTL實現從here
  2. 添加此指令:<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

  3. 將JAR文件粘貼到WEB-INF/lib文件夾中。這應該工作。 (它 爲我工作。)