Je suis en train de développer une application Web en J2EE, et je suis complètement bloquer depuis 3 jours. C'est une bibliothèque en ligne, j'essaie simplement d'ajouter des livres via un formulaire mais je n'arrive pas à récupérer mon bean AuthorForm dans ma servlet. Je ne sais pas si mon problème vient de l'instance dao que j'essaie de récupérer ou non mais je n'ai meme pas de message d'erreur.
Servlet
package controller;
import java.io.IOException;
import java.util.Map;
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 javax.servlet.http.HttpSession;
import model.AbstractDaoFactory;
import model.Author;
import model.dao.interfaces.AuthorDao;
import model.dao.mysql.MysqlDaoFactory;
import model.form.AuthorForm;
@WebServlet("/AuthorServlet")
public class AuthorServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public static final String ATT_AUTHOR = "author";
public static final String ATT_FORM = "form";
public static final String SESSION_CLIENTS = "authors";
public static final String VUE_SUCCES = "/WEB-INF/authorsList.jsp";
public static final String VUE_FORM = "/WEB-INF/createAuthor.jsp";
private AuthorDao authorDao;
public void init() throws ServletException {
/* Récupération d'une instance */
MysqlDaoFactory daoFactory = MysqlDaoFactory.getInstance();
authorDao = daoFactory.getAuthorDao();
}
public AuthorServlet() {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.getServletContext().getRequestDispatcher( VUE_FORM ).forward( request, response ); }
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
AuthorForm form = new AuthorForm(authorDao);
Author author = form.createAuthor(request);
request.setAttribute( ATT_FORM, form );
request.setAttribute( ATT_AUTHOR, author );
if ( form.getErrors().isEmpty() ) {
this.getServletContext().getRequestDispatcher( VUE_SUCCES ).forward( request, response );
} else {
this.getServletContext().getRequestDispatcher( VUE_FORM ).forward( request, response );
}
}
}
AbstractDaoFactory
package model;
import java.sql.Connection;
import model.dao.interfaces.AuthorDao;
import model.dao.interfaces.BookDao;
import model.dao.interfaces.CategoryDao;
import model.dao.interfaces.ExemplaireDao;
import model.dao.interfaces.LanguageDao;
import model.dao.interfaces.UserDao;
public abstract class AbstractDaoFactory {
private static AbstractDaoFactory factory;
public static AbstractDaoFactory getFactory(){
return factory;
}
public static void setFactory(AbstractDaoFactory factory) {
AbstractDaoFactory.factory = factory;
}
public abstract Connection getConnection();
public abstract BookDao createBookDao();
public abstract UserDao createUserDao();
public abstract CategoryDao createCategoryDao();
public abstract AuthorDao createAuthorDao();
public abstract LanguageDao createLanguageDao();
public abstract ExemplaireDao createExemplaireDao();
}
Bean Author
package model;
import model.dao.interfaces.AuthorDao;
public class Author {
private int idAuthor;
private String firstName;
private String lastName;
public Author(int idAuthor, String firstName, String lastName) {
this.idAuthor = idAuthor;
this.firstName = firstName;
this.lastName = lastName;
}
public Author() {
}
public int getIdAuthor() {
return idAuthor;
}
public void setIdAuthor(int idAuthor) {
this.idAuthor = idAuthor;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public Author findById(int id) {
AbstractDaoFactory factory = AbstractDaoFactory.getFactory();
AuthorDao authorDao = factory.createAuthorDao();
return authorDao.findById(id);
}
}
Et lorsque je change le contenu de la methode init();
public void init() throws ServletException {
/* Récupération d'une instance */
this.authorDao = ((MysqlDaoFactory)getServletContext().getAttribute(DAO_FACTORY)).getAuthorDao();
}
J'obtiens le message d'erreur suivant :
Type Rapport d'exception
message "Servlet.init()" pour la servlet [controller.AuthorServlet] a généré une exception
description Le serveur a rencontré une erreur interne qui l'a empêché de satisfaire la requête.
exception
javax.servlet.ServletException: "Servlet.init()" pour la servlet [controller.AuthorServlet] a généré une exception
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:668)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:770)
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1415)
org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.base/java.lang.Thread.run(Thread.java:832)
cause mère
java.lang.NullPointerException: Cannot invoke "model.dao.mysql.MysqlDaoFactory.getAuthorDao()" because the return value of "javax.servlet.ServletContext.getAttribute(String)" is null
controller.AuthorServlet.init(AuthorServlet.java:34)
javax.servlet.GenericServlet.init(GenericServlet.java:158)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:668)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:770)
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1415)
org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.base/java.lang.Thread.run(Thread.java:832)
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.