Java 稍后访问时,servlet页面显示为空
我对servlet页面有一个奇怪的问题。我有一个简单的web应用程序,它只包含一个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
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()。它现在能用,但我不知道以后能不能用。我现在如何改进数据库连接?听起来不错,我已经和你分享了一个链接。使用连接池和准备好的语句而不是语句。不用担心,慢慢来,只需在谷歌上阅读更多内容。不要简单地复制粘贴,先尝试学习它。