Servlets servlet必须每天重新加载

Servlets servlet必须每天重新加载,servlets,tomcat6,Servlets,Tomcat6,我创建了一个servlet来访问数据库并对BB应用程序做出响应…它在开发期间运行良好…但是在将它加载到tomcat服务器6.0上之后,在上线后,servlet必须每天早上在tomcat服务器上重新加载…之后,它一整天都工作正常…但是第二天早上当我请求时它给出一个空白页面作为响应,我的服务器管理员告诉servlet必须重新加载。。。 服务器上托管的其他应用程序工作正常,无需重新启动 有什么问题吗 添加代码..如果有帮助 package com.ams.servlets; impor

我创建了一个servlet来访问数据库并对BB应用程序做出响应…它在开发期间运行良好…但是在将它加载到tomcat服务器6.0上之后,在上线后,servlet必须每天早上在tomcat服务器上重新加载…之后,它一整天都工作正常…但是第二天早上当我请求时它给出一个空白页面作为响应,我的服务器管理员告诉servlet必须重新加载。。。 服务器上托管的其他应用程序工作正常,无需重新启动

有什么问题吗

添加代码..如果有帮助

    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团队