servlet_request方法简单应用小结

来源:互联网 发布:js控制embed视频播放 编辑:程序博客网 时间:2024/06/06 00:10

一、请求头信息

 方法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>


0 0
原创粉丝点击