Как сохранить данные из моего пользовательского интерфейса в базе данных? - PullRequest
0 голосов
/ 14 марта 2012

Я только начал изучать Hibernate и Servlets. У меня есть форма (имя, адрес электронной почты), я заполняю эти поля и запрос отправляется на сервер. Затем я получаю данные с сервера и печатаю их. Это работает правильно!

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String name = request.getParameter("userName");
    String email = request.getParameter("email");
    String ip = request.getRemoteAddr();

    response.getWriter().println("<html>");
    response.getWriter().println("<head>");
    response.getWriter().println("<title>This is a response</title>");
    response.getWriter().println("<head>");
    response.getWriter().println("<body>");

    response.getWriter().println("<br>Your name is: " + name);
    response.getWriter().println("<br>Your email is: " + email);
    response.getWriter().println("<br>Your IP address is: " + ip);

    response.getWriter().println("</body>");
    response.getWriter().println("</html>");

}

Также у меня есть БД (файлы db и .xml правильно настроены, пинг выполнен успешно, сопоставление записано) и код Hibernate:

public static void main(String[] args) {
    AnnotationConfiguration config = new AnnotationConfiguration();
    config.configure("hibernate.cfg.xml");

    SessionFactory factory = config.buildSessionFactory();
    Session session = factory.openSession();
    session.beginTransaction();

    Data data = new Data();
    data.setUserName(name);
    data.setUserEmail(email);
    session.save(data);

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

Также у меня есть класс данных:

@Entity
public class Data {

    @Id
    @GeneratedValue
    private int Id;
    private String userName;
    private String userEmail;

//getteres, setters...
}

Но если я помещаю этот код в сервлет, я получаю ошибку HTTP 500. Как я могу определить, появляется сообщение об ошибке:

javax.servlet.ServletException: Error instantiating servlet class org.server.db.test.ServletExample org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859) org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11P‌​rotocol.java:602) org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) java.lang.Thread.run(Thread.java:722)

Как я могу поместить свою информацию с сервера в базу данных?

мой файл web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>Example02</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <description></description>
    <display-name>ServletExample</display-name>
    <servlet-name>ServletExample</servlet-name>
    <servlet-class>org.server.db.test.ServletExample</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>ServletExample</servlet-name>
    <url-pattern>/servlet1</url-pattern>
  </servlet-mapping>
</web-app>
* Cfg файл hibernate *: 1017 *
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

    <session-factory>

        <!-- Database connection settings -->
        <property name="connection.driver_class">org.postgresql.Driver</property>
        <property name="connection.url">jdbc:postgresql://localhost:5432/db</property>
        <property name="connection.username">postgres</property>
        <property name="connection.password">***</property>

        <!-- JDBC connection pool (use the built-in) -->
        <property name="connection.pool_size">2</property>

        <!-- SQL dialect -->
        <property name="dialect">org.hibernate.dialect.PostgreSQLDialect</property>

        <!-- Enable Hibernate's current session context -->
        <property name="current_session_context_class">thread</property>

        <!-- Disable the second-level cache  -->
        <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

        <!-- Echo all executed SQL to stdout -->
        <property name="show_sql">true</property>

        <!-- Drop and re-create the database schema on startup -->
        <property name="hbm2ddl.auto">create</property>

         <mapping class="org.server.db.test.Data" />
         <mapping class="org.server.db.test.ServletExample" />

    </session-factory>

</hibernate-configuration>

1 Ответ

0 голосов
/ 15 марта 2012

javax.servlet.ServletException: Ошибка при создании экземпляра класса сервлета org.server.db.test.ServletExample

Кстати, под прикрытием сервера произошла ошибка следующей конструкции с исключением:

ServletExample servletExample = new ServletExample();

Точная причина упоминается ниже в трассировке стека. Это самый нижний. Прочтите журнал сервера, чтобы найти его. Эта проблема, по крайней мере, не связана с «Сохранением данных из пользовательского интерфейса в базе данных».

...