Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Servlet中获取表单值_Java_Jquery_Html_Ajax_Servlets - Fatal编程技术网

Java 在Servlet中获取表单值

Java 在Servlet中获取表单值,java,jquery,html,ajax,servlets,Java,Jquery,Html,Ajax,Servlets,我不熟悉servlet。我试图做的是使用servlet将文件上传到我的服务器,同时发送一个文本值,即要在服务器端更改的文件名。问题是我使用AJAXPOST将表单数据提交给servlet,但在我的servlet中,我从request.getParameter中获取空值 这是我的html $("#fileUp").html( "<form enctype='multipart/form-data' id='uploadForm' action='" + url + "/PrjHRServic

我不熟悉servlet。我试图做的是使用servlet将文件上传到我的服务器,同时发送一个文本值,即要在服务器端更改的文件名。问题是我使用AJAXPOST将表单数据提交给servlet,但在我的servlet中,我从request.getParameter中获取空值

这是我的html

$("#fileUp").html(  "<form enctype='multipart/form-data' id='uploadForm' action='" + url + "/PrjHRService/FileUpload'>"+
                        "<input name='file' id='file' type='file' size='50'>"+
                        "<input name='fname' type='text' >"+
                        "<input id='btnUpload' value='Upload' type='submit'>"+
                        //"<div id='imgLink'></div>"+
                        "</form>" );
这就是我从servlet中的表单获取值的方式;在这里,您将看到一行字符串fileExt=request.getParameter(“fname”);我发现fileExt是空的,这是我的问题

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException {
      // Check that we have a file upload request
      isMultipart = ServletFileUpload.isMultipartContent(request);
      response.setContentType("application/json");
      String fileExt=request.getParameter("fname");
      java.io.PrintWriter out = response.getWriter( );
      if( !isMultipart ){

         JSONObject o=new JSONObject();
          try {
            o.put("res", "false");
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
          out.println(o.toString());

         return;
      }
      DiskFileItemFactory factory = new DiskFileItemFactory();
      // maximum size that will be stored in memory
      factory.setSizeThreshold(maxMemSize);
      // Location to save data that is larger than maxMemSize.
      factory.setRepository(new File("c:\\temp"));

      // Create a new file upload handler
      ServletFileUpload upload = new ServletFileUpload(factory);
      // maximum file size to be uploaded.
      upload.setSizeMax( maxFileSize );

      try{ 
      // Parse the request to get file items.
      List fileItems = upload.parseRequest(request);

      // Process the uploaded file items
      Iterator i = fileItems.iterator();
      while ( i.hasNext () ) 
      {
         FileItem fi = (FileItem)i.next();
         if ( !fi.isFormField () )  
         {
            // Get the uploaded file parameters
            String fieldName = fi.getFieldName();
            String fileName = fi.getName();
            //String[] parts = fileName.split(".");
            //fileName = parts[0] + "." + parts[1];
            String contentType = fi.getContentType();
            boolean isInMemory = fi.isInMemory();
            long sizeInBytes = fi.getSize();
            // Write the file
            if( fileName.lastIndexOf("\\") >= 0 ){
               file = new File( filePath + 
               fileName.substring( fileName.lastIndexOf("\\"))) ;
            }else{
               file = new File( filePath + 
               fileName.substring(fileName.lastIndexOf("\\")+1)) ;
            }
            fi.write( file ) ;
            JSONObject o=new JSONObject();
            o.put("res", "true");
            //out.println("Uploaded Filename: " + fileName + "<br>");
            out.println(o.toString());
            //out.println("Uploaded Successfully");
         }
      }
     /* out.println("</body>");
      out.println("</html>");*/
   }catch(Exception ex) {
       System.out.println(ex);
   }
   }
public void doPost(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,java.io.IOException{
//检查我们是否有文件上传请求
isMultipart=ServletFileUpload.isMultipartContent(请求);
setContentType(“应用程序/json”);
字符串fileExt=request.getParameter(“fname”);
java.io.PrintWriter out=response.getWriter();
如果(!isMultipart){
JSONObject o=新的JSONObject();
试一试{
o、 put(“res”,“false”);
}捕获(JSONException e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
out.println(o.toString());
返回;
}
DiskFileItemFactory=新的DiskFileItemFactory();
//将存储在内存中的最大大小
factory.setSizeThreshold(maxMemSize);
//保存大于maxMemSize的数据的位置。
setRepository(新文件(“c:\\temp”);
//创建新的文件上载处理程序
ServletFileUpload upload=新的ServletFileUpload(工厂);
//要上载的最大文件大小。
upload.setSizeMax(maxFileSize);
试试{
//解析请求以获取文件项。
List fileItems=upload.parseRequest(请求);
//处理上载的文件项
迭代器i=fileItems.Iterator();
而(i.hasNext())
{
FileItem fi=(FileItem)i.next();
如果(!fi.isFormField())
{
//获取上传的文件参数
字符串fieldName=fi.getFieldName();
字符串文件名=fi.getName();
//String[]parts=fileName.split(“.”);
//文件名=部分[0]+“+”部分[1];
字符串contentType=fi.getContentType();
布尔值isInMemory=fi.isInMemory();
long-sizeInBytes=fi.getSize();
//写文件
如果(fileName.lastIndexOf(“\\”>)=0){
文件=新文件(文件路径+
fileName.substring(fileName.lastIndexOf(“\\”);
}否则{
文件=新文件(文件路径+
fileName.substring(fileName.lastIndexOf(“\\”+1));
}
fi.写入(文件);
JSONObject o=新的JSONObject();
o、 put(“res”,“true”);
//out.println(“上传的文件名:“+Filename+”
”; out.println(o.toString()); //out.println(“上传成功”); } } /*out.println(“”); out.println(“”)*/ }捕获(例外情况除外){ 系统输出打印项次(ex); } }
如果要上载文件,
方法
必须设置为
POST
。然后,在服务器端,您需要从请求中获取输入流并读取数据——您需要在
doPost
方法()中执行此操作。当然,有很多库都是由您提供的,例如来自apache的库

您必须记住,将
POST
enctype=“multipart/from data”
一起使用会将所有的表单参数添加到POST正文中,这与
enctype=“application/x-www-form-urlencoded”
中的参数连接到请求URL(即所谓的查询字符串)不同。方法
getParameter
仅对通过URL发送的参数有效。因此,在本例中,您需要读取POST数据,对其进行解析并找出
fname
的值。可能看起来像这样的帖子:

-----------------------------8022333619518
Content-Disposition: form-data; name="fname"

myfilename.txt
-----------------------------8022333619518
Content-Disposition: form-data; name="submit"

Send
-----------------------------8022333619518--
如果您手动向
action
URL添加一些参数,
getParameter
方法将找到它

由于您不上传任何文件(不是吗?),您可以将
enctype=“application/x-www-form-urlencoded”
设置为使用
getParameter
,因为它将所有表单的输入添加到URL。但是您的代码表明,您稍后将上载一个文件,因此它对文件内容不起作用

当您从Apache使用
ServletFileUpload
时,您可以看到方法,获取映射,然后获取
fname
参数(它应该是列表中的第一个元素)作为
FileItem
,并使用
getString
获取其内容。它应该是您正在寻找的:

Map<String, List<FileItem>> map = ServletFileUpload.parseParameterMap(request);
List<FileItem> list = map.get("fname");
if (list != null && list.size() >= 1) {
    FileItem item = list.get(0);
    System.out.println("And the winner is... " + item.getString);
}
else {
    System.out.println("Dammit! Still no luck!");
}
Map-Map=ServletFileUpload.parseParameterMap(请求);
List=map.get(“fname”);
if(list!=null&&list.size()>=1){
FileItem=list.get(0);
System.out.println(“获胜者是…”+item.getString);
}
否则{
System.out.println(“该死!还是不走运!”);
}

两者都带有POST。我可以上传文件,但无法获取文本输入的值,即“fname”。您能否提供处理该文件的servlet的
doPost
方法?另外,请检查我刚才在答案中放置的文档的链接。我刚刚添加了doPost方法。谢谢。是的,我在上传文件的同时我也在提交文本输入。所以
Map<String, List<FileItem>> map = ServletFileUpload.parseParameterMap(request);
List<FileItem> list = map.get("fname");
if (list != null && list.size() >= 1) {
    FileItem item = list.get(0);
    System.out.println("And the winner is... " + item.getString);
}
else {
    System.out.println("Dammit! Still no luck!");
}