Servlets netbeans glassfish servlet错误:NoClassDefFoundError
是否有某种特定的方法来确保在Netbeans中正确地将EJB模块部署到web应用程序 下面是示例,从servlet调用会话Bean。我清除了Netbeans中的glassfish输出,进行了干净的编译和运行: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
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:~$