2015-09-05 178 views
3

這是我第一次使用Spring,我正在關注PluralSight的教程。運行第一個示例,我遇到了標題中列出的錯誤。在我的控制檯中,我收到類似這樣的錯誤。我正在使用舊版本的依賴關係來完成此課程。我已經確保嚴格按照教程進行操作,所以不確定我是否搞砸了某個地方或某些東西已被棄用。我使用http://localhost:8080/FitnessTracker/greeting.htmlHTTP狀態500 - servlet的Servlet.init()fitTrackerServlet拋出異常

SEVERE: Context initialization failed 
java.lang.IllegalArgumentException 
SEVERE: StandardWrapper.Throwable 
java.lang.IllegalArgumentException 
SEVERE: Allocate exception for servlet fitTrackerServlet 
java.lang.IllegalArgumentException 

HelloController.java

package com.pluralsight.controller; 

import org.springframework.stereotype.Controller; 
import org.springframework.ui.Model; 
import org.springframework.web.bind.annotation.RequestMapping; 

@Controller 
public class HelloController { 

    @RequestMapping(value = "/greeting") 
    public String sayHello(Model model) { 
     model.addAttribute("greeting", "Hello World"); 
     return "hello"; 
    } 
} 

的servlet-config.xml中

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:mvc="http://www.springframework.org/schema/mvc" 
    xmlns:p="http://www.springframework.org/schema/p" 
    xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd 
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd"> 

    <mvc:annotation-driven /> 
    <context:component-scan base-package="com.pluralsight.controller" /> 

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" 
    p:prefix="/WEB-INF/jsp/" p:suffix=".jsp"/> 

</beans> 

的hello.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<!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=ISO-8859-1"> 
<title>Insert title here</title> 
</head> 
<body> 
    <h1>${greeting}</h1> 
</body> 
</html> 

的web.xml

<?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" version="2.5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 
    <servlet> 
    <servlet-name>fitTrackerServlet</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <init-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/config/servlet-config.xml</param-value> 
    </init-param> 
    </servlet> 

    <servlet-mapping> 
    <servlet-name>fitTrackerServlet</servlet-name> 
    <url-pattern>*.html</url-pattern> 
    </servlet-mapping> 

    <display-name>Archetype Created Web Application</display-name> 
</web-app> 

的pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.pluralsight</groupId> 
    <artifactId>FitnessTracker</artifactId> 
    <packaging>war</packaging> 
    <version>0.0.1-SNAPSHOT</version> 
    <name>FitnessTracker Maven Webapp</name> 
    <url>http://maven.apache.org</url> 
    <dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>3.8.1</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-webmvc</artifactId> 
     <version>3.2.0.RELEASE</version> 
    </dependency> 


    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>servlet-api</artifactId> 
     <version>2.5</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>jstl</artifactId> 
     <version>1.2</version> 
     <scope>provided</scope> 
    </dependency> 
    </dependencies> 
    <build> 
    <finalName>FitnessTracker</finalName> 
    </build> 
</project> 
+0

在您的servlet-config.xml中,嘗試刪除此行xmlns:p =「http://www.springframework.org/schema/p」和檢查 –

+0

您所需要做的就是確保您的servlet容器的運行時是Java 7.有關詳細信息,請參閱[我的答案](https://stackoverflow.com/a/44530401/3395831)。 – Utku

回答

7

我有同樣的問題,同樣的PluralSight教程。我安裝了Java 1.7和Java 1.8。該項目顯然拋出了Java 1.8的例外。爲了糾正這種情況,您需要確保您的Spring STS環境設置爲使用Java 1.7。

  1. 右鍵點擊該項目並選擇屬性
  2. 屬性對話框中,選擇Java編譯器
  3. 在該對話框的底部,選擇鏈接以配置安裝的JRE
  4. 添加定義以指向JRE 1.7並將其選爲默認值。

PluralSight教程現在適用於我。我自己是Java和Spring MVC的初學者,所以我不確定這是否是解決問題的最佳方法。

1

試用4.1.5。這個對我有用。

<dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-webmvc</artifactId> 
     <version>4.1.5.RELEASE</version> 
</dependency> 
3

那麼,spring 3.2需要java 7或更早的版本。另一種解決方案不是更改項目屬性,而是將pom.xml中的spring mvc的版本號更改爲4.2.4.RELEASE而不是之前使用的3.2.0.RELEASE。 現在,您可以正常使用java 8繼續。

下面,我將顯示整個pom.xml,只更改上面提到的。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.pluralsight</groupId> 
    <artifactId>FitnessTracker</artifactId> 
    <packaging>war</packaging> 
    <version>0.0.1-SNAPSHOT</version> 
    <name>FitnessTracker Maven Webapp</name> 
    <url>http://maven.apache.org</url> 
    <dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>3.8.1</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>jstl</artifactId> 
     <version>1.2</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>servlet-api</artifactId> 
     <version>2.5</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-webmvc</artifactId> 
     <version>4.2.4.RELEASE</version> 
    </dependency> 
    </dependencies> 
    <build> 
    <finalName>FitnessTracker</finalName> 
    </build> 
</project> 
+0

這個工程,我不想爲此僅安裝Java 1.7。 –

0
<dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-webmvc</artifactId> 
     <version>3.2.3.RELEASE</version> 
    </dependency>   
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-jdbc</artifactId> 
     <version>3.2.3.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-orm</artifactId> 
     <version>3.2.3.RELEASE</version> 
    </dependency> 

嘗試使用3.2.3.RELEASE版本只要您有基於彈性件依賴

0

我面臨着同樣的問題。 所以你要做的就是使用Tomcat v7。0, 這是因爲我使用的是Tomcat v9.0,它不適用於JRE7但是JRE8。 所以

  • 設置與Tomcat的V7.0您的應用程序,並與JRE7設置你的STS或Eclipse中默認的構建路徑。
  • 重新啓動Tomcat服務器。
  • 轉到您的瀏覽器並將上面的鏈接粘貼到此您! :)
0

要解決這個問題,只要你的servlet容器的運行時環境改變Java 7中在Eclipse:

  1. 首選項 - >服務器 - >運行環境
  2. 選擇您正在運行的服務器項目下並點擊編輯...
  3. JRE部分選擇Java 7 JRE。請注意,爲了能夠做到這一點,您首先需要下載並安裝Java 7,並在Eclipse中提供Java 7 JRE。在Eclipse中提供Java 7 JRE:
    1. 下載Java 7並安裝它。
    2. 在Eclipse中,選擇Preferences - > Java - > Installed JRE,然後單擊搜索...。如果您已將Java 7安裝到其默認路徑,那麼Eclipse應該能夠自動發現Java 7。
    3. 將Java 7添加到Eclipse後,可以選擇JRE 7作爲servlet容器的運行時環境。

我也建議指示運行時環境中的服務器的名稱使用。例如,在Eclipse中,不要讓服務器名稱只是「Apache Tomcat v7.0」,而是使其成爲「Apache Tomcat v7.0 - JRE 7」。當然,如果稍後更改此服務器的運行時環境,則應更新此名稱。

來源:http://www.codejava.net/ides/eclipse/how-to-change-java-runtime-environment-for-tomcat-in-eclipse

注:此答案適用於任何其他的IDE以及。您只需確保您的servlet容器在JRE 7下運行。

相關問題