我正在使用 Servlet 和 JSP 执行以下逻辑 但是,如果我传递带有值的订单,并取消注释 Servlet 中的行,它就可以工作,但如果订单为空,则不会发生任何事情,并且异常会生成“空”消息,尽管很简单。 像下面这样的代码正在工作,但是如果我取消注释这些行,如果 order 为空,它就会停止。希望我在这里说清楚了,如果没有,请告诉我。
<td class="headerindex"><a href="ListCode?order=code_ready_date">Code ready date:</a></td>
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Connection connection = DbUtil.getConnection();
try {
Statement statement = connection.createStatement();
String query = "";
String order = "";
order = request.getParameter("order");
System.out.println("Order is: "+order);
//if (order.equals("code_ready_date")) {
//query = "SELECT * FROM codes WHERE prod_deploy_state IN ('LIVE')";
//}
//else if (order != null) {
//query = "SELECT * FROM codes WHERE prod_deploy_state IN ('LIVE','Dormant','...')";
//}
query = "SELECT * FROM codes WHERE prod_deploy_state IN ('LIVE','Dormant','...')";
System.out.println("Query is: "+query);
ResultSet rs = statement.executeQuery(query);
List<Code> codes = new ArrayList<Code>();
while (rs.next()) {
Code code = new Code();
code.setEpic_project(rs.getString("epic_project"));
code.setReleases(rs.getString("releases"));
code.setJira_tickets(rs.getString("jira_tickets"));
code.setApplications(rs.getString("applications"));
code.setComponents(rs.getString("components"));
code.setCode_ready_date(rs.getString("code_ready_date"));
code.setRtb_code_deploy(rs.getString("rtb_code_deploy"));
code.setOrt_code_deploy(rs.getString("ort_code_deploy"));
code.setProd_code_deploy(rs.getString("prod_code_deploy"));
code.setProd_deploy_state(rs.getString("prod_deploy_state"));
code.setProd_launch_date(rs.getString("prod_launch_date"));
code.setDependencies(rs.getString("dependencies"));
code.setId(rs.getString("id"));
codes.add(code);
}
request.setAttribute("code", codes);
RequestDispatcher disp = request.getRequestDispatcher("ListCodes.jsp");
disp.forward(request, response);
rs.close();
statement.close();
} catch (Exception e) {
System.out.println("Exception is: " + e.getMessage());
}
}
最佳答案
当您尝试对空引用调用 equals 方法时,会出现空指针异常。当引用为 null 时,就没有对象可以调用 equals 方法。所以你需要先检查是否为空。请尝试以下操作:
if (order == null) {
query = "SELECT * FROM codes WHERE prod_deploy_state IN ('LIVE','Dormant','...')";
}else if (order.equals("code_ready_date")) {
query = "SELECT * FROM codes WHERE prod_deploy_state IN ('LIVE')";
} else {
query = "SELECT * FROM codes WHERE prod_deploy_state IN ('LIVE','Dormant','...')";
}
关于java - 如果字符串为空,则 Servlet doGet 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29616186/