【问题标题】:The method getPart(String) is undefined for the type HttpServletRequestHttpServletRequest 类型的方法 getPart(String) 未定义
【发布时间】:2015-04-23 08:56:07
【问题描述】:

我一直在从事 Java Web 项目,我需要通过 JSP 页面上传图像并将其存储到 MySQL 数据库中。 我正在以多部分形式输入图像,该图像可用于 Servlet 3.0 或更高版本。

我一直在使用 getPart("image") 逐部分获取图像,但它向我显示以下错误: “HttpServletRequest 类型的方法 getPart(String) 未定义”

  • 我使用的服务器:Tomcat 7
  • 我正在使用的 IDE:Eclipse Luna

这里是sn-ps的代码:

ImageUploadServlet:

package com.nagarro.imagemanagementutility.controller;

import java.io.IOException;
import java.io.InputStream;

import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;

import com.nagarro.imagemanagementutility.util.Constants;

/**
* Servlet implementation class ImageUploadServlet
*/
@MultipartConfig(maxFileSize=Constants.MAX_FILE_SIZE)   // Upload image file     size upto 16 MB
public class ImageUploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

/**
 * @see HttpServlet#HttpServlet()
 */
public ImageUploadServlet() {
    super();
}

/**
 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
 */
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    InputStream inputStream = null;

    // obtains the upload image file in this multipart request
    Part imagePart = request.getPart("photo");
}

}

UserImageUtility.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
	pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Image Management Utility</title>
</head>
<body>
	<table border="1" align="center" width="900px">
		<tr>
			<td>
				<div align="center">
					<h3>Image Management Utility</h3>
				</div>
			</td>
		</tr>
		<tr>
			<td>
				<div>Please select an image file to upload (Max Size 1 MB)</div>
				&nbsp;
				<form action="ImageUploadServlet" method="post"
					enctype="multipart/form-data">
					<input type="file" name="image" size="50" />
					<div align="right">
						<input type="submit" name="sbtnSubmit" value="Submit" />
						<input type="button" name="btnCancel" value="Cancel" />
					</div>
				</form>
			</td>
		</tr>
	</table>
</body>
</html>

pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.nagarro</groupId>
	<artifactId>Assignment_4_ImageManagementUtility</artifactId>
	<packaging>war</packaging>
	<version>0.0.1-SNAPSHOT</version>
	<name>Assignment_4_ImageManagementUtility Maven Webapp</name>
	<url>http://maven.apache.org</url>

	<build>
		<finalName>Assignment_4_ImageManagementUtility</finalName>
		<pluginManagement>
			<plugins>
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-jar-plugin</artifactId>
					<configuration>
						<archive>
							<manifest>
								<addClasspath>true</addClasspath>
								<classpathPrefix>lib/</classpathPrefix>
								<mainClass>com.nagarro.imagemanagementutility.controller.ApplicationLauncher</mainClass>
							</manifest>
							<manifestEntries>
								<Class-Path>.</Class-Path>
							</manifestEntries>
						</archive>

						<finalName></finalName>
					</configuration>
				</plugin>
			</plugins>
		</pluginManagement>
	</build>

	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>3.8.1</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>servlet-api</artifactId>
			<version>3.0-alpha-1</version>
		</dependency>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>jstl</artifactId>
			<version>1.2</version>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>jstl</groupId>
			<artifactId>jstl</artifactId>
			<version>1.2</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>javax.servlet.jsp.jstl</groupId>
			<artifactId>jstl-api</artifactId>
			<version>1.2</version>
		</dependency>
		<dependency>
			<groupId>taglibs</groupId>
			<artifactId>standard</artifactId>
			<version>1.1.2</version>
		</dependency>
		<dependency>
			<groupId>javax.persistence</groupId>
			<artifactId>persistence-api</artifactId>
			<version>1.0.2</version>
		</dependency>
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-entitymanager</artifactId>
			<version>4.3.8.Final</version>
		</dependency>
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-core</artifactId>
			<version>4.3.8.Final</version>
		</dependency>
		<dependency>
			<groupId>postgresql</groupId>
			<artifactId>postgresql</artifactId>
			<version>9.1-901-1.jdbc4</version>
		</dependency>
		<!-- Hibernate uses slf4j for logging -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>1.7.10</version>
		</dependency>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.6</version>
		</dependency>
	</dependencies>
</project>

lib中的jar列表:

【问题讨论】:

  • 编译错误,对吗?如果是这样,请提供您的 pom.xml、build.gradle、lib/ 中的 jar 列表等——无论您使用什么进行依赖管理。
  • 嗨,我已经在 lib 中添加了 jar 列表。除此之外,我在外部添加了以下 jar:javax.servlet.jar、commons-fileupload-1.3.1.jar、commons-io-2.4.jar

标签: java jsp servlets jstl tomcat7


【解决方案1】:

您的类路径中有多个 Servlet API jar。 JSTL 太旧了,你的 pom.xml 中有一堆 JSTL 工件拉入旧的 servlet 版本。从您的 pom.xml 中删除 javax.servlet:jstljstl:jstljavax.servlet.jsp.jstl:jstl-api 并尝试以下操作:

<dependency>
    <groupId>org.glassfish.web</groupId>
    <artifactId>jstl-impl</artifactId>
    <version>1.2</version>
    <exclusions>
        <exclusion>
            <groupId>java.servlet</groupId>
            <artifactId>servlet-api</artifactId>
        </exclusion>
        <exclusion>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
        </exclusion>
    </exclusions>
</dependency>

附: Eclipse 将 Tomcat 的 jars 添加到类路径中,因此您可以根据需要从 pom.xml 中删除 java.servlet:servlet-api。如果你保留它,请添加&lt;scope&gt;provided&lt;/scope&gt; 否则Tomcat会抱怨。 servlet 容器负责提供 servlet 类,因此您不应该将它们包含在您的 WAR 中,尽管 Tomcat 足够聪明,可以避免它成为问题。

【讨论】:

  • 谢谢!对您的答案进行了一些修改,并且有效。我所做的是:我从 pom.xml 中删除了一个额外的 servlet 。它所指的版本是“3.0-alpha-1”,这是一个旧版本,不支持getPart(String)函数。
【解决方案2】:

方法

Part getPart(java.lang.String name) throws java.io.IOException, ServletException

HttpServletRequest Java EE 6 中可用,但在HttpServletRequest Java EE 5 中不可用。

确保您使用的是 Java EE 6。

【讨论】:

  • 嗨@antonio,我是Java EE 7。但它仍然会产生问题。
  • 我对 EE 7 也有同样的问题,找到了吗?
猜你喜欢
  • 2013-12-21
  • 2015-10-15
  • 1970-01-01
  • 2015-02-12
  • 1970-01-01
  • 2023-01-10
  • 1970-01-01
  • 2020-11-17
相关资源
最近更新 更多