MySQL Aus Servlet in Datenbank schreiben

User4657

Neues Mitglied
Hallo,
ich muss für mein Studium eine kleines Web-Projekt abliefern und es sollte auch Daten aus einem Formular über ein Servlet in eine DB schreibe und zum Schluss in einer JSP ausgeben.

Folgendes habe ich mit den Unterlagen aus meiner Vorlesung programmiert, aber es will einfach nicht funktionieren. Ich kenne mich im Moment einfach noch zu wenig damit aus und hoffe wirklich ihr könnt mir weiterhelfen!!

Hier meine Infos:
- die Form, das Servlet, die Bean und die JSP befinden sich im Root-Verzeichnis
- Datenbank wurde mit MySQL erstellt:
> Datenbank: "mydb"
> Tablename: "products"
> "id" (INT, PrimaryKey), "productname" (VARCHAR(255)), "quantity" (INT))


Produktform.html:
HTML:
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Produktformular</title>

    </head>
    <body>
        <h1>Produktformular</h1>
        <form method="post" action="CreateServlet" accept-charset="utf-8">
            <div>
                <label for="productid_id">Produkt-ID:</label>
                <input type="text" name="productid" id="productid_id" />
            </div>
            <div>
                <label for="productname_id">Produktname:</label>
                <input type="text" name="productname" id="productname_id" />
            </div>
            <div>
                <label for="quantity_id">Menge:</label>
                <input type="number" name="quantity" id="quantity_id" />
            </div>
                <div>
                  <label for="supplier_id">Lieferanten:</label>
                  <select name="supplier" id="supplier_id" size="3">
                    <option value="supplier_01" selected>Lieferant 1</option>
                    <option value="supplier_02">Lieferant 2</option>
                    <option value="supplier_03">Lieferant 3</option>
                    <option value="supplier_04">Lieferant 4</option>
                    <option value="supplier_05">Lieferant 5</option>
                    <option value="supplier_06">Lieferant 6</option>
                    <option value="supplier_07">Lieferant 7</option>
                  </select>
                </div>
            <div>
                <button type="submit" id="button">Daten senden</button>
            </div>
        </form>
    </body>
</html>


CreateServlet.java:
Java:
package edu.thi.servlet;

import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.annotation.Resource;
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.sql.DataSource;


import edu.thi.bean.Product;

/**
* Servlet implementation class CreateServlet
*/
@WebServlet("/CreateServlet")
public class CreateServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
      
    @Resource(lookup="jdbc/Mydb")
    private DataSource ds;
   
    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
   
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // Servlet zur Entgegennahme von Formularinhalten, Speicherung der Daten in einer DB und Generierung
        // eines Beans zur Weitergabe der Formulardaten an eine JSP
       
        request.setCharacterEncoding("UTF-8");    // In diesem Format erwartet das Servlet jetzt die Formulardaten
       
        Product pro = new Product();
        pro.setId(Integer.valueOf(request.getParameter("productid")));
        pro.setProductname(request.getParameter("productname"));
        pro.setQuantity(Integer.valueOf(request.getParameter("quantity")));
       
        // DB-Zugriff
        persist(pro);
       
        // Scope "Request"
        request.setAttribute("Produkt_Ident", pro);
       
        // Weiterleiten an JSP
        final RequestDispatcher dispatcher = request.getRequestDispatcher("1_outputdata.jsp");
        dispatcher.forward(request, response);
       
    }       
       
    private void persist(Product pro) throws ServletException {
        // DB-Zugriff
        String[] generatedKeys = new String[] {"id"};    // Name der Spalte(n), die automatisch generiert wird(werden)
       
        try (Connection con = ds.getConnection();
             /*final Statement stmt = con.createStatement()*/
            PreparedStatement pstmt = con.prepareStatement(
                    "INSERT INTO products (productname, quantity) VALUES (?,?)",
                    generatedKeys)){

            // Zugriff Über Klasse java.sql.Statement
/*            stmt.executeUpdate("INSERT INTO employees (first,last,age) VALUES ('" +
                                form.getFirstname() + "','" +
                                form.getLastname() + "','" +
                                form.getAge() + "')"
                    );
*/       
            // Zugriff über Klasse java.sql.PreparedStatement
            pstmt.setString(1, pro.getProductname());
            pstmt.setLong(2, pro.getQuantity());
            pstmt.executeUpdate();
           
            // Generierte(n) Schlüssel auslesen (funktioniert nur mit PreparedStatement)
            ResultSet rs = pstmt.getGeneratedKeys();
            while (rs.next()) {
                pro.setId(rs.getInt(1));
            }
        } catch (Exception ex) {
            throw new ServletException(ex.getMessage());
        }
    }

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

}


