我已经创建了一个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 INFO: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
答案 0 :(得分:0)
我猜测,看到你的日志后会更清楚。
看起来你已经将你的servlet-api.jar放在了WEB-INF lib中,但它已经在tomcat的lib中了。
答案 1 :(得分:0)
罪魁祸首很可能是您处理外部数据库资源的方式,例如Connection
。当您保持数据库Connection
始终打开而不关闭它时,可能会发生此问题。当DB Connection
被打开太长时间时,DB将超时并回收它。这很可能是一夜之间发生的事情。
您应该以这种方式重新设计DataAccess
和BBRequestProcessorServlet
,以便无处保持Connection
,Statement
和{{1}作为实例变量,或者更糟的是,该类的ResultSet
变量。应该在与您执行SQL查询/查询的范围相同的范围内创建static
,并且应该在同一Connection
块的finally
块中关闭try
就像你创造它一样。
顺便说一下,你的jsonString
绝对不应该被声明为servlet的实例变量,它不是这样的线程安全。
至于您在日志中看到的错误,您一定要删除有问题的JAR。另请参阅How do I import the javax.servlet API in my Eclipse project?