我想在eclipse中使用servlet进行开发,但是它说 javax.servlet 无法解析。如何添加 javax.servlet 包到我的eclipse项目?
javax.servlet
o0lyfsai1#
在我的例子中,当我转到targeted runtimes屏幕时,尽管安装了tomcat7,但它并没有被列出(禁用)。要解决这个问题,我必须转到preferences->server->runtime environments,然后卸载并重新安装tomcat7。
w3nuxt5m2#
来自维基百科。
import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class HelloWorld extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter(); out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " + "Transitional//EN\">\n" + "<html>\n" + "<head><title>Hello WWW</title></head>\n" + "<body>\n" + "<h1>Hello WWW</h1>\n" + "</body></html>"); } }
当然,只有添加了 servlet-api.jar eclipse构建路径。通常,您的应用服务器(例如tomcat)将拥有正确的jar文件。
servlet-api.jar
vd8tlhqk3#
你可以简单地复制 servlet-api.jar 然后将jar文件复制到lib文件夹中,该文件夹位于web-inf中。然后只要清理并构建您的项目,您的错误就会得到解决。
**OR**
您可以使用以下步骤直接将jar文件添加到库中。右键单击项目。转到属性。转到java构建路径。从选项卡中选择“添加库”选项。添加jar文件给出你的道路 servlet-api.jar 文件。清理并构建项目。
knsnq2tg4#
包括服务器lib文件夹中的servlet-api.jar。执行此步骤
zujrkrfu5#
这也可能是原因。我想出了以下方法 pom.xml .
pom.xml
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency>
未解决的问题是由于排除了 spring-boot-starter-tomcat . 把它拿走 <exclusions>...</exclusions> 它将解决依赖性问题,但确保这样做也会排除嵌入的tomcat服务器。如果您也需要嵌入式tomcat服务器,您可以使用添加相同的依赖关系 compile scope .
spring-boot-starter-tomcat
<exclusions>...</exclusions>
compile scope
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>compile</scope> </dependency>
kognpnkq6#
转到项目的属性(使用alt+enter或右键单击)
在目标运行时下检查apachetomcatv7.0,它就可以工作了。
7rtdyuoh7#
我知道这是一个老职位。然而,我观察到另一个示例,其中在项目中已经添加了tomcat,但是我们仍然得到这个错误。这样做是为了解决:alt+enter键项目方面在右边,详细信息旁边是另一个选项卡“运行时”。安装的tomcat服务器将列在那里。选择它。保存配置并完成!希望这对别人有帮助。
rqcrx0a68#
与hari略有不同:右键单击项目--->属性--->java构建路径--->添加库…-->服务器运行时-->apachetomcat-->finish。
icnyk63a9#
在pom.xml中添加javax.servlet依赖项。你的问题会解决的。
<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.0.1</version> <scope>provided</scope> </dependency>
ecfdbz9o10#
对于maven项目,添加以下依赖性:
<!-- https://mvnrepository.com/artifact/javax.servlet/servlet-api --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.0.1</version> <scope>provided</scope> </dependency>
参考对于gradle项目:
dependencies { providedCompile group: 'javax.servlet', name: 'javax.servlet-api', version: '3.0.1' }
或下载 javax.servlet.jar 并添加到您的项目中。
javax.servlet.jar
oipij1gg11#
快速修复-这在eclipse中起作用-右键单击project->properties->java build path(选项卡)->add external jar->定位servlet api jar实现(如果是tomcat-它的命名servlet api.jar)->单击ok。就这样!!
neskvpey12#
在创建与“动态web模块”相关的项目期间,我遇到了一个空指针异常。使项目编译(即 javax.servlet 为了成功导入),我必须转到项目的属性,在侧栏中选择项目facets,勾选dynamicwebmodule并单击apply。令人惊讶的是,这次“dynamicwebmodule”facet安装正确,导入开始工作。
7z5jn7bk13#
我们中的许多人通过maven项目在eclipse中开发。如果是这样,可以通过 tomcat-servlet-api 以及 tomcat-jsp-api 罐。tomcat的每个版本都有一个。通常添加这些范围 provided 到你的pom就足够了。这将使您的构建更具可移植性。如果将来升级tomcat,也只需更新这些jar的版本。
tomcat-servlet-api
tomcat-jsp-api
provided
9cbw7uwe14#
确保至少为企业java开发人员(与企业一起)使用eclipseide。它包含用于创建动态web项目和轻松集成servletcontainers的开发工具(这些工具是web工具平台wtp的一部分)。如果您已经有了EclipseIDEforJava(没有enterprise),并且手动安装了一些相关的插件,那么很可能是没有正确完成。你最好把它扔掉,用真正的EclipseIDEforEnterpriseJavaOne。您还需要确保您的计算机上已经安装了一个servletcontainer,它至少实现了与生产环境中的servletcontainer相同的ServletAPI版本,例如apache tomcat、oracle glassfish、jboss as/wildfly等。通常,只需下载zip文件并解压缩即可。对于tomcat,不要下载exe格式,这只适用于基于windows的生产环境。另请参阅a.o。本地主机上tomcat服务器所需的几个端口(8005、8080、8009)已经在使用中。servletcontainer是ServletAPI的具体实现。请注意,oracle.com上下载的JavaEESDK基本上包含glassfish。因此,如果您碰巧已经下载了javaeesdk,那么您基本上已经有了glassfish。另外请注意,例如glassfish和jbossas/wildfly不仅仅是一个servlet容器,它们还支持jsf、ejb、jpa和所有其他javaee。另请参见a.o.什么是java ee?
在您的计算机上安装了eclipse for enterprise java和servletcontainer之后,请在eclipse中执行以下步骤:在eclipse中集成servletcontainer答。通过服务器视图打开底部框中的servers视图。右键单击此处并选择“新建”>“服务器”。选择适当的servletcontainer品牌和版本,并浏览向导。b。或者,通过eclipse首选项打开窗口>首选项>服务器>运行时环境。您可以在此处添加、编辑和删除服务器。将服务器与项目关联答。在新项目中打开左侧的项目导航器/资源管理器。右键单击此处并选择“新建”>“项目”,然后在“菜单”“web”>“动态web项目”中。在向导中,将目标运行时设置为集成服务器。b。或者,在现有项目中右键单击“项目”,然后选择“属性”。在目标运行时部分,选择集成服务器。无论哪种方式,eclipse都会在构建路径中自动获取servletcontainer的库。这样您就可以导入并使用servlet api。
在任何情况下,您都不需要在项目的build path属性中胡来。最重要的是,不要手动复制/下载/移动/包含特定于servletcontainer的库,如 servlet-api.jar , jsp-api.jar , el-api.jar , j2ee.jar , javaee.jar 它只会导致未来的可移植性、兼容性、类路径和可维护性问题,因为当你的webapp被部署到一个不同品牌/版本的servletcontainer上时,它将无法工作,而这些库最初是从那里获得的。在使用maven的情况下,需要绝对确保目标运行时已经提供的特定于servletcontainer的库被标记为 <scope>provided</scope> .这里有一些典型的例外情况,你可以得到当你乱扔垃圾 /WEB-INF/lib 甚至 /JRE/lib , /JRE/lib/ext ,etc使用servletcontainer特定的库来修复编译错误:java.lang.nullpointerexception位于org.apache.jsp.index\u jsp.\u jspinitnoclassdeffounderror:javax/el/elresolverjava.lang.nosuchfielderror:是\u目录java.lang.nosuchmethoderror:javax.servlet.jsp.pagecontext.getelcontext()ljavax/el/elcontext;java.lang.abstractmethoderror:javax.servlet.jsp.jspfactory.getjspapplicationcontext(ljavax/servlet/servletcontext;)ljavax/servlet/jsp/jspapplicationcontext;org.apache.jasper.jasperexception:类型jspfactory的方法getjspapplicationcontext(servletcontext)未定义java.lang.verifyerror:(类:org/apache/jasper/runtime/jspapplicationcontextimpl,方法:createelresolver签名:()ljavax/el/elresolver;)函数的参数不兼容jar没装。参见servlet规范2.3,第9.7.2节。有问题的类:javax/servlet/servlet.class
jsp-api.jar
el-api.jar
j2ee.jar
javaee.jar
<scope>provided</scope>
/WEB-INF/lib
/JRE/lib
/JRE/lib/ext
fivyi3re15#
最重要的是,不要手动复制/下载/移动/包含特定于servlet容器的库,如servlet-api.jar@巴卢斯克,我更愿意使用我的应用程序将要使用的类,而不是eclipse提供的类(当我感觉自己像一个偏执的开发人员时)。另一个解决方案是使用eclipse“configure build path”>libraries>addexternaljar,并添加选择使用的任何容器的servlet api。并且在使用ant构建时遵循@kaustav datta的解决方案-具有类似tomcat.home或weblogic.home的属性。但是,它引入了另一个约束,即如果使用weblogic,开发人员必须在其本地计算机上安装weblogic!还有其他清洁剂吗?
15条答案
按热度按时间o0lyfsai1#
在我的例子中,当我转到targeted runtimes屏幕时,尽管安装了tomcat7,但它并没有被列出(禁用)。
要解决这个问题,我必须转到preferences->server->runtime environments,然后卸载并重新安装tomcat7。
w3nuxt5m2#
来自维基百科。
当然,只有添加了
servlet-api.jar
eclipse构建路径。通常,您的应用服务器(例如tomcat)将拥有正确的jar文件。vd8tlhqk3#
你可以简单地复制
servlet-api.jar
然后将jar文件复制到lib文件夹中,该文件夹位于web-inf中。然后只要清理并构建您的项目,您的错误就会得到解决。您可以使用以下步骤直接将jar文件添加到库中。
右键单击项目。
转到属性。
转到java构建路径。
从选项卡中选择“添加库”选项。
添加jar文件
给出你的道路
servlet-api.jar
文件。清理并构建项目。
knsnq2tg4#
包括服务器lib文件夹中的servlet-api.jar。
执行此步骤
zujrkrfu5#
这也可能是原因。我想出了以下方法
pom.xml
.未解决的问题是由于排除了
spring-boot-starter-tomcat
. 把它拿走<exclusions>...</exclusions>
它将解决依赖性问题,但确保这样做也会排除嵌入的tomcat服务器。如果您也需要嵌入式tomcat服务器,您可以使用添加相同的依赖关系
compile scope
.kognpnkq6#
第一步
转到项目的属性(使用alt+enter或右键单击)
第2步
在目标运行时下检查apachetomcatv7.0,它就可以工作了。
7rtdyuoh7#
我知道这是一个老职位。然而,我观察到另一个示例,其中在项目中已经添加了tomcat,但是我们仍然得到这个错误。这样做是为了解决:
alt+enter键
项目方面
在右边,详细信息旁边是另一个选项卡“运行时”。安装的tomcat服务器将列在那里。选择它。
保存配置并完成!
希望这对别人有帮助。
rqcrx0a68#
与hari略有不同:
右键单击项目--->属性--->java构建路径--->添加库…-->服务器运行时-->apachetomcat-->finish。
icnyk63a9#
在pom.xml中添加javax.servlet依赖项。你的问题会解决的。
ecfdbz9o10#
对于maven项目,添加以下依赖性:
参考
对于gradle项目:
或下载
javax.servlet.jar
并添加到您的项目中。oipij1gg11#
快速修复-这在eclipse中起作用-右键单击project->properties->java build path(选项卡)->add external jar->定位servlet api jar实现(如果是tomcat-它的命名servlet api.jar)->单击ok。就这样!!
neskvpey12#
在创建与“动态web模块”相关的项目期间,我遇到了一个空指针异常。
使项目编译(即
javax.servlet
为了成功导入),我必须转到项目的属性,在侧栏中选择项目facets,勾选dynamicwebmodule并单击apply。令人惊讶的是,这次“dynamicwebmodule”facet安装正确,导入开始工作。
7z5jn7bk13#
我们中的许多人通过maven项目在eclipse中开发。如果是这样,可以通过
tomcat-servlet-api
以及tomcat-jsp-api
罐。tomcat的每个版本都有一个。通常添加这些范围provided
到你的pom就足够了。这将使您的构建更具可移植性。如果将来升级tomcat,也只需更新这些jar的版本。
9cbw7uwe14#
确保您拥有正确的eclipse和服务器
确保至少为企业java开发人员(与企业一起)使用eclipseide。它包含用于创建动态web项目和轻松集成servletcontainers的开发工具(这些工具是web工具平台wtp的一部分)。如果您已经有了EclipseIDEforJava(没有enterprise),并且手动安装了一些相关的插件,那么很可能是没有正确完成。你最好把它扔掉,用真正的EclipseIDEforEnterpriseJavaOne。
您还需要确保您的计算机上已经安装了一个servletcontainer,它至少实现了与生产环境中的servletcontainer相同的ServletAPI版本,例如apache tomcat、oracle glassfish、jboss as/wildfly等。通常,只需下载zip文件并解压缩即可。对于tomcat,不要下载exe格式,这只适用于基于windows的生产环境。另请参阅a.o。本地主机上tomcat服务器所需的几个端口(8005、8080、8009)已经在使用中。
servletcontainer是ServletAPI的具体实现。请注意,oracle.com上下载的JavaEESDK基本上包含glassfish。因此,如果您碰巧已经下载了javaeesdk,那么您基本上已经有了glassfish。另外请注意,例如glassfish和jbossas/wildfly不仅仅是一个servlet容器,它们还支持jsf、ejb、jpa和所有其他javaee。另请参见a.o.什么是java ee?
在eclipse中集成服务器并将其与项目相关联
在您的计算机上安装了eclipse for enterprise java和servletcontainer之后,请在eclipse中执行以下步骤:
在eclipse中集成servletcontainer
答。通过服务器视图
打开底部框中的servers视图。
右键单击此处并选择“新建”>“服务器”。
选择适当的servletcontainer品牌和版本,并浏览向导。
b。或者,通过eclipse首选项
打开窗口>首选项>服务器>运行时环境。
您可以在此处添加、编辑和删除服务器。
将服务器与项目关联
答。在新项目中
打开左侧的项目导航器/资源管理器。
右键单击此处并选择“新建”>“项目”,然后在“菜单”“web”>“动态web项目”中。
在向导中,将目标运行时设置为集成服务器。
b。或者,在现有项目中
右键单击“项目”,然后选择“属性”。
在目标运行时部分,选择集成服务器。
无论哪种方式,eclipse都会在构建路径中自动获取servletcontainer的库。这样您就可以导入并使用servlet api。
不要随身携带松散的特定于服务器的jar文件
在任何情况下,您都不需要在项目的build path属性中胡来。最重要的是,不要手动复制/下载/移动/包含特定于servletcontainer的库,如
servlet-api.jar
,jsp-api.jar
,el-api.jar
,j2ee.jar
,javaee.jar
它只会导致未来的可移植性、兼容性、类路径和可维护性问题,因为当你的webapp被部署到一个不同品牌/版本的servletcontainer上时,它将无法工作,而这些库最初是从那里获得的。在使用maven的情况下,需要绝对确保目标运行时已经提供的特定于servletcontainer的库被标记为
<scope>provided</scope>
.这里有一些典型的例外情况,你可以得到当你乱扔垃圾
/WEB-INF/lib
甚至/JRE/lib
,/JRE/lib/ext
,etc使用servletcontainer特定的库来修复编译错误:java.lang.nullpointerexception位于org.apache.jsp.index\u jsp.\u jspinit
noclassdeffounderror:javax/el/elresolver
java.lang.nosuchfielderror:是\u目录
java.lang.nosuchmethoderror:javax.servlet.jsp.pagecontext.getelcontext()ljavax/el/elcontext;
java.lang.abstractmethoderror:javax.servlet.jsp.jspfactory.getjspapplicationcontext(ljavax/servlet/servletcontext;)ljavax/servlet/jsp/jspapplicationcontext;
org.apache.jasper.jasperexception:类型jspfactory的方法getjspapplicationcontext(servletcontext)未定义
java.lang.verifyerror:(类:org/apache/jasper/runtime/jspapplicationcontextimpl,方法:createelresolver签名:()ljavax/el/elresolver;)函数的参数不兼容
jar没装。参见servlet规范2.3,第9.7.2节。有问题的类:javax/servlet/servlet.class
fivyi3re15#
最重要的是,不要手动复制/下载/移动/包含特定于servlet容器的库,如servlet-api.jar
@巴卢斯克,
我更愿意使用我的应用程序将要使用的类,而不是eclipse提供的类(当我感觉自己像一个偏执的开发人员时)。
另一个解决方案是使用eclipse“configure build path”>libraries>addexternaljar,并添加选择使用的任何容器的servlet api。
并且在使用ant构建时遵循@kaustav datta的解决方案-具有类似tomcat.home或weblogic.home的属性。但是,它引入了另一个约束,即如果使用weblogic,开发人员必须在其本地计算机上安装weblogic!还有其他清洁剂吗?