无法通过POST请求获取参数

时间:2014-05-06 10:00:14

标签: java jsp servlets nullpointerexception

想要在服务器上扩展上传文件的模块。项目的骨架得到here。除了图片想要创建它们的缩略图。缩略图的大小在jsp页面上选择并发送到servlet。问题是我无法通过request.getParameter("name")获取该参数。请指点我,我在哪里傻瓜。

JSP (我认为这就够了)

<form action="upload" method="post" enctype="multipart/form-data">
    <input type="file" name="file" multiple id="file" onchange="check('file')"/><br>
    <div id="set_thumbnail" style="display: none;">
        <input type="checkbox" name="thumbnail" id="thumbnail" onclick="setVisible('thumbnail','sizeThumbnailInput')"/>
        <label>Create thumbnail</label>
    </div>
    <select id="sizeThumbnailInput" name="sizeThumbnail" style="display: none">
        <option value="0">SMALL(max 100x100px)</option>
        <option value="1">MEDIUM(max 250x250px)</option>
        <option value="2">BIG(max 620x620px)</option>
    </select><br>
    <input type="submit" value="upload" />
</form>

的Servlet

public class FileUploadHandler extends HttpServlet {
private final String UPLOAD_DIRECTORY = "g:\\point";
private boolean thumbnail;

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    String path1 = "";
    String path2= "";
    String path = "";
    if (request.getParameter("thumbnail")!= null & request.getParameter("thumbnail").equals("on")){
        thumbnail = true;
    }
    //process only if its multipart content
    if(ServletFileUpload.isMultipartContent(request)){
        try {
            List<FileItem> multiparts = new ServletFileUpload(
                    new DiskFileItemFactory()).parseRequest(request);
            for(FileItem item : multiparts){
                System.out.println(item.getFieldName());
                if(!item.isFormField()){
                    String name = new File(item.getName()).getName();
                    if (item.getName().length() < 3 || item.getSize() < 3){
                        request.setAttribute("message", "File is wrong or not assigned.");
                        request.getRequestDispatcher("/index.jsp").forward(request, response);
                        return;
                    }
                    path1 = UPLOAD_DIRECTORY + File.separator + name;
                    item.write( new File(path1));
                    if (thumbnail){
                        path2 = UPLOAD_DIRECTORY + File.separator + "thumbnail_" + item.getName();
                        ResizePicture resPicture = new ResizePicture(path1, path2, ResizePicture.PictureTemplate.SMALL_IMAGE);
                        resPicture.resize();
                    }
                    path = path1 + "\n" + path2;
                }
            }
            request.setAttribute("message", "File Uploaded Successfully\n" + path);
        } catch (Exception ex) {
            request.setAttribute("message", "File Upload Failed due to " + ex);
            ex.printStackTrace();
        }
    }else{
        request.setAttribute("message",
                "Sorry this Servlet only handles file upload request");
    }
    request.getRequestDispatcher("/index.jsp").forward(request, response);
}
}

java.lang.NullPointerException被抛出

if (request.getParameter("thumbnail")!= null & request.getParameter("thumbnail").equals("on")){

3 个答案:

答案 0 :(得分:4)

如果您执行condition1 & condition2,则始终会评估两个条件(因此在您的示例中,参数“thumbnail”可以是null)。您必须使用condition1 && condition2,因为只有在condition2condition1时才会评估true

此致

答案 1 :(得分:0)

您正在使用&的上述答案中已经提到了NPE的原因,因此将评估这两个条件。用&&替换它将解决问题。

您也可以使用替代方案,以避免NPE和!= null检查,

if ( "on".equals(request.getParameter("thumbnail")) ) {
    // Do the rest.
}

答案 2 :(得分:0)

有两种可能的机会

  • 第一件事是你可能没有将数据发送到缩略图提交的servlet
  • 如果request.getParameter()方法返回null值,则单个&amp;永远不会工作,因为 返回的值为null,并且您正在尝试执行.equals操作,因此显而易见的是它会抛出nullpointer异常,如果字符串为null,则不允许您执行所有操作