JSP中 那个if语句为什么会有异常

时间:2022-11-03 14:31:57
判断类型的那个if语句,总会有异常,我其它页面也是那样写的,没问题, 想不明白!


<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'showStudent.jsp' starting page</title>
    
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">    
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->

  </head>
  
  <body> 
<h3 align="center">开题报告查询</h3>
<div align="center">
<form action="" method="post" name="delform" onsubmit="return check()">
<table width="360" cellspacing="2" align="center">
<tr>
<td width="50%" align="right">请选择查询方式:</td>
<td width="50" align="left">
<select name="mode">
<option value="01">按开题报告编号</option>
<option value="02">按学生编号</option>
<option value="03">按导师编号</option>
</select>
</td>
</tr>
<tr>
<td width="50%" align="right">请输入查询编号:</td>
<td width="50" align="left"><input type="text" name="number" maxlength="30"></td>
</tr>
<tr>
<td width="50%" align="right"><input type="submit" name="submit" value="提交"></td>
<td width="50" align="left"><input type="reset" name="reset"  value="重置">
</tr>
</table>
</form>
</div>
<%
String q_mode=request.getParameter("mode");
String  num=request.getParameter("number");
 %>
 <p>q_mode=<%=q_mode %>
 <p>num=<%=num %>
    <% Connection  con=null;
Statement  sql;
ResultSet  rs=null;
String  str;

try{
      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
  con=DriverManager.getConnection("jdbc:odbc:test","sa","123123"); 
}catch(Exception e){
e.printStackTrace();

sql=con.createStatement();

out.print("<p>开题报告基本信息显示");
out.print("<table border>");
out.print("<tr>");
out.print("<th width=100>"+"编号");
out.print("<th width=100>"+"名称");
out.print("<th width=100>"+"导师姓名");
out.print("<th width=100>"+"开题人");
out.print("<th width=100>"+"类型");
out.print("<th width=100>"+"状态");
out.print("<th width=100>"+"开始时间");
out.print("<th width=100>"+"最迟时间");
out.print("<th width=100>"+"其它");
out.print("</tr>");
///////////////////////////////////////////////这个if语句会抛出异常
if(q_mode.equals("01"))
{
response.sendRedirect("showReport.jsp");
}

str="select * from t_report";
rs=sql.executeQuery(str);

while(rs.next())
{
out.print("<tr>");
out.print("<td>"+rs.getString(1)+"</td>");
out.print("<td>"+rs.getString(2)+"</td>");
out.print("<td>"+rs.getString(4)+"</td>");
out.print("<td>"+rs.getString(6)+"</td>");
out.print("<td>"+rs.getString(7)+"</td>");
out.print("<td>"+rs.getString(8)+"</td>");
out.print("<td>"+rs.getString(9)+"</td>");
out.print("<td>"+rs.getString(10)+"</td>");
out.print("<td>"+rs.getString(11)+"</td>");
out.print("</tr>");
}
con.close();
%>
<p>成功获取
  </body>
</html>


异常:
2009-6-1 10:08:54 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet jsp threw exception
java.lang.NullPointerException
at org.apache.jsp.showReport_jsp._jspService(showReport_jsp.java:149)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)


org.apache.jasper.JasperException: An exception occurred processing JSP page /showReport.jsp at line 85

82:  out.print("<th width=100>"+"鍏跺畠");
83:  out.print("</tr>");
84: 
85:  if(q_mode.equals("01"))
86:  {
87:  response.sendRedirect("showReport.jsp");
88:                  }

12 个解决方案

#1


q_mode在做epuals判断前要加一个if(q_mode != null)的判断!

#2


 if("01" .equals(q_mode))

#3


其实这就是逻辑错误,如果q_mode为空的时候它就不会有equals方法,所以应该像2楼那样写(最简单,简洁)
当然也可以像1楼那样判断,通常我们都用2楼的。

#4


该回复于2009-06-01 14:26:28被版主删除

#5


强大

#6


q_mode 保存的数据,用之前你得判断一些是否为空啊,
一楼的做法正确。

#7


q_mode.equals("01")
这里有问题,如果q_mode为null,那么执行equals当然会报空指针
改成"01".equal(q_mode)就好了

#8


上面说的都对

#9


if("01" .equals(q_mode)) 同意楼上

#10


#11


引用 2 楼 wanghao1987 的回复:
if("01" .equals(q_mode))

up

#12


顶下!
要先判断是否为空,
要不然很容易报空指针异常的!

#1


q_mode在做epuals判断前要加一个if(q_mode != null)的判断!

#2


 if("01" .equals(q_mode))

#3


其实这就是逻辑错误,如果q_mode为空的时候它就不会有equals方法,所以应该像2楼那样写(最简单,简洁)
当然也可以像1楼那样判断,通常我们都用2楼的。

#4


该回复于2009-06-01 14:26:28被版主删除

#5


强大

#6


q_mode 保存的数据,用之前你得判断一些是否为空啊,
一楼的做法正确。

#7


q_mode.equals("01")
这里有问题,如果q_mode为null,那么执行equals当然会报空指针
改成"01".equal(q_mode)就好了

#8


上面说的都对

#9


if("01" .equals(q_mode)) 同意楼上

#10


#11


引用 2 楼 wanghao1987 的回复:
if("01" .equals(q_mode))

up

#12


顶下!
要先判断是否为空,
要不然很容易报空指针异常的!