JSP con Maven y Hibernate - Java.lang.NosuchMethodError, probablemente problema con la estructura del proyecto

StackOverflow https://stackoverflow.com//questions/10684542

Pregunta

Tengo un problema con mi proyecto escolar.Estoy usando Hibernate, JSP y Maven para la gestión de la dependencia.Hibernate y Maven funciona bien, pero cuando intento hacer una página de JSP simple con la pantalla de inicio de sesión.No funciona.Creo que el problema es con Maven y cómo trabaja con la estructura del proyecto, porque si hago que la clase de prueba todo funciona.No puedo encontrar nada sobre cómo funciona Maven con WebApps.

Perdón por mis errores en inglés :).

MI ESTRUCTURA DE PROYECTO:

├── src
│   └── main
│       ├── java
│       │    │
│       │    pro3
│       │     ├── model
│       │     │   ├── dao
│       │     │   │   ├── DaoInterface.java
│       │     │   │   └── HibernateDao.java
│       │     │   ├── hibernate
│       │     │   │   ├── hibernate.cfg.xml
│       │     │   │   ├── hibernate.reveng.xml
│       │     │   │   ├── HibernateUtil.java
│       │     │   │   ├── mapping
│       │     │   │   │   ├── Meal.hbm.xml
│       │     │   │   │   ├── ...
│       │     │   │   │   
│       │     │   │   └── Test.java
│       │     │   └── pojo
│       │     │       ├── Meal.java
│       │     │       ├── ...
│       │     │      
│       │     │      
│       │     └── utils
│       │         └── LoginHandler.java
│       └── webapp
│           └── index.jsp

index.jsp:

<jsp:useBean id="login" scope="page" class="cz.fim.pro3.utils.LoginHandler" />
...
login.verifyUser(request.getParameter("userName"), request.getParameter("password"));

loginhandler.java:

public class LoginHandler {
    DaoInterface dao = new HibernateDao();


    public boolean verifyUser(String userName,String password){
        return dao.verifyUser(userName, password);
    }
}

HibernateAo.Java:

public boolean verifyUser(String userName, String password)


En mi clase de prueba, todo funciona bien, cuando lo ejecuto como aplicación de Java.

Prueba:

public static void main(String[] args) {
    new Test();
    LoginHandler login = new LoginHandler();
    login.verifyUser("sdf", "asda");
}

pom.xml:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <classpathPrefix>lib/</classpathPrefix>
                    </manifest>
                </archive>
                <webResources>
                    <resource>
                        <!-- this is relative to the pom.xml directory -->
                        <directory>src/main/webapp</directory>
                        <targetPath>/</targetPath>
                        <!-- enable filtering -->
                        <filtering>false</filtering>
                    </resource>
                </webResources>
            </configuration>
        </plugin>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.7</source>
                <target> 1.7</target>
            </configuration>
        </plugin>
    </plugins>
</build>

<packaging>war</packaging>

TRACURACIÓN DE ERROR:

Stacktrace:] with root cause
java.lang.NoSuchMethodError: org.hibernate.SessionFactory.openSession()Lorg/hibernate/Session;
    at cz.fim.pro3.model.dao.HibernateDao.verifyUser(HibernateDao.java:11)
    at cz.fim.pro3.utils.LoginHandler.verifyUser(LoginHandler.java:11)
    at org.apache.jsp.index_jsp._jspService(index_jsp.java:83)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:419)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:391)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:395)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:250)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    at java.lang.Thread.run(Thread.java:722)

¿Fue útil?

Solución

Lo primero que puedo recomendar es cambiar las ubicaciones de sus archivos, causa en Maven, tiene que Sigue algunas convenciones :

Los archivos Java deben colocarse en src / main / java más el nombre del paquete apropiado. El archivo hibernate.cfg.xml y el hibernate.reveng.xml do no pertenecen a SRC / PRINCIPAL / JAVA, deben ubicarse en SRC / PRINCIPAL / RECURSOS PLUS Nombre de paquete apropiado que le gusta ponerlos en. Además, en hibernación, la asignación debe ser manejada por anotaciones y no por los archivos HBM. Pero si tiene que atascarse con los archivos de asignación, también deben colocarse en SRC / PRINCIPAL / RECURSOS también.

Si tiene algún tipo de pruebas (generalmente pruebas de unidad) como test.java, se deben colocar en src / prueba / java cualquier tipo de recursos que pertenecen a las pruebas de la unidad solo tienen que ser puesto en src / prueba / recursos más el nombre del paquete apropiado. El archivo JSP se ha localizado correctamente en SRC / PRINCIPAL / WEBAPP .

Aparte de lo anterior, debe llamar al método correcto en su línea hibernatee.java 11 donde está tratando de llamar a un método openssion lo que obviamente no existe.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top