# Servlet-MySQL DB



## KayKarribean (11. Jun 2017)

Hallo 
Zunächst: ich bin absoluter Anfänger, aber muss für ein Webprojekt eine Dynamische Webanwendung mit best. Vorraussetzungen programmieren.
Seit gestern Abend sitze ich allerdings vor folgendem Problem und andere Foren helfen mir leider nicht weiter. Ich hoffe wirklich ihr könnt mir helfen und meinen Fehler finden!!

Ich habe versucht Daten über ein Servlet in eine Datenbank zu laden. Ich bekomme allerdings immer eine Fehlermedung, sobald ich das Projekt auf dem Tomcat 8.0 laufen lasse.
Fehlermeldung:

*HTTP Status 404 - /ServletExamples/uploadToDB*
*type* Status report

*message* /ServletExamples/uploadToDB

*description* The requested resource is not available.

*Apache Tomcat/8.0.44*

Da ich mich nicht auskenne, habe ich mehrere Examples zu dem Thema ausprobiert, unter anderem dieses Beispiel. Kein einziges Funktioniert bei mir. Sobald ich mir Response bzw. get und post Methoden arbeite funktioniert nichts mehr. 

ich habe folgende Ordnerstruktur:
Java Resources
    '-src
        '-org.o7planning.servletexamples
               '-uploadToDBResultsServlet.java
               '-uploadToDBServlet.java
WebContent
     '-META-INF
     '-WEB-INF
         '-jsps
               '-uploadToDB.jsp
               '-uploadToDBResults.jsp
         '-lib

Ich habe folgenden Code verwendet:
*upload.ToDBResultsServlet.java*
package org.o7planning.servletexamples;
import java.io.IOException;
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;
@WebServlet("/uploadToDBResults")
public class uploadToDBResultsServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    public uploadToDBResultsServlet() {
        super();
    }
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        RequestDispatcher dispatcher
            = request.getServletContext().getRequestDispatcher("/WEB-INF/jsps/uploadToDBResults.jsp");
        dispatcher.forward(request, response);
    }
}

*uploadToDBServlet.java*
package org.o7planning.servletexamples;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import org.o7planning.tutorial.jdbc.ConnectionUtils;
@WebServlet("/uploadToDB")
@MultipartConfig(fileSizeThreshold = 1024 * 1024 * 2, // 2MB
        maxFileSize = 1024 * 1024 * 10, // 10MB
        maxRequestSize = 1024 * 1024 * 50) // 50MB
public class uploadToDBServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        RequestDispatcher dispatcher = request.getServletContext().getRequestDispatcher("/WEB-INF/jsps/uploadToDB.jsp");
        dispatcher.forward(request, response);
    }
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        Connection conn = null;
        try {
            // Connection to Database
            // (See more in JDBC Tutorial).
            conn = ConnectionUtils.getMyConnection();
            conn.setAutoCommit(false);
            String description = request.getParameter("description");
            // Part list (multi files).
            for (Part part : request.getParts()) {
                String fileName = extractFileName(part);
                if (fileName != null && fileName.length() > 0) {
                    // File data
                    InputStream is = part.getInputStream();
                    // Write to file
                    this.writeToDB(conn, fileName, is, description);
                }
            }
            conn.commit();
            // Upload successfully!.
            response.sendRedirect(request.getContextPath() + "/uploadToDBResults");
        } catch (Exception e) {
            e.printStackTrace();
            request.setAttribute("errorMessage", "Error: " + e.getMessage());
            RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/WEB-INF/jsps/uploadToDB.jsp");
            dispatcher.forward(request, response);
        } finally {
            this.closeQuietly(conn);
        }
    }
    private String extractFileName(Part part) {
        // form-data; name="file"; filename="C:\file1.zip"
        // form-data; name="file"; filename="C:\Note\file2.zip"
        String contentDisp = part.getHeader("content-disposition");
        String[] items = contentDisp.split(";");
        for (String s : items) {
            if (s.trim().startsWith("filename")) {
                // C:\file1.zip
                // C:\Note\file2.zip
                String clientFileName = s.substring(s.indexOf("=") + 2, s.length() - 1);
                clientFileName = clientFileName.replace("\\", "/");
                int i = clientFileName.lastIndexOf('/');
                // file1.zip
                // file2.zip
                return clientFileName.substring(i + 1);
            }
        }
        return null;
    }
    private Long getMaxAttachmentId(Connection conn) throws SQLException {
        String sql = "Select max(a.id) from Attachment a";
        PreparedStatement pstm = conn.prepareStatement(sql);
        ResultSet rs = pstm.executeQuery();
        if (rs.next()) {
            long max = rs.getLong(1);
            return max;
        }
        return 0L;
    }
    private void writeToDB(Connection conn, String fileName, InputStream is, String description) throws SQLException {
        String sql = "Insert into Attachment(Id,File_Name,File_Data,Description) " //
                + " values (?,?,?,?) ";
        PreparedStatement pstm = conn.prepareStatement(sql);
        Long id = this.getMaxAttachmentId(conn) + 1;
        pstm.setLong(1, id);
        pstm.setString(2, fileName);
        pstm.setBlob(3, is);
        pstm.setString(4, description);
        pstm.executeUpdate();
    }
    private void closeQuietly(Connection conn) {
        try {
            if (conn != null) {
                conn.close();
            }
        } catch (Exception e) {
        }
    }
}

*uploadToDB.jsp*
<!DOCTYPE >
<html>
<head>
<title>Upload files</title>
</head>
<body>
    <div style="padding:5px; color:red;font-style:italic;">
       ${errorMessage}
    </div>

    <h2>Upload Files</h2>
    <form method="post" action="${pageContext.request.contextPath}/uploadToDB"
        enctype="multipart/form-data">

        Select file to upload:
        <br />
        <input type="file" name="file"  />
        <br />
        <input type="file" name="file" />
        <br />
        Description:
        <br />
        <input type="text" name="description" size="100" />
        <br />
        <br />
        <input type="submit" value="Upload" />
    </form>

</body>
</html>

*uploadToDBR.jsp*
<!DOCTYPE >
<html>
<head>
<title>Upload files</title>
</head>
<body>
    <h3>Upload has been done successfully!</h3>
    <a href="${pageContext.request.contextPath}/uploadToDB">Continue Upload</a>


</body>
</html>

Ich hoffe wirklich ich wisst weiter. Danke schonmal im Voraus!


----------



## Dukel (12. Jun 2017)

1. Du kannst hier die Code Tags nutzen, dann ist es besser lesbar.
2. Fehler 404 heisst Seite nicht gefunden. Mit deinem Code kann alles stimmen, aber der Zugriff auf diesen geht wohl nicht richtig.
3. Geht Tomcat generell? Kannst du mal z.B. ein einfaches Hello World ausgeben?


----------



## KayKarribean (12. Jun 2017)

Oh sry..das wusste ich nicht.
Also ich meine jsps funktionieren einwandfrei. Sobald ein Servlet dabei ist hängts.

Nein, auch ein einfaches HelloWorldServlet funktioniert nicht 
Kann/muss ich bei tomcat dafür irgendetwas konfigurieren oder ähnliches??


----------

