Java EE-@MultipartConfig不起作用
我有一个.jsp文件,它通过表单向servlet发送一个Java EE-@MultipartConfig不起作用,java,jakarta-ee,java-ee-7,Java,Jakarta Ee,Java Ee 7,我有一个.jsp文件,它通过表单向servlet发送一个多部分/表单数据,当我将请求传递给servlet时(从action属性),我尝试获取request.getParts(),我得到无法处理部分,因为没有提供多部分配置错误。请注意,启动.jsp文件时,即使在尝试按表单上载数据之前,我也会收到相同的消息。因此,问题可能出在.jsp文件中。我在servlet上使用了@MultipartConfig,但它不起作用 这是我的DisplayAlbum.jsp <%@page contentType
多部分/表单数据
,当我将请求传递给servlet时(从action属性),我尝试获取request.getParts()
,我得到无法处理部分,因为没有提供多部分配置
错误。请注意,启动.jsp文件时,即使在尝试按表单上载数据之前,我也会收到相同的消息。因此,问题可能出在.jsp文件中。我在servlet上使用了@MultipartConfig,但它不起作用
这是我的DisplayAlbum.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<title>Photo Album</title>
<head></head>
<jsp:useBean id="photoHandleBean" class="src.PhotoHandleBean"/>
<body>
<div>
<form method="post" action="/RequestServlet" enctype="multipart/form-data">
<input type="file" name="image">
<input type="text" name="txt">
<input type="submit" value="Update">
</form>
</div>
</body>
</html>
相册
RequestServlet类
package src;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
@WebServlet(name="RequestServlet" ,urlPatterns="/RequestServlet")
@MultipartConfig
public class RequsetServlet extends HttpServlet{
@Override
public void doGet(HttpServletRequest rq, HttpServletResponse rs) throws ServletException, IOException{
PhotoAlbum pa = PhotoAlbum.getAlbum(rq.getSession());
if(rq.getContentType() != null && rq.getContentType().contains("multipart/form-dasta")) {
System.out.println("osdjfosdj");
ByteArrayOutputStream baos = new ByteArrayOutputStream();
InputStream input = null;
String filename = "";
for(Part p: rq.getParts()) {
input = p.getInputStream();
int c = 0;
while((c = input.read()) != -1) {
baos.write(c);
}
filename = p.getSubmittedFileName();
}
input.close();
baos.close();
System.out.println(baos.toByteArray()+"<<<");
pa.addPhoto(baos.toByteArray(), filename);
}
RequestDispatcher rd = getServletContext().getRequestDispatcher("/DisplayAlbum.jsp");
rd.forward(rq, rs);
}
@Override
public void doPost(HttpServletRequest rq, HttpServletResponse rs) throws ServletException, IOException{
doGet(rq, rs);
}
}
包src;
导入java.io.ByteArrayOutputStream;
导入java.io.IOException;
导入java.io.InputStream;
导入javax.servlet.RequestDispatcher;
导入javax.servlet.ServletException;
导入javax.servlet.annotation.MultipartConfig;
导入javax.servlet.annotation.WebServlet;
导入javax.servlet.http.HttpServlet;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
导入javax.servlet.http.Part;
@WebServlet(name=“RequestServlet”,urlPatterns=“/RequestServlet”)
@多重配置
公共类RequsetServlet扩展了HttpServlet{
@凌驾
public void doGet(HttpServletRequest rq、HttpServletResponse rs)抛出ServletException、IOException{
PhotoAlbum pa=PhotoAlbum.getAlbum(rq.getSession());
if(rq.getContentType()!=null&&rq.getContentType()包含(“多部分/表单数据存储”)){
System.out.println(“osdjfosdj”);
ByteArrayOutputStream bas=新的ByteArrayOutputStream();
InputStream输入=null;
字符串filename=“”;
对于(第p部分:rq.getParts()){
输入=p.getInputStream();
int c=0;
而((c=input.read())!=-1){
编写(c);
}
filename=p.getSubmittedFileName();
}
input.close();
baos.close();
System.out.println(baos.toByteArray()+“我看到一个打字错误getContentType().contains(“多部分/表单数据”)
应该是getContentType().contains(“多部分/表单数据”)
这只是我发帖时的一个键入错误。在实际代码中,这是正确编写的。我发现了问题,并且是我使用的应用程序服务器的问题。谢谢
package src;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.Stateful;
import javax.servlet.http.HttpSession;
public class PhotoAlbum {
private List<String> filename = new ArrayList<String>();
private List<byte[]> imageFile = new ArrayList<byte[]>();
public static PhotoAlbum getAlbum(HttpSession session) {
if(session.getAttribute("album") == null) {
PhotoAlbum pa = new PhotoAlbum();
session.setAttribute("album", pa);
}
return (PhotoAlbum) session.getAttribute("album");
}
public List<byte[]> getImages(){
return this.imageFile;
}
public int getCount() {
return imageFile.size();
}
public void addPhoto(byte[] photoByte, String filename) {
imageFile.add(photoByte);
this.filename.add(filename);
}
}