Servlets netbeans glassfish servlet错误:NoClassDefFoundError

Servlets netbeans glassfish servlet错误:NoClassDefFoundError,servlets,netbeans,glassfish,ejb,stateless-session-bean,Servlets,Netbeans,Glassfish,Ejb,Stateless Session Bean,是否有某种特定的方法来确保在Netbeans中正确地将EJB模块部署到web应用程序 下面是示例,从servlet调用会话Bean。我清除了Netbeans中的glassfish输出,进行了干净的编译和运行: INFO: visiting unvisited references INFO: visiting unvisited references SEVERE: Class [ Lpakt/Salutation; ] not found. Error while loading

是否有某种特定的方法来确保在Netbeans中正确地将EJB模块部署到web应用程序

下面是示例,从servlet调用会话Bean。我清除了Netbeans中的glassfish输出,进行了干净的编译和运行:

INFO:   visiting unvisited references
INFO:   visiting unvisited references
SEVERE:   Class [ Lpakt/Salutation; ] not found. Error while loading [ class pakt.SalutationServlet ]
INFO:   visiting unvisited references
INFO:   Loading application [SalutationApplication-war] at [/SalutationApplication-war]
INFO:   SalutationApplication-war was successfully deployed in 382 milliseconds.
INFO:   processRequest..
WARNING:   StandardWrapperValve[SalutationServlet]: Servlet.service() for servlet SalutationServlet threw exception
java.lang.NoClassDefFoundError: pakt/Salutation
    at pakt.SalutationServlet.processRequest(SalutationServlet.java:30)
    at pakt.SalutationServlet.doGet(SalutationServlet.java:45)
为什么servlet不加载
pakt.saltation

干净的结构(未编译):

servlet:

package pakt;

import java.io.IOException;
import java.io.PrintWriter;
import javax.ejb.EJB;
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(urlPatterns = {"/SalutationServlet"})
public class SalutationServlet extends HttpServlet {

    @EJB
    private Salutation salutation;

    protected void processRequest(HttpServletRequest request,
            HttpServletResponse response)
            throws ServletException, IOException {
        System.out.println("processRequest..");
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet SalutationServlet</title>");
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>"
                    + salutation.getFormalSalutation("Sherlock Holmes")
                    + "</h1>");
            out.println("</body>");
            out.println("</html>");
        } finally {
            out.flush();
            out.close();
        }
    }

    @Override
    protected void doGet(HttpServletRequest request,
            HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request,
            HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }
}
}

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>SalutationServlet</servlet-name>
        <servlet-class>pakt.SalutationServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>SalutationServlet</servlet-name>
        <url-pattern>/SalutationServlet</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
</web-app>

这就是应用程序的构建方式。

我从scrach开始,因此:

NetBeansProjects/SalutationApp
├── build
│   ├── META-INF
│   │   └── MANIFEST.MF
│   ├── SalutationApp-ejb.jar
│   └── SalutationApp-war.war
├── build.xml
├── dist
│   └── gfdeploy
│       └── SalutationApp
│           ├── META-INF
│           │   └── MANIFEST.MF
│           ├── SalutationApp-ejb_jar
│           │   ├── ejb
│           │   │   └── Hello.class
│           │   └── META-INF
│           │       └── MANIFEST.MF
│           └── SalutationApp-war_war
│               ├── index.html
│               ├── META-INF
│               │   └── MANIFEST.MF
│               └── WEB-INF
│                   ├── classes
│                   │   └── srv
│                   │       └── HelloServlet.class
│                   └── web.xml
├── nbproject
│   ├── ant-deploy.xml
│   ├── build-impl.xml
│   ├── genfiles.properties
│   ├── private
│   │   └── private.properties
│   ├── project.properties
│   └── project.xml
├── SalutationApp-ejb
│   ├── build
│   │   ├── classes
│   │   │   ├── ejb
│   │   │   │   └── Hello.class
│   │   │   └── META-INF
│   │   │       └── MANIFEST.MF
│   │   ├── empty
│   │   └── generated-sources
│   │       └── ap-source-output
│   ├── build.xml
│   ├── dist
│   │   └── SalutationApp-ejb.jar
│   ├── nbproject
│   │   ├── ant-deploy.xml
│   │   ├── build-impl.xml
│   │   ├── genfiles.properties
│   │   ├── private
│   │   │   └── private.properties
│   │   ├── project.properties
│   │   └── project.xml
│   └── src
│       ├── conf
│       │   └── MANIFEST.MF
│       └── java
│           └── ejb
│               └── Hello.java
├── SalutationApp-war
│   ├── build
│   │   ├── empty
│   │   ├── generated-sources
│   │   │   └── ap-source-output
│   │   └── web
│   │       ├── index.html
│   │       ├── META-INF
│   │       │   └── MANIFEST.MF
│   │       └── WEB-INF
│   │           ├── classes
│   │           │   └── srv
│   │           │       └── HelloServlet.class
│   │           └── web.xml
│   ├── build.xml
│   ├── dist
│   │   └── SalutationApp-war.war
│   ├── nbproject
│   │   ├── ant-deploy.xml
│   │   ├── build-impl.xml
│   │   ├── genfiles.properties
│   │   ├── private
│   │   │   └── private.properties
│   │   ├── project.properties
│   │   └── project.xml
│   ├── src
│   │   ├── conf
│   │   │   └── MANIFEST.MF
│   │   └── java
│   │       └── srv
│   │           └── HelloServlet.java
│   └── web
│       ├── index.html
│       └── WEB-INF
│           └── web.xml
└── src
    └── conf
        └── MANIFEST.MF

