对于HttpServletRequest类型,未定义方法getPart(String)

时间:2015-02-21 18:59:19

标签: java jsp servlets jstl tomcat7

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

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

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

以下是代码段:

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>
&#13;
&#13;
&#13;

的pom.xml:

&#13;
&#13;
<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>
&#13;
&#13;
&#13;

lib中的jar列表: The list of jars in the lib

2 个答案:

答案 0 :(得分:2)

您的类路径上有多个Servlet API jar。 JSTL是ooooold,你的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>

P.S。 Eclipse将Tomcat的jar添加到类路径中,因此您可以从pom.xml中删除java.servlet:servlet-api。如果你保留它,添加<scope>provided</scope>或Tomcat会抱怨。这是servlet容器提供servlet类的责任,因此你不应该将它们包含在WAR中,尽管Tomcat足够智能以防止它出现问题。

答案 1 :(得分:0)

方法

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

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

确保您使用的是Java EE 6.