我不知道为什么它不起作用。
我试图在我的servlet中接受multipart-formdata,但request.getPart("")
没有显示。我正在使用glassfish 3.1.2服务器。使用的Tha框架是用于开发应用程序的vaadin。任何人都可以帮我解决这个问题吗?
答案 0 :(得分:5)
假设您的具体问题确实是您的IDE未在自动完成时显示getPart()
方法,那么这只能意味着该项目未配置为与Servlet 3.0兼容的项目。 That method was namely introduced in Servlet 3.0
你没有说出你正在使用哪个IDE,你的问题历史也没有提供任何线索,所以让我们假设它是相当广泛使用的Eclipse。在这种情况下,您需要在2个位置配置它,前提是您已将 Dynamic Web Project 与Servlet 3.0兼容容器正确关联为项目属性中的 Targeted Runtimes (否则HttpServletRequest
和consorts根本不会编译):
在项目属性的 Project Facets 部分中, Dynamic Web Module 版本必须设置为3.0。
如果您的IDE生成了/WEB-INF/web.xml
文件,那么您需要确保其<web-app>
根声明也与Servlet 3.0匹配,否则它在运行时仍然会失败。
<?xml version="1.0" encoding="UTF-8"?>
<web-app
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
</web-app>
答案 1 :(得分:1)
maven .. pom.xml ..修改此依赖
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
</dependency>
servlet api 2.5无法正常工作
答案 2 :(得分:1)
我遇到了同样的问题。这对我来说最终成了问题。我依赖:
<dependency>
<groupId>com.googlecode.jsontoken</groupId>
<artifactId>jsontoken</artifactId>
<version>1.1</version>
</dependency>
事实证明,jsontoken依赖于servlet-api 2.5。所以解决这个问题的原因很简单:
<dependency>
<groupId>com.googlecode.jsontoken</groupId>
<artifactId>jsontoken</artifactId>
<version>1.1</version>
<exclusions>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</exclusion>
</exclusions>
</dependency>
答案 3 :(得分:0)
对于那些稍后偶然发现的人,如果BalusC建议的解决方案无法为您解决问题,请检查运行时与服务器运行时不匹配的provided
库的构建路径。
例如,如果你的maven pom.xml
包含提供类似java EE库的条目......
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>javaee-api</artifactId>
<version>5.0-1</version>
<scope>provided</scope>
</dependency>
...它们可能会干扰您的IDE所认为的运行时环境,它将用于提供代码完成建议。
跟踪问题的最简单方法是确定HttpServletRequest
类的来源。
答案 4 :(得分:0)
我遇到了同样的问题,我希望与你分享,以防其他人遇到同样的问题:
在我的情况下,我有一个自动下载的j2ee.jar,其版本可能已经过时了。它位于图书馆 - &gt; j2ee运行时库(stackoverflow不允许我在eclipse中添加图像 - 在Project Explorer中 - 展开项目 - &gt; Java资源 - &gt;库 - &gt; J2ee运行时库 - &gt; j2ee.jar)
我去了这个文件所在的文件系统(你在eclipse中有文件旁边的位置)并用一个较新的jar替换它。您可以从here获取jar。
然后清理并重建项目。
答案 5 :(得分:0)
Bjørn的答案指出,可能的原因之一是工件 servlet-api(Servlet 2.5规范)冲突。 就我而言,就是这种依赖性
<groupId>com.google.api-client</groupId>
<artifactId>google-api-client-appengine</artifactId>
<version>1.30.10</version>
要找出哪个依赖项会编译冲突的库,只需使用以下命令构建并打印依赖项树:
mvn org.apache.maven.plugins:maven-dependency-plugin:2.10:tree -Dverbose=true
部分输出:
最后从依赖项中排除工件
<dependency>
<groupId>com.google.api-client</groupId>
<artifactId>google-api-client-appengine</artifactId>
<version>1.30.10</version>
<exclusions>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</exclusion>
</exclusions>
</dependency>
答案 6 :(得分:-1)
朋友们,我也遇到过simillar问题,我会告诉你我做了什么。
我使用的是eclipse juno和Tomcat 7服务器。确保使用最新的servlet API jar。 Tomcat 7仅支持不超过动态模块版本2.5。因此,使用更高级的Tomcat版本或更低的动态模块版本,它将起作用。
还有一件事:打开你的servlet api jar,看它是否包含&#34; Part&#34;你可以轻松检查它。