java.lang.NumberFormatException:servlet中出现null错误



Index.jsp:

<form action="stu_app_serv" method="post">
<table class="table">                    
<%
try {
String sql = "SELECT * FROM students WHERE approved = ?";
Connection conn = DBConnect.connect();
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, 0);
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
%>                    
<tbody>
<tr>
<td><input disabled name="id" value="<%=rs.getInt("st_id")%>"></td>
<td><%=rs.getString("name")%></td>
<td><%=rs.getString("university")%></td>
<td><%=rs.getString("index_no")%></td>
<td><%=rs.getString("email")%></td>
<td>
<button class="btn btn-success" type="submit" name="approve">Approve </button>
<button class="btn btn-danger" type="submit" name="decline">Decline</button>
</td>
</tr>   
</tbody>                  
<%}
rs.close();
pstmt.close();
conn.close();
} catch (SQLException e) {
System.out.println("Error " + e.getMessage());
}
%>
</table>
</form>

Servlet文件是stu_app_serv.java:

String id = request.getParameter("id");
int x = Integer.parseInt(id);

st_id是学生id号。显示以下运行时错误:

java.lang.NumberFormatException:空

servlet行中的

int x=Integer.parseInt(id);

如何修复此错误?

您应该处理Null值并将其放入try-catch块中。有一件事是不要在表示层做业务逻辑。正如您在这里用jsp编写代码,而不是在服务类或servlet中编写代码。

String id = request.getParameter("id");
int x = 0;
if(id!=null){
try{
x = Integer.parseInt(id);
}catch(Exception e){
}
}

首先检查id是否为空,并且必须是有效的数字。您可以使用Regex来检查或捕获该异常。。

创建这个简单程序时:

public static void main(String[] args)
{  
String id  = null;  
int x = Integer.parseInt(id);
}

你可以看到你会得到一个NPE。

因此可以假设您发送的id为空。

最新更新