Помогите разобраться запутался с этими 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)
|
|