请求的参数类型与取值方式

一.字符串

传:

在页面各个文本相关控件中输入数据,值均以字符串String形式,存在value中

<form action="test" method="post">
<input type="text" name="name" /> <br />
        <input type="text" name="age" /> <br />
        <input type="radio" name="gender" value="男"  checked="checked"/><input type="radio" name="gender" value="女"/><br />
        <input type="checkbox" name="favors" value="football"/>Football 
        <input type="checkbox" name="favors" value="book"/>book 
        <input type="checkbox" name="favors" value="java"/>java <br />
        <select name="city" multiple="multiple" size="5">
            <option value="1">北京</option>
            <option value="2">成都</option>
            <option value="3">重庆</option>
        </select>
        <input type="submit" value="提交" /> <br />
   </form>

取:

通过action属性找到对应的Servlet,在doGet()方法中通过HttpServletRequest参数取值

 getParameter,getParameterValues 返回值类型分别是String,String[ ]  因此这两个方法用来获取请求参数中的字符串类型的值

//使用注解表示该Servlet默认的请求路径
@WebServlet("/test")
public class HttpTest2 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       //getParameter方法得到请求中的值
        String name = req.getParameter("name");
        int age = Integer.parseInt(req.getParameter("age"));
        //如果一个标识有多个值,则使用getParameterValues
        String[] id = req.getParameterValues("id");
        System.out.println(name);
        System.out.println(age);
        for (String s:id){
            System.out.println(s);
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

二. 二进制

传:

在传输文件时使用二进制形式传递,当我们使用form表单上传文件时post请求的时候,需要在form表单中添加enctype="multipart/form-data"属性。

<form action="file" method="post" enctype="multipart/form-data">
        <input type="file" name="avatar"><br/>
        <input type="submit" value="提交">
    </form>

取:

通过req.getPart() 得到一个Part接口的实例,再通过调用这个实例中的方法,如getSubmittedFileName()得到文件名,write()保存文件到指定路径等

在传递文件时,servlet需要增加注解@MultipartConfig

@WebServlet("/file")
@MultipartConfig
public class HttpTest extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //调用getPart得到一个Part接口
        Part part = req.getPart("avatar");
        //接口中有若干方法
        String name = part.getSubmittedFileName();
        String suffix = name.substring(name.lastIndexOf("."));
        String path = req.getServletContext().getRealPath("/"); 
        System.out.println(path);
        String uuid = UUID.randomUUID().toString().replaceAll("-", "");
        part.write(path+uuid+suffix);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

 

posted @ 2020-06-29 22:34  木子李和三点水  阅读(1044)  评论(0编辑  收藏  举报