Date m_date=new Date(); String now_time=m_date.toLocaleString(); long nowTime=m_date.getTime(); //获得用户登录时间 String nickName=(String)session.getValue("nickName"); out.print(nickName); String chatRoom=(String)session.getValue("chatRoom");
String sql="select logonTime from chatUser where nickName like '"+nickName+"'";
ResultSet rs_1=db.executeQuery(sql); rs_1.next();
//toLocateString 格式用于显示和保存到数据库 long logonTime=rs_1.getLong("logonTime"); m_date.setTime(logonTime); String logon_time=m_date.toLocaleString(); rs_1.close(); //组合查询 //int i=0; sql="select * from chat where (secret=0 or chat_to='"+nickName+"' or chat_to='all' or chat_from='"+nickName+"') and (chatRoom='"+chatRoom+"') and (chat_time>#"+logon_time+"#) order by id asc"; ResultSet rs_2=db.executeQuery(sql.); if(rs_2.next()) { rs_2.afterLast();//这是每次我想显示10条记录 rs_2.previous(); int lab_last=rs_2.getRow(); if(lab_last>10) { rs_2.absolute(lab_last-10); } else { rs_2.beforeFirst();
org.apache.jasper.JasperException: Unable to compile class for JSPAn error occurred at line: -1 in the jsp file: nullGenerated servlet error: [javac] Since fork is true, ignoring compiler setting. [javac] Compiling 1 source file [javac] Since fork is true, ignoring compiler setting. [javac] C:\Tomcat 5.0\work\Standalone\localhost\regapp\chat\display_jsp.java:98: cannot resolve symbol [javac] symbol : method closeConn () [javac] location: class reg_one.db [javac] db.closeConn(); [javac] ^ [javac] C:\Tomcat 5.0\work\Standalone\localhost\regapp\chat\display_jsp.java:189: cannot resolve symbol [javac] symbol : method closeConn () [javac] location: class reg_one.db [javac] db.closeConn(); [javac] ^ [javac] C:\Tomcat 5.0\work\Standalone\localhost\regapp\chat\display_jsp.java:198: cannot resolve symbol [javac] symbol : method closeConn () [javac] location: class reg_one.db [javac] db.closeConn(); [javac] ^ [javac] C:\Tomcat 5.0\work\Standalone\localhost\regapp\chat\display_jsp.java:227: cannot resolve symbol [javac] symbol : method closeConn () [javac] location: class reg_one.db [javac] db.closeConn(); [javac] ^ [javac] Note: C:\Tomcat 5.0\work\Standalone\localhost\regapp\chat\display_jsp.java uses or overrides a deprecated API. [javac] Note: Recompile with -deprecation for details. [javac] 4 errors这是为何???
org.apache.jasper.JasperException at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:370) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:293) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:240) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)root cause java.lang.NullPointerException at reg_one.db.closeStmt(db.java:102) at org.apache.jsp.display_jsp._jspService(display_jsp.java:222) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:136) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)什么原因.
display
</title>
<meta http-equiv="refresh" content="10">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312"></head>
<body bgcolor="#d6ebd6" onload="scroller()">
<%@page language="java" import="java.sql.*"%>
<%@page import="java.util.*"%>
<%@page import="java.util.Date"%>
<jsp:useBean id="db" scope="page" class="reg_one.db" />
<%
String nickname="";
String color=(String)session.getValue("color_write");
Date m_date=new Date();
String now_time=m_date.toLocaleString();
long nowTime=m_date.getTime();
//获得用户登录时间
String nickName=(String)session.getValue("nickName");
out.print(nickName);
String chatRoom=(String)session.getValue("chatRoom");
String sql="select logonTime from chatUser where nickName like '"+nickName+"'";
ResultSet rs_1=db.executeQuery(sql);
rs_1.next();
//toLocateString 格式用于显示和保存到数据库
long logonTime=rs_1.getLong("logonTime");
m_date.setTime(logonTime);
String logon_time=m_date.toLocaleString();
rs_1.close();
//组合查询
//int i=0;
sql="select * from chat where (secret=0 or chat_to='"+nickName+"' or chat_to='all' or chat_from='"+nickName+"') and (chatRoom='"+chatRoom+"') and (chat_time>#"+logon_time+"#) order by id asc";
ResultSet rs_2=db.executeQuery(sql.);
if(rs_2.next())
{
rs_2.afterLast();//这是每次我想显示10条记录
rs_2.previous();
int lab_last=rs_2.getRow();
if(lab_last>10)
{
rs_2.absolute(lab_last-10);
}
else
{
rs_2.beforeFirst();
}
%><% while(rs_2.next())
{
String chat_from=rs_2.getString("chat_from").trim();
String chat_to=rs_2.getString("chat_to").trim();
String chat_time=rs_2.getString("chat_time").trim().substring(11,19);
String action=rs_2.getString("action").trim();
String content=rs_2.getString("content").trim();
int secret=rs_2.getInt("secret"); %>
<input type="hidden" name="color" value=<%=color%>>
<tr>
<td><font color="#669966"><a href="send.jsp?name=<%=chat_from%>" target="mainFrame"><%out.print(chat_from);%></a> </font>
<font color="#FA85F4"> <%=action%></font> 对<font color="#ff0000"> <%
if(chat_to.compareTo("all")==0)
{
%>
<a href="send.jsp?name=all" target="mainFrame">大家</a>
<%
}
else{
%>
<a href="send.jsp?name=<%=chat_to%>" target="mainFrame"><%=chat_to%></a></font> <%
}
if(secret==1)
{
%>悄悄地
<%}%>
说:<font color=<%=color%>><%=content%></font>(<%=chat_time%>)
</td>
</tr><br> <%
}
rs_2.close();
%>
<%
}
else
rs_2.close();
%>
</table> </body>
</html>
<%
//刷新用户列表,首先获得在线的所有用户
sql="select nickName ,chatTime from userlist";
ResultSet rs_3=db.executeQuery(sql);
while(rs_3.next())
{
//获得这个用户最后的发言的时间和现在的时间
String checkUser=rs_3.getString("nickName").trim();
long checkTime=rs_3.getLong("chatTime");
//如果15分钟没有发言,则认为是发呆,从用户列表中汪除
if(nowTime-checkTime>15*60*1000)
{
sql="delete from userlist where nickName like '"+checkUser+"'";
db.executeDelete(sql);
//在聊天室中显示该用户的离开信息
sql="insert into chat (chatRoom,chat_from,chat_to,chat_time,action,content,secret)values('"+chatRoom+"','"+checkUser+"','all','"+now_time+"','*_*','886','0')";
db.executeInsert(sql); } }
// rs_3.close(); %>
大体看了一下,以上错误发生的可能是这样
不清楚你的reg_one.db这个类是怎么写的
如果别的页面也用reg_one.db来执行sql,如果共享一个connection
别的页面关闭了这个connection就会导致display.jsp中的结果集不可用。
删除...代码如下:
package reg_one;
import java.sql.*;
import java.sql.DriverManager;
public class db{
String sDBDriver="sun.jdbc.odbc.JdbcOdbcDriver";
String sConnStr="jdbc:odbc:jsp_db";
private Statement stmt=null;
private Connection conn=null;
ResultSet rs=null;
public db() {
try{
Class.forName(sDBDriver);
conn=DriverManager.getConnection(sConnStr);
Statement stmt=conn.createStatement( ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
}
catch(java.lang.ClassNotFoundException e)
{
System.err.println("db():"+e.getMessage());
}
catch(SQLException ex)
{
System.err.println("aq.executeQuery:"+ex.getMessage());
}
}
public ResultSet executeQuery(String sql){
try{
conn=DriverManager.getConnection(sConnStr);
stmt=conn.createStatement( ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
rs=stmt.executeQuery(sql);
}
catch(SQLException ex){
System.err.println("aq.executeQuery:"+ex.getMessage());
}
return rs;
} public void executeInsert(String sql){
try{
conn=DriverManager.getConnection(sConnStr);
Statement stmt=conn.createStatement( ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
stmt.executeUpdate(sql);
stmt.close();
conn.close();
}
catch(SQLException ex)
{
System.err.println("sql_data.executerInset:"+ex.getMessage());
}
finally
{
if(stmt!=null)
stmt=null;
if(conn!=null)
conn=null;
}
} public void executeUpate(String sql){
try{
conn=DriverManager.getConnection(sConnStr);
Statement stmt=conn.createStatement( ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
stmt.executeUpdate(sql);
stmt.close();
conn.close();
}
catch(SQLException ex)
{
System.err.println("sql_data.executerUpdate:"+ex.getMessage());
}
finally
{
if(stmt!=null)
stmt=null;
if(conn!=null)
conn=null;
}
} public void executeDelete(String sql){
try{
conn=DriverManager.getConnection(sConnStr);
Statement stmt=conn.createStatement( ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
stmt.executeUpdate(sql);
stmt.close();
conn.close();
}
catch(SQLException ex)
{
System.err.println("sql_data.executerDelete:"+ex.getMessage());
}
finally
{
if(stmt!=null)
stmt=null;
if(conn!=null)
conn=null;
}
}
public void closeStmt(){
try{
stmt.close();
}
catch (SQLException e){
e.printStackTrace();
}
}
public void colseConn(){
try{
conn.close();
}
catch (SQLException e){
e.printStackTrace();
}
}
} 这回整理了一下.谢谢你.
或者用别人的成熟的产品,比如连接池,比较稳定的如:JPool如果要在现在的基础上解决的话。应该是在调用结果集关闭的地方,就应该关闭这个连接
colseConn()这个方法。如果别的jsp也会调用这个连接类的话。我也预测不到会发生什么
事情了,逻辑比较混乱。colseConn()方法只是保证得到连接,关闭连接,跟结果集关闭保持
一致性,我想应该可以。
你先在调用结果集close的地方,就调用db的colseConn()方法试试
[javac] Since fork is true, ignoring compiler setting.
[javac] Compiling 1 source file
[javac] Since fork is true, ignoring compiler setting.
[javac] C:\Tomcat 5.0\work\Standalone\localhost\regapp\chat\display_jsp.java:98: cannot resolve symbol
[javac] symbol : method closeConn ()
[javac] location: class reg_one.db
[javac] db.closeConn();
[javac] ^
[javac] C:\Tomcat 5.0\work\Standalone\localhost\regapp\chat\display_jsp.java:189: cannot resolve symbol
[javac] symbol : method closeConn ()
[javac] location: class reg_one.db
[javac] db.closeConn();
[javac] ^
[javac] C:\Tomcat 5.0\work\Standalone\localhost\regapp\chat\display_jsp.java:198: cannot resolve symbol
[javac] symbol : method closeConn ()
[javac] location: class reg_one.db
[javac] db.closeConn();
[javac] ^
[javac] C:\Tomcat 5.0\work\Standalone\localhost\regapp\chat\display_jsp.java:227: cannot resolve symbol
[javac] symbol : method closeConn ()
[javac] location: class reg_one.db
[javac] db.closeConn();
[javac] ^
[javac] Note: C:\Tomcat 5.0\work\Standalone\localhost\regapp\chat\display_jsp.java uses or overrides a deprecated API.
[javac] Note: Recompile with -deprecation for details.
[javac] 4 errors这是为何???
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:370)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:293)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:240)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)root cause java.lang.NullPointerException
at reg_one.db.closeStmt(db.java:102)
at org.apache.jsp.display_jsp._jspService(display_jsp.java:222)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:136)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)什么原因.
NullPoint错误