The problem is you never call the processRequest
method in your other methods. The processRequest
method is not part of the Servlet API so you need to call it yourself.
Unable to catch primary key exception in servlets
-
30-06-2022 - |
Frage
I am inserting some values in a table and creating a new table in servlets. I have wrote a code to catch SQLException and redirect to a jsp page with error msg. While inserting new values in a table using servlet if a primary key constraint is getting violated my servlet is not catching the exception and i am getting a blank page.
My servlet code:-
package Servlets;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;
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;
/**
*
* @author TALPESH
*/
@MultipartConfig
public class Upload extends HttpServlet {
private final static Logger LOGGER =
Logger.getLogger(Upload.class.getCanonicalName());
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException{
response.setContentType("text/html;charset=UTF-8");
Connection con;
Statement s;
final String path = "D:/6th sem/MP/OnlineExamination/web/app_data/questionbanks";
final Part filePart = request.getPart("file");
final String fileName = getFileName(filePart);
String branch = request.getParameter("branch");
String sem = request.getParameter("semester");
String course = request.getParameter("course");
String name = request.getParameter("name");
OutputStream out = null;
InputStream filecontent = null;
PrintWriter writer = response.getWriter();
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con=DriverManager.getConnection("jdbc:odbc:online_testing");
s=con.createStatement();
String sql="insert into bank(branch,sem,course,bname) values('"+branch+"','"+sem+"','"+course+"','"+name+"')";
s.executeUpdate(sql);
String sql3="CREATE TABLE "+name+"(ID AUTOINCREMENT,question varchar(255),option1 varchar(255),option2 varchar(255),option3 varchar(255),option4 varchar(255),answer varchar(255)) ";
s.executeUpdate(sql3);
s.close();
con.close();
out = new FileOutputStream(new File(path + File.separator
+ fileName));
filecontent = filePart.getInputStream();
int read = 0;
final byte[] bytes = new byte[1024];
while ((read = filecontent.read(bytes)) != -1) {
out.write(bytes, 0, read);
}
request.getSession().setAttribute("msg", "Your Question bank has been uploaded");
response.sendRedirect("fhome.jsp");
}
catch (SQLException ex) {
response.sendRedirect("fhome.jsp");
request.getSession().setAttribute("msg", ex.getMessage().toString());
Logger.getLogger(Upload.class.getName()).log(Level.SEVERE,"exception occurred", ex);
}
catch (ClassNotFoundException ex) {
Logger.getLogger(Upload.class.getName()).log(Level.SEVERE, null, ex);
}
catch (FileNotFoundException fne) {
request.getSession().setAttribute("msg", "You did not specify a file to upload.");
response.sendRedirect("fhome.jsp");
LOGGER.log(Level.SEVERE, "Problems during file upload. Error: {0}",
new Object[]{fne.getMessage()});
}
finally {
if (out != null) {
out.close();
}
if (filecontent != null) {
filecontent.close();
}
if (writer != null) {
writer.close();
}
}
}
private String getFileName(final Part part) {
final String partHeader = part.getHeader("content-disposition");
LOGGER.log(Level.INFO, "Part Header = {0}", partHeader);
for (String content : part.getHeader("content-disposition").split(";")) {
if (content.trim().startsWith("filename")) {
return content.substring(
content.indexOf('=') + 1).trim().replace("\"", "");
}
}
return null;
} // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
}
Lösung
Andere Tipps
This seems to me to be a very bad idea, because the method is not documented to accept a null
here in Java 6:
Logger.getLogger(Upload.class.getName()).log(Level.SEVERE, null, ex);
Replace it with something like
Logger.getLogger(Upload.class.getName()).log(Level.SEVERE, "exception occurred", ex);
and then check your log output - it should be logged.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow