所以我在Java中使用HttpServlet编写了一个Web服务,这个Web服务必须将一个车辆列表返回到任何应用程序调用它。调用静态方法获取Vehicles
列表,该方法创建Hibernate会话,从数据库中获取车辆列表,并将其返回给调用者。
如果我将它作为Servlet类中的main方法运行,它的工作效果非常好。但是,如果我在doGet()
方法中添加相同的代码,则会发生异常。
以下是代码:
Servlet类(这是一个在Eclipse中运行的主要方法):
public static void main(String[]a){
//obtain the list of vehicles from the database
List<Vehicle> vehicles = ExecuteVehicle.getVehicleList();
for (Vehicle vehicle:vehicles){
System.out.println(vehicle.getVehicleId());
}
}
这是getVehicleList()
方法:
public static List<Vehicle> getVehicleList(){
//open a Session
Session session = HibernateUtilities.getSessionFactory().openSession();
//start a transaction
session.beginTransaction();
//SELECT STATEMENT for the entire list of Vehicles
Query<Vehicle> query = session.getNamedQuery("SelectAllVehicles"); //query name is declared in the mapping file
List<Vehicle> vehicles = query.list();
//commit the changes and end the transaction
session.getTransaction().commit();
//close the Session
session.close();
//close the SessionFactory
HibernateUtilities.getSessionFactory().close();
return vehicles;
}
如果你试图将它作为Web服务实际运行,这就是Servlet类中的doGet()
方法崩溃了:
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//obtain the list of vehicles from the database
List<Vehicle> vehicles = ExecuteVehicle.getVehicleList();
//start writing a stream of data
resp.setContentType("application/json");
PrintWriter writer = resp.getWriter();
for (Vehicle vehicle:vehicles){
writer.println(vehicle.getVehicleId());
}
writer.flush();
writer.close();
}
如果我尝试将其用作Web服务,我会收到Hibernate异常:
java.lang.NoClassDefFoundError: org/hibernate/HibernateException
显然,不知何故,它无法找到我的一个课程。我想不出为什么会这样。如果使用main方法,但为什么它会使用与Web服务相同的完整代码崩溃?