52 directories, 46 files
我认为唯一的区别在于点击的顺序。我右键单击ejb和war项目上的“clean”,然后单击主应用程序,然后单击整个项目上的“run”

我认为这就解决了包装问题

尽管.war文件看起来非常相似,但除了一些命名更改外:

thufir@dur:~$ 
thufir@dur:~$ jar -tf NetBeansProjects/SalutationApp/SalutationApp-war/dist/SalutationApp-war.war 
META-INF/
META-INF/MANIFEST.MF
WEB-INF/
WEB-INF/classes/
WEB-INF/classes/srv/
WEB-INF/classes/srv/HelloServlet.class
WEB-INF/web.xml
index.html
thufir@dur:~$ 

我不太清楚为什么这个例子运行在另一个没有被忽略的地方,可能只是在不同的子项目上错误地单击了“清理”和“运行”。

在构建war存档后,SalationApplication war是否在其WEB-INF/lib目录中有SalationApplication ejb jar?@Ajan我相信答案是“否”基于上面的编辑,其中包括目录树和jar结构。然而,
saltationapplicationejb
确实显示在
saltationapplicationwar
的库中(在netbeans中),所以我不太确定。然而,它并没有出现在实际的结果.war文件中。Glassfish报告了一个成功的部署,这令人沮丧
thufir@dur:~$ 
thufir@dur:~$ tree NetBeansProjects/SalutationApplication
NetBeansProjects/SalutationApplication
├── build
│   ├── META-INF
│   │   └── MANIFEST.MF
│   ├── SalutationApplication-ejb.jar
│   └── SalutationApplication-war.war
├── build.xml
├── dist
│   └── SalutationApplication.ear
├── nbproject
│   ├── ant-deploy.xml
│   ├── build-impl.xml
│   ├── genfiles.properties
│   ├── private
│   │   └── private.properties
│   ├── project.properties
│   └── project.xml
├── SalutationApplication-ejb
│   ├── build
│   │   ├── classes
│   │   │   ├── META-INF
│   │   │   │   └── MANIFEST.MF
│   │   │   └── pakt
│   │   │       ├── Salutation.class
│   │   │       └── SalutationLocal.class
│   │   ├── empty
│   │   └── generated-sources
│   │       └── ap-source-output
│   ├── build.xml
│   ├── dist
│   │   └── SalutationApplication-ejb.jar
│   ├── nbproject
│   │   ├── ant-deploy.xml
│   │   ├── build-impl.xml
│   │   ├── genfiles.properties
│   │   ├── private
│   │   │   └── private.properties
│   │   ├── project.properties
│   │   └── project.xml
│   └── src
│       ├── conf
│       │   └── MANIFEST.MF
│       └── java
│           └── pakt
│               ├── Salutation.java
│               └── SalutationLocal.java
├── SalutationApplication-war
│   ├── build
│   │   ├── empty
│   │   ├── generated-sources
│   │   │   └── ap-source-output
│   │   └── web
│   │       ├── index.html
│   │       ├── META-INF
│   │       │   └── MANIFEST.MF
│   │       └── WEB-INF
│   │           ├── classes
│   │           │   ├── pakt
│   │           │   └── servlet
│   │           │       └── SalutationServlet.class
│   │           └── web.xml
│   ├── build.xml
│   ├── dist
│   │   └── SalutationApplication-war.war
│   ├── nbproject
│   │   ├── ant-deploy.xml
│   │   ├── build-impl.xml
│   │   ├── genfiles.properties
│   │   ├── private
│   │   │   └── private.properties
│   │   ├── project.properties
│   │   └── project.xml
│   ├── src
│   │   ├── conf
│   │   │   └── MANIFEST.MF
│   │   └── java
│   │       ├── pakt
│   │       └── servlet
│   │           └── SalutationServlet.java
│   └── web
│       ├── index.html
│       └── WEB-INF
│           └── web.xml
└── src
    └── conf
        └── MANIFEST.MF

