美文网首页IT干货web小白的IT专场
Java Web之Servlet获取表单值

Java Web之Servlet获取表单值

作者: YungFan | 来源:发表于2016-03-24 13:13 被阅读2035次

    Java Web开发中,最常用的就是在后台获取前台的参数,经典的案例就是 JSP 表单传值到后台的 Servlet,然后在 doGet 或者 doPost 中获取,这里把常用参数获取总结一下

    • 一个典型的jsp表单如下
    <form action="WorldServlet" method="post" enctype="multipart/form-data">
     <!--普通文本框-->
    用户名:<input type="text" name="username"/><br/>
    密  码:<input type="password" name="pwd"/><br/>
     
    <!--多选框-->
    <input type="checkbox" name="v1" value="西瓜">西瓜
    <input type="checkbox" name="v1" value="苹果">苹果<br/>
     
    <!--单选框-->
    <input type="radio" name="sex"value="男"/>男
    <input type="radio" name="sex"value="女"/>女<br/>
     
    <!--隐藏的用处是提交数据,同时不影响界面-->
    <input type="hidden"value="123"name="sal"/>
     
    <!--选择列表-->
    选择你的出生地:
    <select name="bir">
    <option value="">--请选择--</option>
    <option value="bj">北京</option>
    <option value="sh">上海</option>
    <option value="cq">重庆</option>
    </select>
    <br/>
     
    <!--文本域-->
    请留言<br/>
    <textarea cols="30" rows="10" name="liuyan"></textarea><br/>
    
    <!--文件上传-->
    选择要上传的文件<br/>
    请选择文件:<input type="file" name="myfile"/><br/>
     
    <input type="submit" value="登录"/>  <input type="reset" value="重新填写"/><br/>
    </form>
    
    • 那么对应的Servlet应该怎么接收呢?对于上述的表单,应该在Servlet的doPost方法中进行参数的获取
    //获取文本框的值
    String username = request.getParameter("username");
    //获取多选框的值这里获取的是选中的多选框的value属性对应的值而不是页面显示的值
    String[] fruit = request.getParameterValues("v1");
    //获取单选框的值这里获取的是选中的单选框的value属性对应的值而不是页面显示的值
    String sex = request.getParameter("sex");
    //获取下拉列表的值这里获取的是选中的option的value属性对应的值而不是页面显示的值
    String select = request.getParameter("bir");
    //获取文本域的值
    String liuyan = request.getParameter("liuyan");
    
    //文件上传 
    //首先要在Servlet上用 @MultipartConfig 标识支持文件上传
    //存储路径 在 WebContent 下新建一个 fileupload 文件夹
    String storePath = request.getServletContext().getRealPath("/fileupload");
    //获取part对象 参数为name属性的值           
    Part part = request.getPart("myfile");
    //Servlet3没有提供直接获取文件名的方法,需要从请求头中解析出来
    //获取请求头
    String header = part.getHeader("content-disposition");
    //获取文件名
    String fileName = header.substring(header.lastIndexOf("=") + 2, header.length() - 1);;
    //把文件写到指定路径
    part.write(storePath + File.separator + fileName);
    
    //多文件上传
    String storePath = request.getServletContext().getRealPath("/fileupload");
    for (Part part : request.getParts())
    {
      if("myfile".equals(part.getName()))
      {
       String header = part.getHeader("content-disposition");
       String fileName = header.substring(header.lastIndexOf("=") + 2, header.length() - 1);;
       part.write(storePath+File.separator+fileName);}
      }
    }
    
    //文件下载
    String filepath = "D://XXXX.jpg";
    //解决中文下载文件名乱码
    String filename = new String("XXXX.jpg".getBytes("UTF-8"), "ISO8859-1");
    BufferedInputStream bi = new BufferedInputStream(new FileInputStream(new File(filepath)));  
    OutputStream os = response.getOutputStream();   
    //指定头部信息
    response.setHeader("Content-Disposition", "attachment; filename=\\"" + filename + "\\"");
    //指定 setContentType 下载时会弹出对话框
    response.setContentType("application/x-msdownload");  
    byte buffer[] = newbyte[1024]; 
    int size; 
    while ((size = bi.read(buffer, 0, buffer.length)) != -1) 
    {
         os.write(buffer, 0, size);
    }
    bi.close();
    os.close();
    

    相关文章

      网友评论

      • Wizey:按照你的写表单提交出现500错误
      • 249e97ae4863:您好 我想問個問題,如果是從APP傳送到Servlet要怎麼改寫呢?
        249e97ae4863:@YungFan 要怎麼使用呢?
        YungFan:@奈葉 那要用http
      • 顾小翊:赞
        YungFan:@顾小翊 :pray:
      • 7ae296c72b2e:不错,加固一下知识点。
      • liuzhongwei:小白一个,想问个问题,有些时候判断参数非空,非数字,在servlet判断,还是在service判断。。。很纠结
        YungFan:@liuzhongwei 我觉得对应的属性肯定就是复合对象,对象里面还有其他对象
        liuzhongwei:@YungFan 查询结果中使用聚合的列,怎么封装不到对象里。其他的都能装到,只有使用了聚合的列不行
        YungFan:@liuzhongwei 个人觉得不应该放在service层
      • 上善若水_君莫笑:加油!
        YungFan:@开心快乐359 谢谢

      本文标题:Java Web之Servlet获取表单值

      本文链接:https://www.haomeiwen.com/subject/cojrlttx.html