Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.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 稍后访问时,servlet页面显示为空_Java_Mysql_Servlets_Jdbc_Tomcat7 - Fatal编程技术网

Java 稍后访问时,servlet页面显示为空

Java 稍后访问时,servlet页面显示为空,java,mysql,servlets,jdbc,tomcat7,Java,Mysql,Servlets,Jdbc,Tomcat7,我对servlet页面有一个奇怪的问题。我有一个简单的web应用程序,它只包含一个servlet。我在Tomcat7中部署了它。当用户输入url时,servlet应该直接执行,从数据库获取数据并打印输出。但过了一段时间,它会显示空白页。当我取消部署和部署时,它会显示数据。一段时间后,当我访问页面时,它显示空白页面。当我重新部署时,它再次显示数据。有人能告诉我如何解决这个问题吗?我不知道为什么会这样。下面是我的代码 我正在使用mysql数据库。mysql-connector-java-5.1.29

我对servlet页面有一个奇怪的问题。我有一个简单的web应用程序,它只包含一个servlet。我在
Tomcat7
中部署了它。当用户输入url时,servlet应该直接执行,从数据库获取数据并打印输出。但过了一段时间,它会显示空白页。当我取消部署和部署时,它会显示数据。一段时间后,当我访问页面时,它显示空白页面。当我重新部署时,它再次显示数据。有人能告诉我如何解决这个问题吗?我不知道为什么会这样。下面是我的代码

我正在使用
mysql
数据库。
mysql-connector-java-5.1.29-bin.jar
添加到lib文件夹并添加到buildpath

public class Homeservlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    static final String mysqldblink = "************";
    static final String mysqlUsername = "username";
    static final String mysqlPassword = "pw";

    Connection connection =null;
    Statement stmt = null;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public Homeservlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    public void init(ServletConfig config) throws ServletException 
    {
    super.init(config);

    try{

        Class.forName("com.mysql.jdbc.Driver");
        connection = DriverManager.getConnection(mysqldblink,
                mysqlUsername, mysqlPassword);

        stmt = connection.createStatement();

    }
    catch(Exception E)
    {
        E.printStackTrace();
    }

    }

    @Override
    public void service(ServletRequest request, ServletResponse response)
    {
        PrintWriter pw = null;

        try {
            String query = "querytogetdata";
            pw = response.getWriter();

            ResultSet rs = stmt.executeQuery(query);

            while(rs.next())
            {
                pw.println(rs.getString(1));
            }

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }catch(Exception e)
        {
            e.printStackTrace();
        }finally{
            try{    
                pw.close();

            }catch(Exception e)
            {
                e.printStackTrace();
            }
        }   

    }

    @Override
    public void destroy(  ) {
        // Close the connection
          try {  

              if (connection != null)
                  connection.close(  );

              if(stmt != null)
                 stmt.close();

          } catch (SQLException ignore) { }
      }     

}

为什么结果集没有关闭?您使用的是相同的连接和语句。如果您通过在浏览器窗口中输入URL直接命中此servlet,则它是一个GET请求,或者如果您是从任何具有方法属性为post的表单提交中调用它,则它是一个post请求,并基于请求调用servlet方法。它可能会帮助你,@Braj谢谢,我把service()代码移到了doGet()。它现在能用,但我不知道以后能不能用。我现在如何改进数据库连接?听起来不错,我已经和你分享了一个链接。使用连接池和准备好的语句而不是语句。不用担心,慢慢来,只需在谷歌上阅读更多内容。不要简单地复制粘贴,先尝试学习它。