43 directories, 42 files
thufir@dur:~$ 
thufir@dur:~$ jar -tf NetBeansProjects/SalutationApplication/SalutationApplication-war/dist/SalutationApplication-war.war 
META-INF/
META-INF/MANIFEST.MF
WEB-INF/
WEB-INF/classes/
WEB-INF/classes/pakt/
WEB-INF/classes/servlet/
WEB-INF/classes/servlet/SalutationServlet.class
WEB-INF/web.xml
index.html
thufir@dur:~$ 
thufir@dur:~$ jar -tf NetBeansProjects/SalutationApplication/SalutationApplication-ejb/dist/SalutationApplication-ejb.jar 
META-INF/
META-INF/MANIFEST.MF
pakt/
pakt/Salutation.class
pakt/SalutationLocal.class
thufir@dur:~$ 
thufir@dur:~$ 
NetBeansProjects/SalutationApp
├── build
│   ├── META-INF
│   │   └── MANIFEST.MF
│   ├── SalutationApp-ejb.jar
│   └── SalutationApp-war.war
├── build.xml
├── dist
│   └── gfdeploy
│       └── SalutationApp
│           ├── META-INF
│           │   └── MANIFEST.MF
│           ├── SalutationApp-ejb_jar
│           │   ├── ejb
│           │   │   └── Hello.class
│           │   └── META-INF
│           │       └── MANIFEST.MF
│           └── SalutationApp-war_war
│               ├── index.html
│               ├── META-INF
│               │   └── MANIFEST.MF
│               └── WEB-INF
│                   ├── classes
│                   │   └── srv
│                   │       └── HelloServlet.class
│                   └── web.xml
├── nbproject
│   ├── ant-deploy.xml
│   ├── build-impl.xml
│   ├── genfiles.properties
│   ├── private
│   │   └── private.properties
│   ├── project.properties
│   └── project.xml
├── SalutationApp-ejb
│   ├── build
│   │   ├── classes
│   │   │   ├── ejb
│   │   │   │   └── Hello.class
│   │   │   └── META-INF
│   │   │       └── MANIFEST.MF
│   │   ├── empty
│   │   └── generated-sources
│   │       └── ap-source-output
│   ├── build.xml
│   ├── dist
│   │   └── SalutationApp-ejb.jar
│   ├── nbproject
│   │   ├── ant-deploy.xml
│   │   ├── build-impl.xml
│   │   ├── genfiles.properties
│   │   ├── private
│   │   │   └── private.properties
│   │   ├── project.properties
│   │   └── project.xml
│   └── src
│       ├── conf
│       │   └── MANIFEST.MF
│       └── java
│           └── ejb
│               └── Hello.java
├── SalutationApp-war
│   ├── build
│   │   ├── empty
│   │   ├── generated-sources
│   │   │   └── ap-source-output
│   │   └── web
│   │       ├── index.html
│   │       ├── META-INF
│   │       │   └── MANIFEST.MF
│   │       └── WEB-INF
│   │           ├── classes
│   │           │   └── srv
│   │           │       └── HelloServlet.class
│   │           └── web.xml
│   ├── build.xml
│   ├── dist
│   │   └── SalutationApp-war.war
│   ├── nbproject
│   │   ├── ant-deploy.xml
│   │   ├── build-impl.xml
│   │   ├── genfiles.properties
│   │   ├── private
│   │   │   └── private.properties
│   │   ├── project.properties
│   │   └── project.xml
│   ├── src
│   │   ├── conf
│   │   │   └── MANIFEST.MF
│   │   └── java
│   │       └── srv
│   │           └── HelloServlet.java
│   └── web
│       ├── index.html
│       └── WEB-INF
│           └── web.xml
└── src
    └── conf
        └── MANIFEST.MF

52 directories, 46 files
thufir@dur:~$ 
thufir@dur:~$ jar -tf NetBeansProjects/SalutationApp/SalutationApp-war/dist/SalutationApp-war.war 
META-INF/
META-INF/MANIFEST.MF
WEB-INF/
WEB-INF/classes/
WEB-INF/classes/srv/
WEB-INF/classes/srv/HelloServlet.class
WEB-INF/web.xml
index.html
thufir@dur:~$