Piszę aplikację webową, która ma wyświetlać bazę danych i umożliwiać jej edycję. Niestety pojawia się błąd, z którym nie mogę sobie poradzić:
HTTP Status 500 - An exception occurred processing JSP page /index.jsp at line 14
type Exception report
message An exception occurred processing JSP page /index.jsp at line 14
description The server encountered an internal error that prevented it from fulfilling this request.
exception
org.apache.jasper.JasperException: An exception occurred processing JSP page /index.jsp at line 14
11: <title>Insert title here</title>
12: </head>
13: <body>
14: <jsp:forward page="/FilmController" >
15: <jsp:param name="action" value="listFilm"/>
16: </jsp:forward>
17: </body>
Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:574)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:461)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
root cause
javax.servlet.ServletException: Error instantiating servlet class com.agh.filmy.controller.FilmController
org.apache.jasper.runtime.PageContextImpl.doForward(PageContextImpl.java:741)
org.apache.jasper.runtime.PageContextImpl.forward(PageContextImpl.java:711)
org.apache.jsp.index_jsp._jspService(index_jsp.java:100)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:438)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
root cause
java.lang.NullPointerException
java.util.Properties$LineReader.readLine(Properties.java:434)
java.util.Properties.load0(Properties.java:353)
java.util.Properties.load(Properties.java:341)
com.agh.filmy.util.DbUtil.getConnection(DbUtil.java:25)
com.agh.filmy.dao.FilmDao.<init>(FilmDao.java:20)
com.agh.filmy.controller.FilmController.<init>(FilmController.java:32)
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
java.lang.reflect.Constructor.newInstance(Constructor.java:422)
java.lang.Class.newInstance(Class.java:442)
org.apache.jasper.runtime.PageContextImpl.doForward(PageContextImpl.java:741)
org.apache.jasper.runtime.PageContextImpl.forward(PageContextImpl.java:711)
org.apache.jsp.index_jsp._jspService(index_jsp.java:100)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:438)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
Z tego co widzę, jest jakiś błąd z utworzeniem serwleta FilmController, ale czytałam cały kod i nie wiedzę błędu :(
Struktura projektu:
Filmy
src
main
java
com
agh
filmy
controller
FilmController.java
dao
FilmDao.java
model
film.java
kategoria.java
util
DbUtil.java
db.properties
resources
webapp
META-INF
context.xml
WEB-INF
web.xml
index.jsp
listFilm.jsp
Pliki:
index.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>Insert title here</title>
</head>
<body>
<jsp:forward page="/FilmController" >
<jsp:param name="action" value="listFilm"/>
</jsp:forward>
</body>
</html>
FilmController.java
package com.agh.filmy.controller;
import com.agh.filmy.dao.FilmDao;
import com.agh.filmy.model.film;
import com.agh.filmy.model.kategoria;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(name = "FilmController", urlPatterns = {"/FilmController"})
public class FilmController extends HttpServlet {
private static final long serialVersionUID= 1L;
private static String INSERT_OR_EDIT = "/film.jsp";
private static String LIST_FILM = "/listFilm.jsp";
private FilmDao dao;
public FilmController() {
super();
dao= new FilmDao();
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
String forward="";
String action= request.getParameter("action");
if(action.equalsIgnoreCase("delete")){
int filmId= Integer.parseInt(request.getParameter("filmId"));
dao.deleteFilm(filmId);
forward= LIST_FILM;
request.setAttribute("filmy", dao.getAllFilms());
} else if(action.equalsIgnoreCase("edit")){
forward = INSERT_OR_EDIT;
int filmId = Integer.parseInt(request.getParameter("filmId"));
film film = dao.getFilmById(filmId);
request.setAttribute("film", film);
}else if(action.equalsIgnoreCase("listFilm")) {
forward = LIST_FILM;
request.setAttribute("filmy", dao.getAllFilms());
} else {
forward = INSERT_OR_EDIT;
}
RequestDispatcher view = request.getRequestDispatcher(forward);
view.forward(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
film film = new film();
film.setTytul(request.getParameter("tytul"));
film.setRezyser(request.getParameter("rezyser"));
film.setRok(request.getParameter("rok"));
film.setLink(request.getParameter("link"));
film.setKategoria(new kategoria(Integer.parseInt(request.getParameter("kategoria_id")),request.getParameter("kategoria_opis")));
String filmid = request.getParameter("filmid");
if (filmid == null || filmid.isEmpty()) {
dao.addFilm(film);
} else {
film.setFilmId(Integer.parseInt(filmid));
dao.updateFilm(film);
}
RequestDispatcher view = request.getRequestDispatcher(LIST_FILM);
request.setAttribute("filmy", dao.getAllFilms());
view.forward(request, response);
}
}
FilmDao.java
package com.agh.filmy.dao;
import com.agh.filmy.model.*;
import com.agh.filmy.util.*;
import java.sql.*;
import java.util.*;
public class FilmDao {
private Connection connection;
public FilmDao(){
connection= DbUtil.getConnection();
}
public void addFilm(film film) {
try{
PreparedStatement preparedStatement= connection.prepareStatement("INSERT INTO ap_web_filmy (tytul, rok_produkcji, id_kategoria, rezyser, link) VALUES (?, ?, ?, ?, ?)");
preparedStatement.setString(1, film.getTytul());
preparedStatement.setString(2, film.getRok());
preparedStatement.setInt(3, film.getKategoria().getKategoriaId());
preparedStatement.setString(4, film.getRezyser());
preparedStatement.setString(5, film.getLink());
preparedStatement.executeUpdate();
} catch(SQLException e) {
e.printStackTrace();
}
}
public void updateFilm(film film) {
try{
PreparedStatement preparedStatement= connection.prepareStatement("UPDATE ap_web_filmy SET tytul=?, rok_produkcji=?, id_kategoria=?, rezyser=?, link=? WHERE id_film=?");
preparedStatement.setString(1, film.getTytul());
preparedStatement.setString(2, film.getRok());
preparedStatement.setInt(3, film.getKategoria().getKategoriaId());
preparedStatement.setString(4, film.getRezyser());
preparedStatement.setString(5, film.getLink());
preparedStatement.setInt(5, film.getFilmId());
preparedStatement.executeUpdate();
} catch(SQLException e) {
e.printStackTrace();
}
}
public void deleteFilm(int id){
try{
PreparedStatement preparedStatement= connection.prepareStatement("DELETE FROM ap_web_filmy WHERE id_film=?");
preparedStatement.setInt(1, id);
preparedStatement.executeUpdate();
} catch(SQLException e) {
e.printStackTrace();
}
}
public List <film> getAllFilms() {
List <film> filmy= new ArrayList<film>();
try{
Statement statement= connection.createStatement();
ResultSet rs= statement.executeQuery("select* from ap_web_filmy, ap_web_kategorie WHERE ap_web_filmy.id_kategoria=ap_web_kategorie.id_kategoria");
while(rs.next()) {
film film= new film();
film.setFilmId(rs.getInt("id_film"));
film.setTytul(rs.getString("tytul"));
film.setRok(rs.getString("rok"));
film.setRezyser(rs.getString("rezyser"));
film.setLink(rs.getString("link"));
film.setKategoria(new kategoria(rs.getInt("id_kateoria"),rs.getString("opis")));
filmy.add(film);
}
} catch(SQLException e) {
e.printStackTrace();
}
return filmy;
}
public film getFilmById(int id_film) {
film film=new film();
try{
PreparedStatement preparedStatement= connection.prepareStatement("select* from ap_web_filmy WHERE id_film=?");
preparedStatement.setInt(1, id_film);
ResultSet rs= preparedStatement.executeQuery();
if(rs.next()) {
film.setFilmId(rs.getInt("id_film"));
film.setTytul(rs.getString("tytul"));
film.setRok(rs.getString("rok"));
film.setRezyser(rs.getString("rezyser"));
film.setLink(rs.getString("link"));
film.setKategoria(new kategoria(rs.getInt("id_kateoria"),rs.getString("opis")));
}
} catch(SQLException e) {
e.printStackTrace();
}
return film;
}
}
DbUtil.java
import java.io.*;
import java.sql.*;
import java.util.*;
public class DbUtil {
private static Connection connection= null;
public static Connection getConnection(){
if(connection!= null)
return connection;
else{
try{
Properties prop= new Properties();
InputStream inputStream= DbUtil.class.getClassLoader().getResourceAsStream("/db.properties");
prop.load(inputStream);
String driver = prop.getProperty("driver");
String url= prop.getProperty("url");
String user= prop.getProperty("user");
String password= prop.getProperty("password");
Class.forName(driver);
connection= DriverManager.getConnection(url, user, password);
} catch(ClassNotFoundException | SQLException | IOException e) {
e.printStackTrace();
}
return connection;
}
}
}
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
<servlet>
<servlet-name>FilmController</servlet-name>
<servlet-class>com.agh.filmy.controller.FilmController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FilmController</servlet-name>
<url-pattern>/FilmController</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
</web-app>
Jeśli ktoś mógłby mnie naprowadzić gdzie jest błąd, byłabym bardzo wdzięczna.
Jeśli to jest coś oczywistego albo czegoś nie napisałam to przepraszam, w javie jestem zielona. Kod jest praktycznie identyczny z tym podanym przez wykładowcę, dostosowałam go tylko do mojej bazy danych.