怎麼做我想做的事:servlet沒有堅持實體
我剛開始使用JPA,因此我希望瞭解如何從不同的角度工作堅持實體來說(應用程序管理,容器管理)。應用程序管理工作正常,但是我遇到問題,使用TestServlet從Web應用程序中使用實體管理器持久化實體。
我有什麼迄今所做的:
IDE:的NetBeans 8.0.2 服務器:GlassFish的4.1 的Mysql 5.6 JPA 2.1:的EclipseLink
- 我創建了一個Web應用程序項目。
- 我使用NetBeans嚮導從數據庫導入了實體。 由於某些原因,我無法從jdbc/__ default導入它們。 我必須創建一個新的數據源。在這種情況下,它是爲jdbc/__網上商店
我只是想一個Servlet中創建一個實體,並在數據庫中堅持它只是爲了瞭解它是如何工作之前,我繼續前進,但顯然我不太明白這一點。
我連接到數據庫,我可以通過Java應用程序訪問它,但不能使用Web容器中的Servlet。
MySQL驅動程序位於類路徑MAIN - 庫中。
否拋出異常。我可以在瀏覽器中看到Servlet。然而,通過RequestDispatcher的重定向也不起作用,瀏覽器URL停留在web-jpa/test上。
我的問題:
這有什麼錯我的Servlet或者因爲堅持不工作的persistence.xml?
的persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/ persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="jpa-webPU" transaction-type="JTA">
<jta-data-source>jdbc/__onlineshop</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties/>
</persistence-unit>
TestServlet.java:
package jpa;
import java.io.IOException;
import javax.annotation.Resource;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.PersistenceUnit;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.transaction.UserTransaction;
@WebServlet("/test")
public class TestServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@PersistenceUnit
EntityManagerFactory emf;
@Resource
private UserTransaction ut;
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
EntityManager em = emf.createEntityManager();
Customer customer = new Customer();
customer.setEmail("[email protected]");
customer.setPassword("password");
try
{
ut.begin();
em.persist(customer);
ut.commit();
} catch (Exception e) {
try
{
ut.rollback();
} catch (Exception e1)
{
e1.printStackTrace();
}
throw new ServletException(e.getMessage());
}finally
{
em.close();
}
RequestDispatcher dispatcher = request.getRequestDispatcher ("index.html");
dispatcher.forward(request, response);
}
}
謝謝!
p.s .:任何暗示讚賞!
你是混亂的重定向和轉發。轉發只是將處理請求的責任轉移給其他組件。它無法更改網址。重定向(使用HttpServletResponse.sendRedirect())向瀏覽器發送響應並告訴它轉到另一個URL。這可以更改網址。 – 2015-02-08 17:41:54
你的問題是什麼? – 2015-02-08 17:42:00
我已編輯帖子。基本的問題是:我是如何接近在servlet中持久化一個實體的?我不明白爲什麼它不會將數據庫中的實體持久化。 – SklogW 2015-02-08 17:45:11