您的位置:首页 > 产品设计 > UI/UE

servlet_request方法简单应用小结

2016-09-12 22:09 363 查看
一、请求头信息

 方法1:getHeader

//获取请求的头信息的方法

//        String value = request.getHeader("User-Agent");

       //判断浏览器类型

       if(value.toLowerCase().contains("msie"))

            System.out.println("你使用的是ie浏览器");

        else if(value.toLowerCase().contains("firefox"))

            System.out.println("你使用的是火狐浏览器");

        else if(value.toLowerCase().contains("chrome"))

            System.out.println("你使用的是谷歌浏览器");

        

 方法2:getHeaderNames()

        Enumeration enu = request.getHeaderNames();

        while(enu.hasMoreElements())

        {

            String  name = (String) enu.nextElement();

            String  v = request.getHeader(name);

            System.out.println(name+":"+v);

        }

 方法3:getHeaders

        //头信息中的name 是可以重复的,这个方法用来得到该名称的所有的值

        //Enumeration en = request.getHeaders("accept");

二、消息体(表单基于post方式)

方法1:getParameter与getParameterValues前者获取表单某一个值后者获取多个值,返回一个数组

      //告诉服务器客户端使用的编码,以post方式提交表单数据的乱码问题

        request.setCharacterEncoding("utf-8");

        //得到用户名--表单中的数据默认都是字符串的

        String username = request.getParameter("username");

        //得到密码

        String psw = request.getParameter("pwd");

        //得到性别

        String sex = request.getParameter("sex");

        

        //得到爱好

        String[] hobbys = request.getParameterValues("hobby");

        

        //得到所在城市

        String city = request.getParameter("city");

        

        System.out.println(username+"  "+psw+"  "+sex+"   "+city);

        for(String ss:hobbys)

        {

            System.out.print(ss+"   ");

        }

方法2:getParameterNames()

        request.setCharacterEncoding("utf-8");

        Enumeration en = request.getParameterNames();//得到所有的name

        while(en.hasMoreElements())

        {

            String name = (String) en.nextElement();//得到一个参数名

            //根据名字获取值

            String[] values = request.getParameterValues(name);

            System.out.print(name);

            for(int i=0;values!=null && i<values.length;i++)

            {

                System.out.print(values[i]+"  ");

            }

            System.out.println();

        }

方法3:Map<String,String[]>getParameterMap-->PropertyDescriptor

       try {

            request.setCharacterEncoding("utf-8");

           //getParameterMap的使用

            Map<String,String[]> maps = request.getParameterMap();//一次性得到表单上提交过来的所有名称值对儿

            User user = new User();

          

            //遍历Map集合

           for(Map.Entry<String, String[]> en:maps.entrySet())// username=冬冬

            {

                String name = en.getKey();//得到键 username

                String[] value = en.getValue();//得到值

               

                //属性描述器  getUsername()  setUsername()---Method

                PropertyDescriptor des = new PropertyDescriptor(name, User.class);

               

                //从属性描述器中得到set方法

                Method m = des.getWriteMethod();

               

                //执行 set方法

                if(value.length==1)

                    m.invoke(user, value[0]);

                else

                    m.invoke(user, (Object)value);

            }

           

            System.out.println(user);

           

        } catch (Exception e) {

           

            e.printStackTrace();

        }

//一种同功能比较简单的方式 使用commons-beanutils.jar和commons-logging.jar

    try {

            request.setCharacterEncoding("utf-8");

            User user = new User();

            BeanUtils.populate(user, request.getParameterMap());

            System.out.println(user);

            

        } catch (IllegalAccessException e) {

            e.printStackTrace();

        } catch (InvocationTargetException e) {

            e.printStackTrace();

        }

方法4:getInputStream()获取表单提交的数据

            ServletInputStream in = request.getInputStream();

            int len = 0;

            byte[] arr = new byte[1024];

            while((len = in.read(arr))!=-1)

            {

                System.out.println(new String(arr,0,len));

                System.out.println(URLDecoder.decode(new String(arr,0,len,"utf-8"), "utf-8"));

            }

            in.close();

三、以get方式提交表单数据的乱码处理---再编码,再解码

          //获取用户名

          String name = request.getParameter("username");

          //再编码

          byte[] arr = name.getBytes("ISO8859-1");

          //再解码

          String ss = new String(arr,"utf-8");

          //String ss = fun(name);

          System.out.println(ss);

我们也可以将其封装为一个函数

    public String fun(String str)

    {

        String result = "";

        try {

            result = new String(str.getBytes("ISO8859-1"),"utf-8");

        } catch (UnsupportedEncodingException e) {

            e.printStackTrace();

        }

        return result;

    } 

四、请求转发与请求重定向

//请求转发

       System.out.println("demo1---我没钱,我招Demo8借");

        //request也是一个域对象

        request.setAttribute("hello", "java");//ServletContext----域对象

        //请求Demo2:带着 request和 response对象转到demo8

        request.getRequestDispatcher("/servlet/demo2").forward(request, response);

        //不能转到其它应用

        //request.getRequestDispatcher("http://www.baidu.com").forward(request, response);

        System.out.println("demo1---给你钱");

//请求重定向

        response.sendRedirect(request.getContextPath()+"/servlet/demo2");

        response.sendRedirect("http://www.baidu.com");

        System.out.println("demo1---给你钱");

demo2中请求转发

        response.setContentType("text/html;charset=utf-8");

        //使用的request和 response对象是  demo7传过来的

        String v = (String) request.getAttribute("hello");

        System.out.println(v+"   ,demo8--我借给你钱");

 请求转发   在服务器端执行的 地址栏只显示一个地址   客户端只请求了一次   地址不用写应用名  不能转到其它应用

  请求重定向  在客户端执行的  地址栏先后显示2个地址  客户端请求了2次  地址需要写应用名  可以转到其它应用

附1:新建User entity实体类,封装表单属性

    private String username;

    private String pwd;

    private String sex;

    private String[] hobby;

    private String city;

附2:为方便大家学习,此处贴出html代码

      <form action="/request/servlet/demo" method="get">

        用户名:<input type="text" name="username"><br/><br/>

        密码:<input type="password" name="pwd"><br/><br/>

        性别:<input type="radio" name="sex" value="男">男<input type="radio" name="sex" value="女">女<br/><br/>

        

        爱好:

        <input type="checkbox" name="hobby" value="吃">吃

        <input type="checkbox" name="hobby" value="睡">睡

        <input type="checkbox" name="hobby" value="玩">玩<br/><br/>

        

        所在城市:

        <select name="city">

            <option>--请选择--</option>

            <option value="北京">北京</option>

            <option value="上海">上海</option>

            <option value="深圳">深圳</option><br/><br/>

        </select>

        <input type="submit" value="注册">

        </form>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息