Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Tomcat和Servlet问题_Java_Sql_Ajax_Jsp_Tomcat - Fatal编程技术网

Java Tomcat和Servlet问题

Java Tomcat和Servlet问题,java,sql,ajax,jsp,tomcat,Java,Sql,Ajax,Jsp,Tomcat,我的网络应用遇到问题,在网上找不到任何答案 我有一个Java网站 与并行工作的应用程序 使用mod_jk的tomcat和apache 一切正常,但一次之后 在tomcat跑步的那一天,我的 正在执行ajax请求的主servlet停止工作。所有的 其他人工作得很好。我的意思是,我正在其他servlet上执行ajax请求,它们工作得很好 最重要的是它对一个 一天,然后停止下一个(i 必须重新加载我的Web应用程序才能 它又起作用了) 我真的没有任何线索或想法 从哪里开始调查 这个问题 你们这些温文尔

我的网络应用遇到问题,在网上找不到任何答案

我有一个Java网站 与并行工作的应用程序 使用mod_jk的tomcat和apache

一切正常,但一次之后 在tomcat跑步的那一天,我的 正在执行ajax请求的主servlet停止工作。所有的 其他人工作得很好。我的意思是,我正在其他servlet上执行ajax请求,它们工作得很好

最重要的是它对一个 一天,然后停止下一个(i 必须重新加载我的Web应用程序才能 它又起作用了)

我真的没有任何线索或想法 从哪里开始调查 这个问题

