• Servlet(四):request和response对象


    Request对象:
    问题:

      浏览器发起请求到服务器,会遵循HTTP协议将请求数据发送给服务器。 那么服务器接受到请求的数据改怎么存储呢?不但要存,而且要保证完成性。

    解决:

      使用对象进行存储,服务器每接受一个请求,就创建一个对象专门的存 储此次请求的请求数据。

    实现:

       request对象

    解释:

      服务器接收到浏览器的请求后,会创建一个Request对象,对象中 存储了此次请求相关的请求数据。服务器在调用    Servlet时会将创建的 Request对象作为实参传递给Servlet的方法,比如:service方法。

    使用:

       获取请求头数据

           req.getMethod();//获取请求方式
           req.getRequestURL();//获取请求URL信息
           req.getRequestURI();//获取请求URI信息

           req.getScheme();//获取协议

            获取请求行数据

              req.getHeader("键名");//返回指定的请求头信息
           req.getHeaderNames();//返回请求头的键名的枚举集合

       获取用户数据

           req.getParameter("键名");//返回指定的用户数据
           req.getParameterValues("键名");//返回同键不同值的请求数据(多选),返回的数组。
           req.getParameterNames()//返回所有用户请求数据的枚举集合

     注意:
        request对象由tomcat服务器创建,并作为实参传递给处理请求的servlet的service方法。

    public class RequestServlet extends HttpServlet {
        @Override
        protected void service(HttpServletRequest req, HttpServletResponse resp)
                throws ServletException, IOException {
            //获取请求头数据
                    //获取请求方式
                        String method = req.getMethod();
                        System.out.println(method);
                    //获取请求URL
                        StringBuffer url=req.getRequestURL();
                        System.out.println(url);
                        //获取URI
                        String uri=req.getRequestURI();
                        System.out.println(uri);
                    //获取协议
                        String h=req.getScheme();
                        System.out.println(h);
            //获取请求行数据
                        //获取指定的请求行信息
                        String value=req.getHeader("aaa");
                        System.out.println(value);
                        //获取所有的请求行的键的枚举
                        Enumeration e = req.getHeaderNames();
                        while(e.hasMoreElements()){
                            String name=(String) e.nextElement();
                            String value2=req.getHeader(name);
                            System.out.println(name+":"+value2);
                        }
            //获取用户数据
                        String name=req.getParameter("uname");
                        String pwd=req.getParameter("pwd");
                        System.out.println(name+":"+pwd);
                        //String fav=req.getParameter("fav");
                        String[] favs=req.getParameterValues("fav");
                        if(favs!=null){
                            for(String fav:favs){
                                System.out.println(fav);
                            }
                        }
                        //获取所有的用户请求数据的键的枚举集合---req.getParameterNames()    
        }
    }

    Response对象:

    问题:

      在使用Request对象获取了请求数据并进行处理后,处理的结果如何显 示到浏览器中呢?

    解决:

      使用Response对象

    解释:

      服务器在调用指定的Servlet进行请求处理的时候,会给Servlet的方 法传递两个实参request和response。其中request中封存了请求相关的 请求数据,而response则是用来进行响应的一个对象。

    使用:

      设置响应头

          setHeader(String name,String value);//在响应头中添加响应信息,但是同键会覆盖

          addHeader(String name,String value);//在响应头中添加响应信息,但是不会覆盖。

      设置响应编码格式  

          sendError(int num,String msg);//自定义响应状态码。

      设置响应实体

           resp.getWrite().write(String str);//响应具体的数据给浏览器

      设置响应编码格式:
          resp.setContentType("text/html;charset=utf-8");

    public class ResponseServlet extends HttpServlet {
        @Override
        protected void service(HttpServletRequest req, HttpServletResponse resp)
                throws ServletException, IOException {
                //获取请求信息
                    //获取请求头
                    //获取请求行
                    //获取用户数据
                //处理请求
                    
                //响应处理结果
                    //设置响应头
                    resp.setHeader("mouse", "two fly birds");
                    resp.setHeader("mouse", "bjsxt");
                    resp.addHeader("key", "thinkpad");
                    resp.addHeader("key", "wollo");
                    //设置响应编码格式
                        //resp.setHeader("content-type", "text/html;charset=utf-8");
                        //resp.setContentType("text/plain;charset=utf-8");
                        //resp.setContentType("text/xml;charset=utf-8");
                        resp.setContentType("text/html;charset=utf-8");
                    //设置响应状态吗
                        //resp.sendError(404, "this Method is not supported");
                    //设置响应实体
                        resp.getWriter().write("<b>今天天气真好,适合学习</b>");
                    
                    
        }
    }

    请求乱码问题解决:

    使用String进行重新编码:

      uname=new String(uname.getBytes("iso8859-1"),"utf-8");

    Get方式请求:

      在service方法中使用: req.setCharacterEncoding(“utf-8”);

      在tomcat服务器目录下的conf文件下找到server.xml文件,打开进 行如下配置:


    Post方式请求:

      在service方法中使用: req.setCharacterEncoding(“utf-8”);

     

    Servlet的使用流程:

      设置请求编码格式

      设置响应编码格式

      获取请求信息

      处理请求信息

      响应处理结果

  • 相关阅读:
    使用docker部署zabbix
    进入容器脚本
    Docker安装
    docker命令总结
    zbb20180827 Spring中ClassPathXmlApplicationContext类的简单使用,main方法加载application.xml文件
    zbb20180824 spring ioc aop 例子
    tomcat运行报错Failed to start component [StandardEngine[Catalina].StandardHost[localhost].
    zbb20180815 网盘搜索引擎
    Java字节码指令收集大全
    zbb20180716 SpringBoot 使用feign时报错Service id not legal hostname
  • 原文地址:https://www.cnblogs.com/jiulonghudefeizhai/p/10103914.html
Copyright © 2020-2023  润新知