Ich habe eine Webanwendung basierend auf JSP/Servlet. Datenbank ist MySQL. In Web-App gibt es insertForm.jsp
, die Servlet aufruft, die ins
Methode in Java-Klasse aufruft.Unterschiedliches Verhalten hängt von der Ausnahme in der Datenbank ab
imports ...
public class DBaddData extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
...
some code
...
//create an instanse of a class responsible for insert
DBInsertRows dbir = new DBInsertRows();
try {
//call the inssert method
dbir.ins(dbObj);
} catch (ClassNotFoundException ex) {
Logger.getLogger(DBaddData.class.getName()).log(Level.SEVERE, null, ex);
}
...
RequestDispatcher ...
}
}
Klasse, die mit ins
Methode:
public class DBInsertRows {
public void ins(DBObjBaseStd dbObject) throws ClassNotFoundException
{
Connection con = null;
Statement stmt = null;
String query = "INSERT INTO bla-bla-bla ...";
try {
...
create con object
...
stmt = con.createStatement();
stmt.executeUpdate(query);
} catch (SQLException sqlEx) {
sqlEx.printStackTrace();
}
}
}
Insert Prozess funktioniert gut, aber! Wenn ich versuche, das gleiche Objekt (Zeile) einfügen, so dass ID ist bereits vorhanden in einer Tabelle habe ich eine Ausnahme:
MySQL Text
... Fehlercode: 1062. doppelten Eintrag ...
Apache Tomcat8 Text
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Doppelte Eintrag '' für ...
und das ist völlig in Ordnung. Nicht gut ist, dass ich nicht HTTP-Status 500 habe, daher habe ich keine Ahnung, wie diese Ausnahme bekommen und auf meiner Eine andere Situation mit Delete
Idee ist völlig das gleiche: Benutzer klicken Sie auf die Schaltfläche Löschen, JSP ruft Servlet, das für das Löschen verantwortlich ist Klasse mit Löschmethode. aber wenn der Benutzer klicken, ohne Objekt löschen gewählt, ich habe Ausnahme:
java.lang.NumberFormatException: null
Das ist auch in Ordnung. Aber jetzt habe ich auch Throwable
Ausnahme oder error-code 500
daher der glückliche Benutzer siehe errorPage.jsp
mit entsprechenden Text. Fragen:
- Warum gibt es verschiedene Arten von Fehlern?
- Wie kann ich den Fehlertext von
ins
Methode zu meinemerrorPage.jsp
übergeben?
weil manchmal wollen Sie verschiedene Fehler haben. z.B.Ein Standard-Anwendungsfall besteht darin, nach doppelten Nutzernamen zu suchen. Wenn Sie "auswählen/prüfen/einfügen", gibt es eine Wettlaufbedingung, die ein anderer Prozess hinter Ihrem Rücken einfügen kann. Also machen Sie eine 'Einfügung' und prüfen Sie auf doppelte Schlüsselverletzung. –
nicht sicher, ich verstehe Ihre Frage richtig. Wenn das Problem ist, dass, nachdem Sie eine SQL-Ausnahme in Ihrem catch-Block behandelt haben, gibt es keine 500 Statuscode, nun, das ist, weil Sie die Ausnahme abfangen. Sie müssten den Status 500 in der Antwort manuell im catch-Block setzen, indem Sie response.setStatus (500) aufrufen und den gewünschten Text schreiben, indem Sie response.getWriter() aufrufen. Print ("....") (auch übergeben eine HTTP-Antwort an das Servlet). – aiguy
Es gibt kein Antwortobjekt in der Klasse mit der Methode "ins". Es ist nur Java-Klasse. ** Servlet ** ruft innerhalb dieser Methode die 'ins'- und error-catches auf, nicht in ** Servlet **. Also, was ist besser Ansatz, um die Informationen über den Fehler ** Servlet ** zu senden? Meine Idee für den Moment ist es, den Rückgabewert zu implementieren, aber ist das eine gute Idee? –