Делаю учебное веб-приложение "Библиотека". Есть 2 jsp страницы: index - вход, main - главная (сюда должен выводится список авторов из БД) main.jsp
<%@ page import="app.AuthorList" %>
<%@ page import="app.Author" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Inside</title>
<style type="text/css">
#footer {
position: fixed; /* Фиксированное положение */
left: 0; bottom: 0; /* Левый нижний угол */
padding: 10px; /* Поля вокруг текста */
background: LightSeaGreen; /* Цвет фона */
color: #fff; /* Цвет текста */
width: 100%; /* Ширина слоя */
}
</style>
</head>
<body>
<div class="text-center">
<img src="images1.jpg" class="img-thumbnail" alt="Responsive image">
</div>
<div class="jumbotron">
<h1 class="text-info">Librus</h1>
<p>You can find some books here.</p>
<% AuthorList authorList = new AuthorList();
for (Author author : authorList.getAuthorList()) {
%>
<li><a href="#"> <%=author.getFull_name() %></a></li>
<% }%>
</div>
<div id="footer" class="text-center">
© Markus Efr
</div>
</body>
</html>
PostgreSQL содержит бд проекта, в Glassfish настроен пул соединения и ресурс для его использования. В папку lib поместил драйвер для postresql
Также 3 java класса Author - сущность объекта,
package app;
public class Author {
public Author() {
}
private int auth_id;
private String full_name;
public Author (int auth_id, String full_name) {
this.auth_id=auth_id;
this.full_name=full_name;
}
public int getAuth_id() {
return auth_id;
}
public void setAuth_id(int auth_id) {
this.auth_id = auth_id;
}
public String getFull_name() {
return full_name;
}
public void setFull_name(String full_name) {
this.full_name = full_name;
}
}
AuthorList - выполняет запрос и наполняет список сущностями из БД.
package app;
import app.Connector;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
public class AuthorList {
private ArrayList<Author> authorList = new ArrayList<Author>();
private ArrayList<Author> getAuthors () {
try {
Connection con = Connector.getConnection();
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("select * from author");
while (rs.next()) {
Author author = new Author();
author.setFull_name(rs.getString("full_name"));
authorList.add(author);
}
} catch (SQLException e) {
Logger.getLogger(AuthorList.class.getName()).log(Level.SEVERE, "Error", e);
}
return authorList;
}
public ArrayList<Author> getAuthorList() {
if (!authorList.isEmpty()) {
return authorList;
} else {
return getAuthors();
}
}
}
Connector содержит настойки для использования ресурса БД.
package app;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
public class Connector {
private static Connection con;
private static InitialContext ic;
private static DataSource ds;
public static Connection getConnection() {
try {
ic = new InitialContext();
ds = (DataSource) ic.lookup("jdbc/library");
if (con==null) {
con = ds.getConnection();
}
} catch (SQLException e) {
Logger.getLogger(AuthorList.class.getName()).log(Level.SEVERE, "Error", e);
} catch (NamingException e) {
Logger.getLogger(AuthorList.class.getName()).log(Level.SEVERE, "Error", e);
}
return con;
}
}
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<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>Librus</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<resource-ref>
<description>JDBC Connection Pool</description>
<res-ref-name>jdbc/library</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
</web-app>
Буду благодарен за понимание что пошло не так. Где возник NullPoint и как его изгнать ?