谁能告诉我为什么报错?如何改?
代码为:
<%@ page contentType="text/html;charset=ISO8859_1"%>
<%@ page language="java"%>
<%@ page import="java.sql.*"%>
<%@ page import="java.io.*"%>
<%@ page import="java.util.*"%>
<%@ page import="javax.servlet.*"%>
<%@ page import="javax.servlet.http.*"%>
<jsp:useBean id="workM" scope="page" class="online.onlineconn1" />
<jsp:useBean id="workc" scope="page" class="online.ISOtoGb2312" />
<%
try{
ResultSet rs1= workM.executeQuery("select * from student where id=21");
String stusub1="";
String stusub2="";
stusub1=rs1.getString("sub1");
stusub2=rs1.getString("sub2");
rs1.close();
}
catch(Exception ex){
out.print(ex.getMessage());
}
finally{
workM.disconnectToDB();
}
%>
<html>
<head>
......
<tr>
<td width="35%" height="40" class="word"> 1.您注册的科目一为:</td>
<td width="65%" class="word"><a href="#" class="word"><%=stusub1%></a></td>
</tr>
<tr>
<td width="35%" height="40" class="word"> 2.您注册的科目二为:</td>
<td width="65%" class="word"><a href="#" class="word"><%=stusub2%></a></td>
</tr>
......
</body>
</html>
报错为:
Generated servlet error:
[javac] Since fork is true, ignoring compiler setting.
[javac] Compiling 1 source file
[javac] Since fork is true, ignoring compiler setting.
[javac] D:\Tomcat 4\work\Standalone\localhost\test\online\stuselect_jsp.java:206: cannot resolve symbol
[javac] symbol : variable stusub1
[javac] location: class org.apache.jsp.stuselect_jsp
[javac] out.print(stusub1);
[javac] ^
[javac] D:\Tomcat 4\work\Standalone\localhost\test\online\stuselect_jsp.java:215: cannot resolve symbol
[javac] symbol : variable stusub2
[javac] location: class org.apache.jsp.stuselect_jsp
[javac] out.print(stusub2);
[javac] ^
[javac] 2 errors
String stusub1="";
String stusub2="";
定义放到try外面去
放在try里面,如果在定义前出现异常,后面的定义将不会执行。
而你的输出而不是try里面的,所以定义要放在try外面。
相同情况的if也是一样的。
<%@ page contentType="text/html;charset=ISO8859_1"%>
<%@ page language="java"%>
<%@ page import="java.sql.*"%>
<%@ page import="java.io.*"%>
<%@ page import="java.util.*"%>
<%@ page import="javax.servlet.*"%>
<%@ page import="javax.servlet.http.*"%>
<jsp:useBean id="workM" scope="page" class="online.onlineconn1" />
<jsp:useBean id="workc" scope="page" class="online.ISOtoGb2312" />
<%
String stusub1 = "";
String stusub2 = "";
ResultSet rs1 = null;
try{
rs1 = workM.executeQuery("select * from student where id=21");
stusub1 = rs1.getString("sub1");
stusub2 = rs1.getString("sub2");
rs1.close();
}
catch(Exception ex){
out.print(ex.getMessage());
}
finally{
workM.disconnectToDB();
}
%>
<html>
<head>
......
<tr>
<td width="35%" height="40" class="word"> 1.您注册的科目一为:</td>
<td width="65%" class="word"><a href="#" class="word"><%=stusub1%></a></td>
</tr>
<tr>
<td width="35%" height="40" class="word"> 2.您注册的科目二为:</td>
<td width="65%" class="word"><a href="#" class="word"><%=stusub2%></a></td>
</tr>
......
</body>
</html>
是不是没有定义out的原因啊?
将out.print改成System.out.print看看。。
<%
String stusub1 = "";
String stusub2 = "";
ResultSet rs1 = null;
rs1= workM.executeQuery("select * from student where id=21");
while(rs1.next())//加上这句
{
stusub1=rs1.getString("sub1");
stusub2=rs1.getString("sub2");
}
rs1.close();
workM.disconnectToDB();
%>
<%String ss;
...
%>
在编译时放在_jspService方法中,所以在这一段代码中的ss只是一个局部变量,所以在后面引用时会报错。
声明一个以后可能会用到的变量,应该这样:
<%! String ss;
...
%>
这样的ss放在编译好的Servlet类里面,也就是说是一个实例变量,可以在以后的代码中访问。
1、rs1与class onlineconn1中的rs公用一个内存堆,所以,只需要rs1 = null,并且workM.disconnectToDB()就可以了;
2、如果要在finally 中进行rs1.close()动作,需要进行SQLException异常捕获。
简单更改:
finally {
try {
if (rs1 != null) rs1.close();
workM.disconnectToDB();
} catch (SQLException sqle) {}
}