Servlets servlet必须每天重新加载
我创建了一个servlet来访问数据库并对BB应用程序做出响应…它在开发期间运行良好…但是在将它加载到tomcat服务器6.0上之后,在上线后,servlet必须每天早上在tomcat服务器上重新加载…之后,它一整天都工作正常…但是第二天早上当我请求时它给出一个空白页面作为响应,我的服务器管理员告诉servlet必须重新加载。。。 服务器上托管的其他应用程序工作正常,无需重新启动 有什么问题吗 添加代码..如果有帮助Servlets servlet必须每天重新加载,servlets,tomcat6,Servlets,Tomcat6,我创建了一个servlet来访问数据库并对BB应用程序做出响应…它在开发期间运行良好…但是在将它加载到tomcat服务器6.0上之后,在上线后,servlet必须每天早上在tomcat服务器上重新加载…之后,它一整天都工作正常…但是第二天早上当我请求时它给出一个空白页面作为响应,我的服务器管理员告诉servlet必须重新加载。。。 服务器上托管的其他应用程序工作正常,无需重新启动 有什么问题吗 添加代码..如果有帮助 package com.ams.servlets; impor
package com.ams.servlets;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.sql.*;
import com.cms.dbaccess.DataAccess;
import com.cms.utils.ApplicationConstants;
import com.cms.utils.ApplicationHelper;
import java.sql.ResultSet;
public class BBRequestProcessorServlet extends HttpServlet {
/**
*
*/String userString;
private static final long serialVersionUID = 1L;
String jsonString = "";
ResultSet rs = null;
Connection connection = null;
Statement statement=null;
public enum db_name
{
//Test
resource_management_db,osms_inventory_db;
}
public void init(ServletConfig config)throws ServletException
{
super.init(config);
System.out.println("Inside init");
}
public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException
{
try{
connection = DataAccess.connectToDatabase("xxx", connection);
statement = DataAccess.createStatement(connection);
statement = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
rs = statement.executeQuery("query is here");
}
catch(SQLException e)
{
e.printStackTrace();
}
String db =request.getParameter("db");
System.out.println("DATABASE NAME :"+ db);
if(db.equalsIgnoreCase("xxx")){
//Call to populate JSONArray with the fetch ResultSet data
jsonString = ApplicationHelper.populateJSONArray(rs);
}
response.setContentType(ApplicationConstants.JSON_CONTENT_TYPE);
PrintWriter out = response.getWriter();
out.print(jsonString);
out.flush();
out.close();
System.out.println("json object sent");
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
我能找到的唯一错误是
2012年7月20日上午9:57:24 org.apache.catalina.loader.WebappClassLoader validateJarFile
信息:validateJarFile(/usr/local/tomcat/apache-tomcat-6.0.20/webapps/MobileServlet/WEB-INF/lib/servlet-api.jar)-未加载jar。参见Servlet规范2.3,第9.7.2节。有问题的类:javax/servlet/servlet.class我猜,在看到您的日志后会更清楚
似乎您已经将servlet-api.jar放在了WEB-INF库中,但它已经放在了tomcat库中。罪魁祸首很可能是您处理外部数据库资源(如
连接)的方式。如果一直保持DB连接打开而不关闭,则可能会发生此问题。当DB连接打开的时间过长时,DB将超时并回收连接。这很可能是一夜之间发生的事情
您应该以这种方式重新设计DataAccess
和BBRequestProcessorServlet
,以便无处可去保持连接
,语句
和结果集
作为实例变量,或者更糟糕的是,作为类的静态
变量。连接
应该在执行SQL查询的同一范围内创建,并且应该在创建它的同一个try
块的finally
块中关闭
顺便说一句,您的jsonString
绝对不应该被声明为servlet的实例变量,这种方式不是线程安全的
另见:
至于您在日志中看到的错误,您肯定应该删除有问题的JAR。另请参见日志中要查看的内容…任何特定的内容都没有。我们只能猜测你为什么会看到空白页。我的猜测是,一些连接在夜间被关闭,这会导致一个异常,可以在日志中跟踪到该异常。但是,您也可能在代码中吞并了异常,这可能会导致一个空白页。尝试在早上使用调试器一步一步地检查代码,以了解发生了什么。好的..会看的。感谢提示回复Tanks做了这两个更改…现在工作正常…今天不需要重新加载…我的错误我做了一些更改…并导入了..创建了一个新的动态web项目…谢谢..@Waviz团队