我不知道为什么它不起作用。我试图在我的 servlet 中接受 multipart-formdata 但request.getPart("")
没有显示。我正在使用 glassfish 3.1.2 服务器。使用的 Tha 框架是用于开发应用程序的 vaadin。谁能帮我解决这个问题?
7 回答
假设您的具体问题确实是您的 IDE 没有getPart()
在自动完成时显示该方法,那么这只能意味着该项目未配置为与 Servlet 3.0 兼容的项目。该方法即在 Servlet 3.0 中引入。
您没有告诉任何关于您正在使用的 IDE 的任何信息,并且您的问题历史也没有提供任何线索,所以让我们假设它是 Eclipse,它被广泛使用。在这种情况下,您需要在 2 个位置对其进行配置,前提是您已将动态 Web 项目与 Servlet 3.0 兼容容器作为项目属性中的目标运行时正确关联(否则HttpServletRequest
根本不会编译):
在项目属性的Project Facets部分中,动态 Web 模块版本必须设置为 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>
我有同样的问题。这就是我最终发现的问题。我依赖于:
<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>
maven.. pom.xml.. 修改这个依赖
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
</dependency>
servlet api 2.5 不起作用
对于那些后来偶然发现的人,如果 BalusC 建议的解决方案不能为您解决问题,请检查provided
运行时与服务器运行时不匹配的库的构建路径。
例如,如果您的 Mavenpom.xml
包含提供类似这样的 java EE 库的条目...
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>javaee-api</artifactId>
<version>5.0-1</version>
<scope>provided</scope>
</dependency>
...它们可能会干扰您的 IDE 所认为的运行时环境,该运行时环境将用于提供代码完成建议。
跟踪问题的最简单方法是找出HttpServletRequest
类的来源。
我有同样的问题,我想与你分享,以防其他人遇到同样的问题:
就我而言,我有一个自动下载的 j2ee.jar,它的版本可能很旧。它位于 Libraries --> j2ee Runtime Library 下(stackoverflow 不允许我在 eclipse 中添加图像 - 在 Project Explorer 中 - 展开项目 --> Java Resources --> 库 --> J2ee Runtime Library --> j2ee.jar)
我去了这个文件所在的文件系统(你在eclipse中的文件旁边有这个位置)并用一个更新的jar替换了它。你可以从这里拿罐子。
然后清理并重建项目。
正如 Bjørn 的回答中所指出的,一个可能的原因是一个相互冲突的工件servlet-api (Servlet 2.5 spec)。就我而言,就是这种依赖
<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>
嗨朋友们,我也遇到了类似的问题,我会告诉你我做了什么。
我正在使用 eclipse juno 和 Tomcat 7 服务器。确保使用最新的 servlet API jar。Tomcat 7 将仅支持动态模块版本 2.5 不超过该版本。所以使用更高版本的Tomcat或更低的动态模块版本就可以了。
还有一件事:打开您的 servlet api jar 并查看它是否包含“Part”,您可以轻松检查它。