对于类型HttpServletRequest,未定义方法getPart(String) [英] The method getPart(String) is undefined for the type HttpServletRequest

查看:111
本文介绍了对于类型HttpServletRequest,未定义方法getPart(String)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have been working on Java web project in which i need to upload an image through the JSP page and store it into a MySQL database. I'm entering the image in multiparts which is available for Servlet 3.0 or above.

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

I've been using the getPart("image") to get the image part by part but it's showing me the following error: "The method getPart(String) is undefined for the type 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>

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列表:

推荐答案

您的类路径上有多个Servlet API jar. JSTL非常流行,并且pom.xml中有一堆JSTL工件,其中包含了旧的Servlet版本.从pom.xml中删除javax.servlet:jstljstl:jstljavax.servlet.jsp.jstl:jstl-api,然后尝试以下操作:

You have more than one Servlet API jar on your classpath. JSTL is ooooold and you have a bunch of JSTL artifacts in your pom.xml pulling in old servlet versions. Remove javax.servlet:jstl, jstl:jstl, and javax.servlet.jsp.jstl:jstl-api from your pom.xml and try this instead:

<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容器的责任,因此,尽管Tomcat足够聪明,可以避免出现问题,但您不应将它们包含在WAR中.

P.S. Eclipse added Tomcat's jars to the class path so you can remove java.servlet:servlet-api from your pom.xml is you want. If you keep it, add <scope>provided</scope> or Tomcat will complain. It's the servlet container's responsibility to provide the servlet classes, so you shouldn't include them in your WAR, although Tomcat is smart enough to keep it from being a problem.

这篇关于对于类型HttpServletRequest,未定义方法getPart(String)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