【问题标题】:Java EE Servlet eclipse tomcat HTTP Error 500 Servlet execution threw an exceptionJava EE Servlet eclipse tomcat HTTP Error 500 Servlet执行抛出异常
【发布时间】:2015-08-26 09:21:11
【问题描述】:

我使用 hibernate-search-5.3.0.Beta2-dist、Eclipsse Indigo、Apache Tomcat v0.47

persitence.xml:

   <?xml version="1.0" encoding="UTF-8"?>
    <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
     <persistence-unit name="Hibernate Tutozone" transaction-type="RESOURCE_LOCAL">
     <provider>org.hibernate.ejb.HibernatePersistence</provider>
     <class>info.tutozone.food.Food</class>
     <properties>
     <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/tutozonedb"/>
     <property name="javax.persistence.jdbc.user" value="root"/>
     <property name="javax.persistence.jdbc.password" value="" />
     <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
     <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" />

     </properties>
     </persistence-unit>
    </persistence>

Food.java:

package info.tutozone.food;

import java.io.Serializable;
import java.lang.String;
import javax.persistence.*;

/**
 * Entity implementation class for Entity: Food
 *
 */
@Entity

public class Food implements Serializable {


 @Id
 private int id;
 private String name;
 private float price;
 private int quantity;
 private static final long serialVersionUID = 1L;

 public Food() {
 super();
 } 
 public int getId() {
 return this.id;
 }

 public void setId(int id) {
 this.id = id;
 } 
 public String getName() {
 return this.name;
 }

 public void setName(String name) {
 this.name = name;
 } 
 public float getPrice() {
 return this.price;
 }

 public void setPrice(float price) {
 this.price = price;
 } 
 public int getQuantity() {
 return this.quantity;
 }

 public void setQuantity(int quantity) {
 this.quantity = quantity;
 }
 @Override
 public String toString() {
 return "Food [id=" + id + ", name=" + name + ", price=" + price
 + ", quantity=" + quantity + "]";
 }

}

TestServlet.java:

    package info.tutozone.food;
 import java.io.IOException; 
 import javax.persistence.EntityManager;
 import javax.persistence.Persistence;
 import javax.servlet.ServletException;
 import javax.servlet.annotation.WebServlet;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 /**
 * Servlet implementation class TestServlet
 */
 @WebServlet("/TestServlet")
 public class TestServlet extends HttpServlet {
 private static final long serialVersionUID = 1L;

 /**
 * @see HttpServlet#HttpServlet()
 */
 public TestServlet() {
 super();
 // TODO Auto-generated constructor stub
 }

 /*
 * Tuto Hibernate avec Eclipse
 * author : Zied
 * www.tutozone.info
 */
 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 // TODO Auto-generated method stub

 EntityManager manager=Persistence.createEntityManagerFactory("Hibernate Tutozone").createEntityManager();

 manager.getTransaction().begin();
 manager.getTransaction().commit();

 }
 /**
 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
 */
 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 // TODO Auto-generated method stub
 }

 public static void main(String[] args) {
 // TODO Auto-generated method stub
 EntityManager manager = Persistence.createEntityManagerFactory(
 "Hibernate Tutozone").createEntityManager();

 manager.getTransaction().begin();
 // add a new row in table
 Food food = new Food();
 food.setId(1);
 food.setName("Cacke");
 food.setQuantity(new Integer(20));
 food.setPrice(new Float(2500));
 manager.persist(food);

 manager.getTransaction().commit();
 manager.close();
}}

当我在 tomcat 上部署这个项目时,http://localhost:8080/HibernateTutoZone/TestServlet 出现此错误

类型异常报告 消息 Servlet 执行抛出异常描述服务器 遇到一个内部错误,阻止它完成这个 要求。异常 javax.servlet.ServletException:Servlet 执行 抛出异常 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) 根本原因 java.lang.NoClassDefFoundError: org/jboss/jandex/IndexView org.hibernate.jpa.boot.spi.Bootstrap.getEntityManagerFactoryBuilder(Bootstrap.java:51)

Eclipsse Indigo 的控制台出现这个错误:

严重:servlet [info.tutozone.food.TestServlet] 在路径 [/HibernateTutoZone] 的上下文中的 Servlet.service() 引发异常 [Servlet 执行引发异常],根本原因 java.lang.ClassNotFoundException: org.jboss.jandex.IndexView

如果我在我的项目上运行 as->run configuation->Apache Tomcat->classpath->user Entries-> Add external jar -> jandex-1.1.0.final.jar,我没有错误

但即使我没有错误,如果我这样做,TestServlet.java 的 main() 也不起作用

那我想了解是什么问题以及如何解决?

【问题讨论】:

    标签: java eclipse hibernate tomcat servlets


    【解决方案1】:

    在这种情况下,您不能使用外部 jar。 Tomcat 本身在运行时负责决定它接受哪些 jar 作为应用程序的一部分,这意味着以一种或另一种方式将它们放入 Web 应用程序的 WEB-INF/lib

    请停止使用 Indigo,它已经快 4 岁了。

    【讨论】:

    • 现在我正在使用 Eclipse Luna Service Release 2 (4.4.2),所有的 JAR 都在 WEB-INF/lib 中。我没有错误,但 TestServlet.java 的 main() 不起作用。
    • Servlet 不使用main().... 以何种方式不起作用?这应该是它自己的问题吗?
    • 是的,对不起,我从教程中复制/粘贴了这个 main() 函数,没有考虑。然后我重命名 public static void main(String[] args) { by protected void main2(String[] args) { 并从 doget() 调用此函数。现在它正在工作。谢谢
    最近更新 更多