Product.java:
Java:
package edu.thi.bean;

import java.io.Serializable;
import java.util.Date;

public class Product implements Serializable {
    private static final long serialVersionUID = 1L;
   
    private Integer id;
    private String productname;
    private Integer quantity;
    private Date proddate;
    private Date prodtime;
   
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getProductname() {
        return productname;
    }
    public void setProductname(String productname) {
        this.productname = productname;
    }
    public Integer getQuantity() {
        return quantity;
    }
    public void setQuantity(Integer quantity) {
        this.quantity = quantity;
    }
    public Date getProddate() {
        return proddate;
    }
    public void setProddate(Date proddate) {
        this.proddate = proddate;
    }
    public Date getProdtime() {
        return prodtime;
    }
    public void setProdtime(Date prodtime) {
        this.prodtime = prodtime;
    }
}


1_outputdata.jsp:
HTML:
package edu.thi.bean;

import java.io.Serializable;
import java.util.Date;

public class Product implements Serializable {
    private static final long serialVersionUID = 1L;
   
    private Integer id;
    private String productname;
    private Integer quantity;
    private Date proddate;
    private Date prodtime;
   
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getProductname() {
        return productname;
    }
    public void setProductname(String productname) {
        this.productname = productname;
    }
    public Integer getQuantity() {
        return quantity;
    }
    public void setQuantity(Integer quantity) {
        this.quantity = quantity;
    }
    public Date getProddate() {
        return proddate;
    }
    public void setProddate(Date proddate) {
        this.proddate = proddate;
    }
    public Date getProdtime() {
        return prodtime;
    }
    public void setProdtime(Date prodtime) {
        this.prodtime = prodtime;
    }
}
 
Oh sorry! hatte Vergessen die Fehlermeldung einzufügen!

Code:
HTTP Status 500 - Internal Server Error


type Exception report

messageInternal Server Error

descriptionThe server encountered an internal error that prevented it from fulfilling this request.

exception
javax.servlet.ServletException: Error instantiating servlet class edu.thi.servlet.Demo07Servlet


root cause
com.sun.enterprise.container.common.spi.util.InjectionException: Error creating managed object for class: class edu.thi.servlet.Demo07Servlet


root cause
com.sun.enterprise.container.common.spi.util.InjectionException: Exception attempting to inject Res-Ref-Env-Property: edu.thi.servlet.Demo07Servlet/ds@javax.sql.DataSource@ resolved as: jndi: jdbc/MySQLPool@res principal: null@mail: null
No Runtime properties
Database Vendor : null
Create Tables at Deploy : false
Delete Tables at Undeploy : false into class edu.thi.servlet.Demo07Servlet: Lookup failed for 'java:comp/env/edu.thi.servlet.Demo07Servlet/ds' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming}


root cause
javax.naming.NamingException: Lookup failed for 'java:comp/env/edu.thi.servlet.Demo07Servlet/ds' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is javax.naming.NamingException: Lookup failed for 'jdbc/MySQLPool' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming, com.sun.enterprise.naming.logicalName=java:comp/env/edu.thi.servlet.Demo07Servlet/ds} [Root exception is javax.naming.NameNotFoundException: MySQLPool not found]]


root cause
javax.naming.NamingException: Lookup failed for 'jdbc/MySQLPool' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming, com.sun.enterprise.naming.logicalName=java:comp/env/edu.thi.servlet.Demo07Servlet/ds} [Root exception is javax.naming.NameNotFoundException: MySQLPool not found]


root cause
javax.naming.NameNotFoundException: MySQLPool not found


note The full stack traces of the exception and its root causes are available in the GlassFish Server Open Source Edition 4.1.2 logs.
 

Neue Themen


Zurück
Oben