你们这些温文尔雅的开发人员能给我一两个提示吗?:)

  • 您可以查看服务器日志
  • 您可以使用类似浏览器的插件来检查ajax请求的状态(与此相关的任何http请求)
  • 如果您使用的是IDE,请在调试模式下启动服务器,调试servlet并从那里开始进行故障排除
      • 您可以查看服务器日志
      • 您可以使用类似浏览器的插件来检查ajax请求的状态(与此相关的任何http请求)
      • 如果您使用的是IDE,请在调试模式下启动服务器,调试servlet并从那里开始进行故障排除

      由于您也标记了SQL,我强烈怀疑您的Web应用程序正在泄漏SQL连接。也就是说,你的webapp正在建立连接,并一直保持打开状态,但从未关闭。由于连接打开的时间过长,DB将强制超时,并在一段时间后关闭连接。例如,MySQL将在8小时后完成此操作。重新加载webapp将导致获取并保持新连接。但这并不能解决实际问题

      这个问题在webapp新手(以及数据库新手)中非常常见

      您需要做的就是重写JDBC代码,以便它在尽可能短的范围内正确地获取并关闭
      连接
      (和
      语句
      结果集
      )。您还需要使用
      finally
      块来确保在抛出异常的情况下关闭。以下是一个启动示例:

      public List<Entity> list() throws SQLException {
          // Declare resources before try.
          Connection connection = null;
          Statement statement = null;
          ResultSet resultSet = null;
          List<Entity> entities = new ArrayList<Data>();
      
          try {
              // Acquire resources and query DB in try.
              connection = database.getConnection();
              statement = connection.createStatement("SELECT id, name, value FROM entity");
              resultSet = statement.executeQuery();
              while (resultSet.next()) {
                  Entity entity = new Entity(); 
                  entity.setId(resultSet.getLong("id"));
                  entity.setName(resultSet.getString("name"));
                  entity.setValue(resultSet.getInteger("value"));
                  entities.add(entity);
              }
          } finally {
              // Close resources in reversed order in finally.
              if (resultSet != null) try { resultSet.close(); } catch (SQLException logOrIgnore) {}
              if (statement != null) try { statement.close(); } catch (SQLException logOrIgnore) {}
              if (connection != null) try { connection.close(); } catch (SQLException logOrIgnore) {}
          }
      
          // Return result.
          return entities;
      }
      
      public List()引发SQLException{
      //在尝试之前声明资源。
      连接=空;
      Statement=null;
      ResultSet ResultSet=null;
      列表实体=新的ArrayList();
      试一试{
      //在try中获取资源并查询数据库。
      connection=database.getConnection();
      语句=connection.createStatement(“从实体中选择id、名称、值”);
      resultSet=statement.executeQuery();
      while(resultSet.next()){
      实体=新实体();
      entity.setId(resultSet.getLong(“id”);
      entity.setName(resultSet.getString(“name”);
      entity.setValue(resultSet.getInteger(“value”);
      实体。添加(实体);
      }
      }最后{
      //最后按相反顺序关闭资源。
      如果(resultSet!=null),请尝试{resultSet.close();}catch(SQLException logOrIgnore){}
      如果(statement!=null),请尝试{statement.close();}catch(SQLException logOrIgnore){}
      如果(connection!=null),请尝试{connection.close();}catch(SQLException logOrIgnore){}
      }
      //返回结果。
      返回实体;
      }
      

      如果你想提高连接性能,那么你应该考虑使用A,而不是一直保持连接打开。 另见:


      由于您也标记了SQL,我强烈怀疑您的Web应用程序正在泄漏SQL连接。也就是说,你的webapp正在建立连接,并一直保持打开状态,但从未关闭。由于连接打开的时间过长,DB将强制超时,并在一段时间后关闭连接。例如,MySQL将在8小时后完成此操作。重新加载webapp将导致获取并保持新连接。但这并不能解决实际问题

      这个问题在webapp新手(以及数据库新手)中非常常见

      您需要做的就是重写JDBC代码,以便它在尽可能短的范围内正确地获取并关闭
      连接
      (和
      语句
      结果集
      )。您还需要使用
      finally
      块来确保在抛出异常的情况下关闭。以下是一个启动示例:

      public List<Entity> list() throws SQLException {
          // Declare resources before try.
          Connection connection = null;
          Statement statement = null;
          ResultSet resultSet = null;
          List<Entity> entities = new ArrayList<Data>();
      
          try {
              // Acquire resources and query DB in try.
              connection = database.getConnection();
              statement = connection.createStatement("SELECT id, name, value FROM entity");
              resultSet = statement.executeQuery();
              while (resultSet.next()) {
                  Entity entity = new Entity(); 
                  entity.setId(resultSet.getLong("id"));
                  entity.setName(resultSet.getString("name"));
                  entity.setValue(resultSet.getInteger("value"));
                  entities.add(entity);
              }
          } finally {
              // Close resources in reversed order in finally.
              if (resultSet != null) try { resultSet.close(); } catch (SQLException logOrIgnore) {}
              if (statement != null) try { statement.close(); } catch (SQLException logOrIgnore) {}
              if (connection != null) try { connection.close(); } catch (SQLException logOrIgnore) {}
          }
      
          // Return result.
          return entities;
      }
      
      public List()引发SQLException{
      //在尝试之前声明资源。
      连接=空;
      Statement=null;
      ResultSet ResultSet=null;
      列表实体=新的ArrayList();
      试一试{
      //在try中获取资源并查询数据库。
      connection=database.getConnection();
      语句=connection.createStatement(“从实体中选择id、名称、值”);
      resultSet=statement.executeQuery();
      while(resultSet.next()){
      实体=新实体();
      entity.setId(resultSet.getLong(“id”);
      entity.setName(resultSet.getString(“name”);
      entity.setValue(resultSet.getInteger(“value”);
      实体。添加(实体);
      }
      }最后{
      //最后按相反顺序关闭资源。
      如果(resultSet!=null),请尝试{resultSet.close();}catch(SQLException logOrIgnore){}
      如果(statement!=null),请尝试{statement.close();}catch(SQLException logOrIgnore){}
      如果(connection!=null),请尝试{connection.close();}catch(SQLException logOrIgnore){}
      }
      //返回结果。
      返回实体;
      }
      

      如果你想提高连接性能,那么你应该考虑使用A,而不是一直保持连接打开。 另见:


      首先在$CATALINA_HOME/logs/中查找日志文件,并在其中查找感兴趣的内容