【问题标题】:Java Servlet with MySQL带有 MySQL 的 Java Servlet
【发布时间】:2015-09-24 23:26:10
【问题描述】:

所以我有一个名为 javaschema 的 MySQL 模式和一个名为 filmtickets 的表。

我的 servlet 上有这段代码:

package thanos;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.naming.*;
import java.sql.*;
import javax.sql.*;
import javax.naming.InitialContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;

/**
 * Servlet implementation class MovieList
 */
@WebServlet("/MovieList")
public class MovieList extends HttpServlet {
    private static final long serialVersionUID = 1L;

private DataSource datasource = null;

public void init() throws ServletException{
    try {

         Context init = new InitialContext();
         Context env = (Context) init.lookup("java:/comp/env/");
         datasource = (DataSource) env.lookup("jdbc/LiveDataSource");


    } catch(Exception e) {
        throw new ServletException(e.toString());
    }

}

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

/**
 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
 */
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html; charset=UTF-8");
    response.setCharacterEncoding("UTF-8");
    request.setCharacterEncoding("UTF-8");
    PrintWriter out = response.getWriter();
    out.println("<html>");
    out.println("<head><title>Film List</title></head>");
    out.println("<body>");

    try {
        Connection con = datasource.getConnection();
        Statement stmt = con.createStatement();

        out.println("<table border=\"1\">");
        out.println("<tr>");
        out.println("<th>Movie Number</th>");
        out.println("<th>Hours</th>");
        out.println("<th>Title</th>");
        out.println("</tr>");


        ResultSet rs = stmt.executeQuery("SELECT * FROM filmtickets");
        while(rs.next()) {
            int id = rs.getInt("IdFilm");
            String time = rs.getString("FilmTime");
            String title = rs.getString("FilmTitle");
            String htmlRow = createHTMLRow(id, time, title);
            out.println(htmlRow);

        }
        rs.close();

        con.close();
    } catch(Exception e) {
        out.println("Database connection problem");
    }

    out.println("</body>");
    out.println("</html>");

}

/**
 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
 */
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    PrintWriter pw = response.getWriter();

    ConnectToDB connect = new ConnectToDB();
    connect.getData();
}

private String createHTMLRow(int id, String time, String title) {
    String row = "<tr>";
    row  += "<td>" + id + "</td>";
    row  += "<td>" + time + "</td>";
    row  += "<td>" + title + "</td>";
    row  += "</tr>";
    return row;
}
}

Context.xml 里面有这个:

    <?xml version="1.0" encoding="UTF-8"?>
    <Context>
      <WatchedResource>WEB-INF/web.xml</WatchedResource>
      <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
      <Resource name="jdbc/LiveDataSource" auth="Container"
         driverClassName="com.mysql.jdbc.Driver"
         type="javax.sql.DataSource"
         username="root"
         password="password"
         url="jdbc:mysql://localhost:3306/javaschema"
         maxActive="8" >
    </Resource> 
  </Context>

和我的 web.xml 这个:

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>test</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <resource-ref>
     <description>Connection Pool</description>
     <res-ref-name>>jdbc/LiveDataSource</res-ref-name>
     <res-type>javax.sql.DataSource</res-type>
     <res-auth>Container</res-auth>
  </resource-ref>
</web-app>

当我运行我的 servlet 时,我得到的只是数据库连接错误,仅此而已。我不知道是什么原因造成的。有什么想法吗?

【问题讨论】:

  • 嗯,您在连接到数据库时遇到了问题,这听起来很明显。堆栈跟踪的错误消息是什么?
  • 我没有收到来自编辑器的错误消息。当我运行 servlet 时,Html 运行良好,但我遇到了与 HTML 一起出现的数据库连接问题,它不会加载数据库
  • out.println("Database connection problem"); 行旁边至少添加e.printStackTrace(); 行并观察服务器日志。您可能会在那里看到问题的原因。您甚至可以将您的 out.println("Database connection problem"); 行更改为 out.println("Database connection problem, cause: " + e.getMessage()); 以直接在 JSP 输出中查看异常消息。
  • 好的,我发现问题出在我的列上,由于某种原因它找不到它。反正!非常感谢您的帮助!!! :D

标签: java mysql servlets


【解决方案1】:
<res-ref-name>>jdbc/LiveDataSource</res-ref-name>

我认为不是数据库连接错误。这是因为上面一行的 web.xml 文件有问题,用下面一行替换它,你在这里添加了额外的&gt;

<res-ref-name>jdbc/LiveDataSource</res-ref-name>

如果它不能解决您的问题,请发布堆栈跟踪。

【讨论】:

  • 不,我仍然删除了额外的 > 运行 servlet 时出现数据库连接错误。
  • 能否请您发布堆栈跟踪,以便能够理解问题
猜你喜欢
  • 2015-09-24
  • 1970-01-01
  • 2011-03-14
  • 2023-03-23
  • 2017-06-12
  • 1970-01-01
  • 2014-01-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多