Servlet拒绝我的iD(无法将String转换为INT,但它是一个INT)工作,它是来自http://puu.sh/cGvGN/6d29084aec.png的int(这些对学校来说是假的)
我怎样才能让它发挥作用?我以为我做得对,但Servlet停止工作
所发生的情况是该页面没有加载到ViewStudentSchedule页面,因为id INT不起作用。 (它给我一个空白页)
问题:
提前致谢。
这是Servlet
@WebServlet(urlPatterns = {"/StudentLoginServlet"})
public class StudentLoginServlet extends HttpServlet {
/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code>
* methods.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
try (PrintWriter out = response.getWriter()) {
/* TODO output your page here. You may use following sample code. */
int iD = Integer.parseInt("iD");
iD = request.getParameter("iD");
System.out.println(iD);
String pw = request.getParameter("pw");
System.out.println(pw);
Student s1=new Student();
s1.findDB(iD);
String fn=s1.getFirstName();
System.out.println(fn);
String ln=s1.getLastName();
System.out.println(ln);
String pwdb=s1.getPassword();
System.out.println(pwdb);
RequestDispatcher rd;
HttpSession ses1=request.getSession();
ses1.setAttribute("s1", s1);
if (pw.equals(pwdb)){
rd= request.getRequestDispatcher("/ViewStudentSchedule.jsp");
rd.forward(request,response);
System.out.println("works");
}
else{
rd= request.getRequestDispatcher("/LoginError.jsp");
rd.forward(request,response);
System.out.println("no works");
}
}
}
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP <code>GET</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Handles the HTTP <code>POST</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Returns a short description of the servlet.
*
* @return a String containing servlet description
*/
@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
}
这是业务对象
public class Student implements Serializable {
private int iD;
private String password;
private String firstName;
private String lastName;
private String street;
private String city;
private String state;
private double zip;
private String eMail;
private double gpa;
private String message;
/**
* No arg constructor that sets the default value of all
* customer properties to an empty string value.
*/
public Student() {
this.iD = 0;
this.password = "";
this.firstName = "";
this.lastName = "";
this.street = "";
this.city = "";
this.state = "";
this.zip = 0;
this.eMail = "";
this.gpa = 0;
}
public void setID(int id) {
this.iD = iD;
}
public void setPassword(String password) {
this.password = password;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public void SetLastName(String lastName) {
this.lastName = lastName;
}
public void setStreet(String street) {
this.street = street;
}
public void setCity(String city) {
this.city = city;
}
public void setState(String state) {
this.state = state;
}
public void setZip(double zip) {
this.zip = zip;
}
public void setEMail (String email) {
this.eMail = email;
}
public void setGpa(double gpa) {
this.gpa = gpa;
}
public int getID() {
return iD;
}
public String getPassword() {
return password;
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
public String getStreet() {
return street;
}
public String getCity() {
return city;
}
public String getState() {
return state;
}
public double getZip() {
return zip;
}
public String getEMail() {
return eMail;
}
public double getGpa() {
return gpa;
}
public String getMessage() {
return this.message;
}
public boolean login(String password) throws SQLException {
boolean yes_no = false;
/* Verify password against database password for the userId */
if (password.equals(this.password)) {
this.message = "Thank you, you are logged in.";
yes_no = true;
} else {
this.message = "Sorry Your Login Information seems to be incorrect.";
yes_no = false;
}
/* Returns true or false based on the condition statement above */
return yes_no;
}
/**
* Establishes connection with the database containing the customer information
* @return Connection
*/
public Connection studentConnect() {
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
} catch (ClassNotFoundException e) {
System.out.println("Errors: " + e);
}
Connection connect = null;
try {
connect = DriverManager.getConnection("jdbc:odbc:RegisDB");
} catch (SQLException e) {
System.out.println("You have Errors: " + e);
}
return connect;
}
/**
* Takes the student Id and retrieves the information from the customers
* data table and stores it in the properties of the customer object.
* @param iD
* @throws SQLException
*/
public void findDB(int iD) {
Connection con = studentConnect();
Statement statement = null;
ResultSet result = null;
String sql = "Select * From Students Where iD = " + iD + ";";
try {
statement = con.createStatement();
result = statement.executeQuery(sql);
while (result.next()) {
this.iD = result.getInt("iD");
this.password = result.getString("password");
this.firstName = result.getString("firstName");
this.lastName = result.getString("lastName");
this.street = result.getString("street");
this.city = result.getString("city");
this.state = result.getString("state");
this.zip = result.getDouble("zip");
this.eMail = result.getString("eMail");
this.gpa = result.getDouble("gpa");
}
con.close();
} catch (SQLException e) {
System.out.println("Errors: " + e);
}
}
/**
* Takes in the parameters of the customer database and inserts the parameters taken into
* the database for the addition of customers to the database.
* @param password
* @param firstName
* @param lastName
* @param street
* @param city
* @param state
* @param zip
* @param email
* @param gpa
* @throws SQLException
*/
public void insertDB(String password, String firstName, String lastName, String street, String city, String state, double zip, String email, double gpa) throws SQLException {
Connection con = studentConnect();
Statement statement;
ResultSet result;
int resultVal;
String sql = "INSERT INTO Students (password, firstName, lastName, street, city, state, zip, eMail, gpa) VALUES ('" + password + "','" + firstName + "','" + lastName + "','" + street + "','" + city +"','" + state +"','" + zip + "','" + eMail +"','" + gpa + "');";
try {
statement = con.createStatement();
resultVal = statement.executeUpdate(sql);
System.out.println(resultVal);
} catch (SQLException e) {
System.out.println("Error: " + e);
System.out.println(e.getStackTrace());
} finally {
con.close();
}
}
/**
* Takes in student id and locates the customer in the database, performs
* an sql update and deletes the customer from the database.
* @param iD
* @throws SQLException
*/
public void deleteDB(int iD) throws SQLException {
Connection con = studentConnect();
Statement statement;
int resultVal;
String sql = "DELETE FROM Students WHERE iD = " + iD + "';";
try {
statement = con.createStatement();
resultVal = statement.executeUpdate(sql);
System.out.println(resultVal);
} catch (SQLException e) {
System.out.println("Errors: " + e);
} finally {
con.close();
}
}
}
答案 0 :(得分:0)
看看这两行:
int iD = Integer.parseInt("iD");
iD = request.getParameter("iD");
Integer.parseInt(String s)
会尝试从传递给它的int
参数中解析String
个数字。例如,Integer.parseInt("34")
将返回int
个数字34
。在您的情况下,您将String
"iD"
传递给它,因为无法解析数字,因此会抛出NumberFormatException
。
如果上述代码可以继续,则下一行将尝试将类型为request.getParameter("iD")
的{{1}}的返回值赋给类型为{{1}的变量String
}}这也是不可能的,因为iD
会返回int
或request.getParameter()
。
尝试以下方法:
String
它的作用是获取请求参数null
的值,该参数的类型为int iD = Integer.parseInt(request.getParameter("iD"));
,并尝试在可能的情况下解析"iD"
。如果成功,结果将分配给String
。如果没有,则会抛出int
。
最好还检查iD
的结果:
NumberFormatException