Java 在JSP中执行多部分请求时获取参数

Java 在JSP中执行多部分请求时获取参数,java,jsp,servlets,Java,Jsp,Servlets,这是一段输入产品信息(标题、价格、7位数字、产品图像)的代码,当我想在servlet中获取'destination'参数时,获取的值为空,我知道这是因为多部分请求,但我如何获取此值和文件上载值?因为您使用多部分编码发布('multipart/form data')参数未按预期显示 例如,如果您使用的是FileItem对象,那么这些参数将以“isFormField”方法显示并可识别 coderanch上的thead解释了如何: 大多数(每个)现代网络框架都将其抽象出来,并使这类内容更容易实现。

这是一段输入产品信息(标题、价格、7位数字、产品图像)的代码,当我想在servlet中获取'destination'参数时,获取的值为空,我知道这是因为多部分请求,但我如何获取此值和文件上载值?

因为您使用多部分编码发布('multipart/form data')参数未按预期显示

例如,如果您使用的是FileItem对象,那么这些参数将以“isFormField”方法显示并可识别

coderanch上的thead解释了如何:

大多数(每个)现代网络框架都将其抽象出来,并使这类内容更容易实现。

代码

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();            
    String destination=request.getParameter("destination");
    out.print(destination);
}
protectedvoiddopost(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException{
试一试{
列表项=新建ServletFileUpload(新建DiskFileItemFactory()).parseRequest(请求);
用于(文件项:项){
if(item.isFormField()){
//处理常规表单字段(输入type=“text | radio | checkbox | etc”,选择等)。
字符串fieldname=item.getFieldName();
String fieldvalue=item.getString();
//…(在这里做你的工作)
}否则{
//处理表单文件字段(输入类型=“文件”)。
字符串fieldname=item.getFieldName();
字符串filename=FilenameUtils.getName(item.getName());
InputStream filecontent=item.getInputStream();
//…(在这里做你的工作)
}
}
}捕获(文件上载异常){
抛出新的ServletException(“无法解析多部分请求。”,e);
}
// ...
}

由于您使用多部分编码(“多部分/表单数据”)进行post,因此参数并不像您期望的那样出现

例如,如果您使用的是FileItem对象,那么这些参数将以“isFormField”方法显示并可识别

coderanch上的thead解释了如何:

大多数(每个)现代网络框架都将其抽象出来,并使这类内容更容易实现。

代码

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();            
    String destination=request.getParameter("destination");
    out.print(destination);
}
protectedvoiddopost(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException{
试一试{
列表项=新建ServletFileUpload(新建DiskFileItemFactory()).parseRequest(请求);
用于(文件项:项){
if(item.isFormField()){
//处理常规表单字段(输入type=“text | radio | checkbox | etc”,选择等)。
字符串fieldname=item.getFieldName();
String fieldvalue=item.getString();
//…(在这里做你的工作)
}否则{
//处理表单文件字段(输入类型=“文件”)。
字符串fieldname=item.getFieldName();
字符串filename=FilenameUtils.getName(item.getName());
InputStream filecontent=item.getInputStream();
//…(在这里做你的工作)
}
}
}捕获(文件上载异常){
抛出新的ServletException(“无法解析多部分请求。”,e);
}
// ...
}
使用注释

@多重配置

对于Servlet,请使用注释

@多重配置


对于你的Servlet

好的,我会试试这个,但是我也能得到'destination'输入值吗?这是一个多部分请求!!!你可以这样做…..看看我在代码块中更新的代码部分我已经评论过了看看包名是什么有'FilenameUtils'?你需要从下载支持的jar文件并将其添加到Library我已尝试了您的代码,但JSP服务器引发了HTTP状态500类型:状态报告消息:描述:服务器遇到内部错误()这使它无法满足此请求。好的,我将尝试此操作,但我也可以获取“destination”输入值吗?这是一个多部分请求!!!你可以这样做…..看看我在代码块中更新的代码部分我已经注释过了看看包名是什么有“FilenameUtils”?你需要下载支持的jar文件并将其添加到库我已尝试了您的代码,但JSP服务器引发了HTTP状态500类型:状态报告消息:描述:服务器遇到内部错误()这使它无法满足此请求。请检查此问题以了解详细信息它有您的所有答案请检查此问题以了解详细信息它有您的所有答案
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    try {
        List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
        for (FileItem item : items) {
            if (item.isFormField()) {
                // Process regular form field (input type="text|radio|checkbox|etc", select, etc).
                String fieldname = item.getFieldName();
                String fieldvalue = item.getString();
                // ... (do your job here)
            } else {
                // Process form file field (input type="file").
                String fieldname = item.getFieldName();
                String filename = FilenameUtils.getName(item.getName());
                InputStream filecontent = item.getInputStream();
                // ... (do your job here)
            }
        }
    } catch (FileUploadException e) {
        throw new ServletException("Cannot parse multipart request.", e);
    }

    // ...
}