Проблемы с Tomcat6 и MySQL - PullRequest
       2

Проблемы с Tomcat6 и MySQL

1 голос
/ 08 ноября 2011

У меня новая установка сервера Ubuntu 11.10 с Tomcat6.Я использую Eclipse Indigo для создания сервлета Java, который получает данные с моего сервера MySQL.Я поместил последнюю версию Connector / J (mysql-connector-java-5.1.18-bin.jar) в каталог моих серверов CATALINA_HOME / lib.В Eclipse я создаю динамический веб-проект, для которого затем создаю сервлет.Код Java для сервлета:

import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;

/**
 * Servlet implementation class TestServlet
 */
public class TestServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

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

/**
 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
 */
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    Context initCtx = null;
    try {
        initCtx = new InitialContext();
    } catch (NamingException e2) {
        // TODO Auto-generated catch block
        e2.printStackTrace();
    }
    Context envCtx = null;
    try {
        envCtx = (Context) initCtx.lookup("java:comp/env");
    } catch (NamingException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    DataSource ds = null;
    try {
        ds = (DataSource) envCtx.lookup("jdbc/TestDB");
    } catch (NamingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } 
    Connection conn = null;
    try {
        conn = ds.getConnection();
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    Statement stat = null;
    try {
        stat = conn.createStatement();
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    ResultSet rs = null;
    try {
        rs = stat.executeQuery("SELECT * FROM users");
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    try {
        while(rs.next()) {
            System.out.println("in");
        }
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

}

В моем WEB-INF / web.xml есть следующее:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>TestServlet</display-name>
  <resource-ref>
    <description>TestDB</description>
    <res-ref-name>jdbc/TestDB</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
  </resource-ref>
  <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>
  <servlet>
    <description></description>
    <display-name>TestServlet</display-name>
    <servlet-name>TestServlet</servlet-name>
    <servlet-class>TestServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>TestServlet</servlet-name>
    <url-pattern>/TestServlet</url-pattern>
  </servlet-mapping>
</web-app>

Мне пришлось создать context.xml в META-INF, но вот контекст моего META-INF / context.xml

<?xml version="1.0" encoding="UTF-8"?>
<Context>
  <Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"
               maxActive="100" maxIdle="30" maxWait="10000"
               username="myuser" password="mypass" driverClassName="com.mysql.jdbc.Driver"
               url="jdbc:mysql://localhost:3306/test1"/>
</Context>

, который я экспортирую на войну, развертываю на моем сервере Tomcat.Когда я просматриваю сервлет, я получаю следующую ошибку:

java.lang.NullPointerException
TestServlet.doGet(TestServlet.java:67)
javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

Строка 67 TestServlet.java - это conn.createStatement ();линия.Извините, мой код грязный, я пошел с отдельными блоками try catch, потому что я не получаю эту ошибку, когда делаю один большой try catch, хотя он все еще не подключается к базе данных MySQL.Я уверен, что здесь пропущен довольно простой шаг, но я нигде не могу его найти, я немного новичок с Tomcat и Servlets.Спасибо за тонну.

Ответы [ 2 ]

0 голосов
/ 09 ноября 2011

Проблема оказалась в моем /etc/mysql/my.conf. Я установил свой bind-адрес на ip-адрес сервера, это приводило к невозможности подключения Tomcat. Почему Tomcat не может, кроме PHP, может быть за пределами меня, но что угодно. Я изменил свой bind-адрес на 0.0.0.0 и все хорошо.

0 голосов
/ 08 ноября 2011

Согласно документам контекста Tomcat 6 :

Элементы контекста могут быть явно определены:

  • Только если файл контекста не существуетдля приложения в $ CATALINA_BASE / conf / [enginename] / [имя хоста] /, в отдельном файле в /META-INF/context.xml внутри файлов приложения.Если веб-приложение упаковано как WAR, то /META-INF/context.xml будет скопировано в $ CATALINA_BASE / conf / [enginename] / [hostname] / и переименовано в соответствии с контекстным путем приложения.Если этот файл существует, он не будет заменен, если новая WAR с более новым /META-INF/context.xml будет помещена в базу приложения хоста.

Попробуйте удалить копию в Tomcat.conf dir и посмотрите, будет ли ваш файл context.xml поднят.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...