• 03 HttpServletRequest_HttpServletResponse


    HttpServletRequest:一次来自客户端的请求的相关信息
    请求行
    request.getMethod() 获取http请求方式
    request.getRequestURI() 获取统一资源标识符
    request.getRequestURL() 获取统一资源定位符
    request.getQueryString() 获取查询字符串
    request.getProcotol() 获取协议版本
    request.getScheme() 获取协议名
    请求头
    request.getHeader() 获取请求头信息
    request.getHeaderNames() 获取所有请求头的名字
    实体内容
    request.getParameter() 获取请求实体中的参数、或URL后的请求参数
    request.getInputStream() 获取请求参数,当表单提交的enctype="multipart/form-data"
    网络相关信息
    request.getRemoteAddr() 获取客户端的IP地址
    request.getRemotePort() 获取客户端的端口号
    request.getLocalAddr() 获取服务器端的IP地址
    request.getLocalPort() 获取服务器端的端口号
     
     
    HttpServletResponse:一次发送给客户端的响应的相关信息
    状态行
    应答头
    response.setHeader() 设置应答头
    response.setContentType("text/html; charset=utf-8") 设置响应内容及字符集
    响应实体
    response.getWriter() 获取打印流,输出字符数据
    response.getOutputStream() 获取字节输出流,输出二进制数据
     
     
     
    一、客户端请求服务器的数据有乱码
    1.get方式请求
    ①修改tomcat/conf/server.xml,在<Connector> 标签中添加属性useBodyEncodingForURI="true"
    ②在获取请求数据之前,设置 request.setCharacterEncoding("utf-8");
    2.post方式请求
    在获取请求数据之前,设置 request.setCharacterEncoding("utf-8");
     
    二、服务器返回给客户端的数据有乱码
    response.setContentType("text/html; charset=utf-8");
     
     
     
     
     
    请求转发
    request.getRequestDispathcer("path").forward(reqeust,response);
     
    请求转发的特点:
    1.地址栏没有发生变化
    2.用户只发起了一次请求
    3.请求转发只能转发本服务器以内的资源
    4.由于请求是同一个对象,所以可以利用该request做servlet之间数据的传输
     
     
    重定向
    response.sendRedirect("path")
     
    重定向的特点:
    1.地址栏会发生改变
    2.用户发起了两次请求
    3.重定向可以访问服务器以外的资源
    4.重定向由于请求多次的,所以HttpServletRequest不是同一个对象,故不能使用它传递数据
     
     
    一、分析
    1.找出一个url中的项目名称
    项目名称前面的“/”是服务器地址,例:http://127.0.0.1:8080/
    项目名称后面的“/”是项目地址,例:http://127.0.0.1:8080/proejctname/
    二、判断
    1.判断一次请求行为是谁发出的
    如果是浏览器行为,则表示项目名称前面的“/”,即服务器地址
    如果是服务器内部行为,则表示项目名称后面的“/”,即项目地址
     
    1.服务器内部行为:请求转发
    2.浏览器行为:重定向、页面中form提交、页面中a标签、js中通过location.href定位一个路径
     
     
    Cookie:在浏览器中保存用户的信息
     
    使用:由服务器创建,发送到浏览器保存,之后随着请求发回到服务器
    1.创建cookie
    Cookie cookie = new Cookie("name","value");
    2.发送cookie到浏览器
    response.addCookie(cookie对象);
    3.获取来自客户端的cookie
    Cookie[] cookies = request.getCookies();
     
    使用注意:
    1.cookie第一次是由servlet发送到浏览器中,第一次不能获取cookie
    2.不同的浏览器存放的cookie不是同一个
    3.如果设置了cookie的maxage,则cookie会保存在浏览器所在电脑的硬盘上,如果没设置该属性,则保存在浏览器的内存中
     
     
    Session:在服务器中保存用户信息
    使用:在服务器端创建Session,来保存当前访问服务器的用户的信息
    1.获取session(如果已经创建了session,则返回当前session)或创建session:
    HttpSession session = request.getSession();
    2.设置session最大不活跃时间
    session.setMaxInactiveInteval() //以秒为单位
    3.使用session保存信息
    session.setAttribute(String key,Object value);
    session.getAttribute(String key);
    4.立即销毁session
    session.invalidate();
     
     
    HttpServletRequest:封装了一次来自客户端的Http的请求信息
    请求消息包含几个部分?
    1请求行
     
    private void getRequestLine(HttpServletRequest request,
                HttpServletResponse response) {
    //请求方式  
             String method = request.getMethod();
            System.out.println(method);
    //资源路径
            String uri =request.getRequestURI();
            String url=request.getRequestURL().toString();
            System.out.println(uri);
            System.out.println(url);
    //请求参数字符串
            String queryString =request.getQueryString();
            System.out.println(queryString);
    //协议及版本号
            String protocol = request.getProtocol();
            System.out.println(protocol);
            String scheme = request.getScheme();
            System.out.println(scheme);
            
            
        }
    2请求头
     
    private void getRequestHead(HttpServletRequest request,
                HttpServletResponse response) {
            // 根据header的key获取其value
                    String user_agent = request.getHeader("User-Agent");
                    System.out.println(user_agent);
                    // 查询header所有的keyname
                    Enumeration<String> enu = request.getHeaderNames();
                    while (enu.hasMoreElements()) {
                        System.out.println(enu.nextElement());
                    }
        }
    3 实体内容
     
    private void getRequestBody(HttpServletRequest request,
                HttpServletResponse response) throws IOException {
            // 获取请求实体中的数据
    
                    // 请求实体中的数据有三种形式:
                    // 1.application/x-www-form-urlencoded
                    // 2.multipart/form-data
                    // 3.text/plain
    
                    // 对于1、3
                    // getParameter() //无论post方式还是get方式都可以获取用户的请求数据
            String value = request.getParameter("username");
            System.out.println(value);
            String coment = request.getParameter("coment");
            System.out.println(coment);
            
            ServletInputStream in= request.getInputStream();
            FileOutputStream out = new FileOutputStream(
                    "d:\1.txt");
            int len = 0;
            byte[] flush = new byte[1024];
            while ((len = in.read(flush)) != -1) {
                out.write(flush, 0, len);
            }
            out.close();
            in.close();
        }
    4网络信息
        private void getIntenetInfo(HttpServletRequest request,
                HttpServletResponse response) {
            System.out.println("访问服务器的地址为:" + request.getRemoteAddr() + ":"
                    + request.getRemotePort());
            System.out.println("服务器的本地地址为:" + request.getLocalAddr() + ":"
                    + request.getLocalPort());
        }
    
    }
    响应消息分为几步?
    public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            // 状态行
            // 协议版本 http状态码 htt状态描述
            // 应答头
            // 响应实体
    
            // 设置应答头
            response.setHeader("content-type", "image/jpeg; charset=utf-8");
    
            // 向用户输出字符数据
            /*
             * PrintWriter out = response.getWriter(); out.write("<h1>你好世界!</h1>");
             * out.flush(); out.close();
             */
    
            // 我们只能打开一个流为用户输出数据
            FileInputStream in = new FileInputStream("D:\1.jpg");
            ServletOutputStream out = response.getOutputStream();
    
            int len = 0;
            byte[] flush = new byte[1024 * 1024];
            while ((len = in.read(flush)) != -1) {
                out.write(flush, 0, len);
            }
    
            out.flush();
            out.close();
            in.close();
    
        }
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    创建live usb
    gnome2.x面板(panel)或应用程序菜单误删后恢复
    grub & grub2
    linux(CentOS6)下的wifi热点安装配置------hostapd-2.0
    linux(Ubuntu)下的wifi热点安装配置------hostapd-2.0
    BZOJ3884 上帝与集合的正确用法(欧拉函数)
    Luogu4897 【模板】最小割树
    Contest 6
    BZOJ3811 玛里苟斯(线性基+概率期望)
    Contest 5
  • 原文地址:https://www.cnblogs.com/aknife/p/10846819.html
Copyright © 2020-2023  润新知