Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Servlet, непонятная ошибка 
:(
    Опции темы
milvus
Дата 24.12.2012, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 17.12.2012

Репутация: нет
Всего: нет



Помогите разобраться запутался с этими list так непривычно после C++
Захожу в сервлет введя предварительно пароль и имя в index.html тут все нормально работет, проверял
В сервлете подается запрос в БД пока для пробы без авторизации, и из MySQL возвращается таблица с 1 колонкой и 3 строками
надо эту таблицу передать из сервлета в show.jsp и там создать таблицу и показать пользователю! Может мой подход не правильный, подскажите как тогда это сделать лучше
Но вот что у меня
Сервлет
Код

package servlet;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;
//import java.util.Vector;

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 files.file;    // класс хранащий инфу о файле!
// просто string Name и методы к нему get  и set


/**
 * Servlet implementation class ServToSQL
 */
@WebServlet("/ToSQL")
public class ServToSQL extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
/*КОНСТРУКТОР*/
    public ServToSQL() {
        super();
        // TODO Auto-generated constructor stub
    }

/*ЗАПРОС К БД*/
    public List<file> getSql( String query) // возвращате ответ в виде списка имен файлов
    {
        Connection connection;
            try 
            {
            // Название драйвера
                String driverName = "com.mysql.jdbc.Driver"; 
            // Create a connection to the database
                String serverName = "localhost";
                String mydatabase = "baseball";
                String url = "jdbc:mysql://" + serverName + "/" + mydatabase;
                String username = "root";
                String password = "";
            //подключение драйвера
                Class.forName(driverName);
            // подключение к БД
                connection = DriverManager.getConnection(url, username, password);
                System.out.println("is connect to DB: " + connection);
                Statement stmt = connection.createStatement();    
                
            /*
             * посылаем запрос на получение информации
             * ПРИЧЕМ ОН ДОЛЖЕН БЫТЬ ПОСЛЕ ВСЕХ ИЗМЕНЯЮЩИХ БД ЗАПРОСОВ!
             */
                ResultSet resFromSQL = stmt.executeQuery(query);//это класс через который можно послать запрос к данным в БД

            //Вывод рез запроса

                List<file> result = null;
                int j = 1; // номер стороки результирующей таблицы по запросу
                while (resFromSQL.next())    // пока при сдвиге каретки на следующую строчку еще что-то есть 
                    {
                        int i = 1; // колонка в таблище ответе на запрос
                                
                        while (i != 1000)
                        {
                            try 
                            {
                                file ThisFile = new file();
                                ThisFile.setName(resFromSQL.getString(1));// вернуть 1 колонку текущей строки ответа от БД
                                result.add(ThisFile);// если добавление произошло успешно берем следующую колонку этой сторки
                                i++;
                            }
                            catch(SQLException ex) 
                            {
                                System.out.println();
                                //System.out.print(ex);    
                                break; //когда колонка становится на позицию больше допустимого значения просто прерываем цикл и идем на новую строку
                            }
                        }
                        j++;
                    } // end while


            // отключение от БД;
                connection.close();            
                return result;    // вернуть вектор табл. рез. запроса
            } // end try
            catch (ClassNotFoundException e) 
            {
                e.printStackTrace();
                return null;
            } 
            catch (SQLException e) 
            {
                e.printStackTrace();
                return null;
            }
    }
     
/*GET - LOGIN - SaveToSQL*/
    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        this.doPost(request, response);
    }

/*POST - LOGIN - SaveToSQL*/
    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
    
    //данные о таблице
        String tablename = "players"; //название таблицы "files"; 
        String fieldname = "last_name"; //название поля для выборки данных "name"
                
    /*ИНФОРМАЦИОННЫЕ ЗАПРОСЫ*/

        String query = "SELECT " + fieldname + " FROM " + tablename + ";"; //запрос на выборку

        
/*Проверка правильности передачи имени и пароля от index.html здесь все работало*/        
        Object name = request.getParameter("Name");
        Object pass = request.getParameter("Pass");
        request.setAttribute("name", name);
        request.setAttribute("pass", pass);

    /*ОБРАЩЕНИЕ К БД*/
        List<file> ResFiles = (List<file>) this.getSql(query);
        if (ResFiles!= null)    // если возвращен не ноль
            request.setAttribute("date", ResFiles) ; // помещает в атрибут вектор строк
  

        request.getRequestDispatcher("Show.jsp").forward(request, response);    // сервлет передает запрос на show с index
    }

}



Он передате запрос на JSP
Код

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.List" %>
<%@ page import="files.file" %>    
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<p> Name   : <%=request.getAttribute("name") %> </p>
<p> Name   : <%=request.getParameter("Name") %> </p>
<p> Pass   : <%=request.getAttribute("pass") %> </p>
<p> Name   : <%=request.getParameter("Pass") %> </p>


    <table>
        <tr>
            <td>User</td>
        </tr>
        <%
        List<file> files = (List<file>) request.getAttribute("date");
            for (int i=0;i<files.size();i++){
                file ThisFile = (file) files.get(i);
        %>
        <tr>
            <td><%= ThisFile.getName() %></td>

        </tr>
        <%
            }
        %>

    </table>


</body>
</html>


выдает ошибку в сервлете
Код

java.lang.NullPointerException
    servlet.ServToSQL.getSql(ServToSQL.java:88)
    servlet.ServToSQL.doPost(ServToSQL.java:154)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)


если добавить tru catch на null pointer то будет вот такая ошибка в show.jsp
Код

org.apache.jasper.JasperException: An exception occurred processing JSP page /Show.jsp at line 40

37:         </tr>
38:         <%
39:         List<file> files = (List<file>) request.getAttribute("date");
40:             for (int i=0;i<files.size();i++){
41:                 file ThisFile = (file) files.get(i);
42:         %>
43:         <tr>


Stacktrace:
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:568)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:470)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    servlet.ServToSQL.doPost(ServToSQL.java:168)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)


root cause 

java.lang.NullPointerException
    org.apache.jsp.Show_jsp._jspService(Show_jsp.java:119)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    servlet.ServToSQL.doPost(ServToSQL.java:168)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)



PM MAIL   Вверх
milvus
Дата 25.12.2012, 08:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 17.12.2012

Репутация: нет
Всего: нет



Ладно, тогда перефразирую вопрос, подскажите пожалуйста как передать таблицу результата запроса к MySQL из сервлета в jsp в моем случае, все примеры что у меня есть при копировании выдают ошибку!
Только напишите пожалуйста код, а то теоретически я понял но постоянно вылазят какие-то ошибки
PM MAIL   Вверх
jk1
Дата 25.12.2012, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 5
Всего: 75



Цитата

java.lang.NullPointerException


говорит нам о том, что данных для рендеринга на JSP просто нет. Нет  их потому, что Вы забыли проинициализировать List

Код

 List<file> result = null;




Это сообщение отредактировал(а) jk1 - 25.12.2012, 10:38


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
milvus
Дата 25.12.2012, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 17.12.2012

Репутация: нет
Всего: нет



Да действительно, спасибо, просто была проблема с инициализацией, пока я не догадался сделать так
Код

import java.util.ArrayList;
List<file> res = new ArrayList<file>();

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.1090 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.