rr(request&response)

rr(request&response)

一、响应(response)

1.作用(了解):服务器往浏览器回写

2.组成部分(响应行 响应头 响应体)
(1)操作响应行(响应行:响应信息的第一行)
    a.格式:协议/版本 状态码 状态码说明
       例如:HTTP/1.1 200 OK
    b.状态码
        1xx:已发送请求
        2xx:已完成响应
            200:正常响应
        3xx:还需浏览器进一步操作
            302:重定向 配合响应头:location
            304:读缓存
        4xx:用户操作错误
            404:用户操作资源不存在
            405:访问的方法不存在
        5xx:服务器错误
            500:服务器内部异常
    c.常用方法
        格式:setStatus(int 状态码):针对于 1xx 2xx 3xx 
        例如:response.setStatus(302);
        了解:
            sendError(int 状态码):针对于 4xx和5xx
(2)操作响应头(响应头:从响应信息的第二行到空行结束)
    a.格式:key/value(value可以是多个值)
    b.常用方法
        setHeader(String key,String value):设置字符串形式的响应头
        了解:setIntHeader(String key,int value):设置整形的响应头
        了解:setDateHeader(String key,long value):设置时间的响应头
        addHeader(String key,String value):添加字符串形式的响应头 之前设置过则追加,若没有设置过则设置
        了解:addIntHeader(String key,int value):添加整形的响应头
        了解:addDateHeader(String key,long value):添加时间的响应头
    c.常用的响应头
        location:重定向 配合302
        refresh:定时刷新
        content-type:设置文件的mimeType,及设置响应流的编码并且通知浏览器用什么编码打开
        content-disposition:设置文件下载
    d.常见的响应头(了解)
        ★Location: http://www.it315.org/index.jsp     --跳转方向 和302一起使用的
        Server:apache tomcat                --服务器型号
        Content-Encoding: gzip             --数据压缩
        Content-Length: 80                    --数据长度
        Content-Language: zh-cn          --语言环境
        ★Content-Type: text/html; charset=GB2312              --数据类型
        ★Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT        --最后修改时间
        ★Refresh: 1;url=http://www.it315.org                         --定时刷新
        ★Content-Disposition: attachment; filename=aaa.zip  --下载
        ★Set-Cookie:SS=Q0=5Lb_nQ; path=/search
        Expires: -1                            --缓存
        Cache-Control: no-cache      --缓存
        Pragma: no-cache                --缓存
        Connection: Keep-Alive        --连接
      掌握的头信息:
        Location Content-Type Last-Modified Refresh Content-Disposition Set-Cookie
(3)操作响应体 (响应体:空行以下的内容)
        浏览器要展示的内容(html代码)
        常用方法: ★★★
            Writer getWriter():字符流
            ServletOutputStream getOutputStream() :字节流
            注:自己写的东西用字符流,其他一概用字节流;
               两个流互斥;
               服务器会帮我们关闭此流
               
3.处理响应中文乱码(content-type)
    方式1:★
        response.setContentType("text/html;charset=utf-8");//建议大家放在servlet方法中的第一行
    方式2:(理解)
        response.setHeader("content-type", "text/html;charset=utf-8");
    
4.重定向(location)
    方式1:(常用)★★★
        格式:response.sendRedirect("跳转路径");
        例如:response.sendRedirect("/day10/loc2");
    方式2:(了解)
        response.setStatus(302);
        response.setHeader("location","/day10/loc2");

5.定时刷新(refresh) ★★★
    方案1:设置头 java
        response.setHeader("refresh","秒数;url=跳转的路径");
    方案2:html代码的meta标签
        <meta http-equiv="refresh" content="3;url=/day10/refresh2.html">
        其中 http-equiv为响应头;content为响应头的内容
        
6.文件下载(content-disposition)
    方式1:超链接下载
        <a href="/day10/download/day10.txt">下载 day10.txt</a>
        若浏览器能解析该资源的mime类型,则打开;若不能解析则下载
    方式2:编码下载(两个头一个流) 通过servlet完成(常用) ★★★
        <a href="/day10/download?name=day10.txt">下载 day10.txt</a>
        a.设置文件的mime类型 content-type
            String mimeType=context.getMimeType(文件名)
            response.setContentType(mimeType);    
        b.设置下载头信息 content-disposition
            response.setHeader("content-disposition", "attachment;filename="+文件名称);    
        c.提供流
            response.getOutputStream();        
            扩展:使用commons-io工具类
                对拷流:IOUtils.copy(is,os);
    扩展:
    中文名称的文件名下载的时候名称会出现问题
    常见的浏览器需要提供文件名称的utf-8编码
    对于火狐来说需要提供文件名称的base64编码
        方案1:使用工具类(通用)
            DownLoadUtils.getName(request.getHeader("user-agent"), filename);
        方案2:网上的方式(八成好使)
            new String(filename.getBytes("gbk"),"iso8859-1");
            
7.验证码生成(扩展)(了解)
    通过response生成验证码
    验证码作用:防止暴力攻击
    点击换一张的js代码:
        function changeImg(obj){
            //操作src属性
            obj.src="/day10/code?i="+Math.random();
        }        
        


二、请求(request)

1.作用(了解):获取浏览器发送过来的数据(浏览器往服务器发送)

2.组成部分(请求行 请求头 请求体)    
(1)操作请求行(请求行:请求信息的第一行)
    a.格式:请求方式 请求资源 协议/版本
       例如:GET /day10/row?username=tom&password=123 HTTP/1.1
    b.常用方法:HttpServletRequest
    掌握
        String getMethod():获取请求方式
        String getRemoteAddr():获取请求的ip地址
        ★String getContextPath():在java中获取项目名称(例如:/day10)
    了解
        String getRequestURI():获取的是从项目名到参数之前的内容  /day10/regist
        String getRequestURL():获取的是带协议的完整路径          http://localhost/day10/regist
        String getQueryString():get请求的所有参数                       username=tom&password=123
        String getProtocol():获取协议和版本            
    c.请求方式:get和post(了解)
        get会把参数放在url的后面,post不会
        get参数大小有限制,post请求却没有限制
        get请求没有请求体;post请求有请求体且请求参数放在请求体中                
(2)操作请求头 (请求头:请求信息的第二行到空行结束)
    a.格式:key/value(value可以是多个值)
    b.常用方法
        ★String getHeader(String key):通过key获取指定的value (一个)
        了解:
            Enumeration getHeaders(String name):通过key获取指定的value(多个)
            Enumeration getHeaderNames():获取所有的请求头的名称
            int getIntHeader(String key):获取整型的请求头
            long getDateHeader(String key):获取时间的请求头
    c.常用的请求头
        user-agent:获取浏览器内核 msie firefox chrome
        referer:页面从哪里跳转过来的 防盗链        
    d.常见的请求头(了解)
        Accept: text/html,image/bmp    --支持数据类型    text/html text/css text/javascript 大类型/小类型 mime类型
        Accept-Charset: ISO-8859-1    --字符集
        Accept-Encoding: gzip            --支持压缩
        Accept-Language:zh-cn          --语言环境
        Host: www.itcast.cn:80            --访问主机
        ★If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT --缓存文件的最后修改时间
        ★Referer: http://www.itcast.com/index.jsp               --来自哪个页面、防盗链
        ★User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0) --浏览器内核
        ★Cookie
        Connection:Keep-Alive       --链接状态        
      掌握的头信息
        If-Modified-Since Referer User-Agent Cookie         
(3)操作请求参数(请求体:空行以下的内容) ★★★
    username=tom&password=123&hobby=drink&hobby=sleep
    常用方法:
        String getParameter(String key):获取一个值
        String[] getParameterValues(String key):通过一个key获取多个值
        Map<String,String[]> getParameterMap():获取所有的参数名称和值
        
3.处理请求中文乱码 ★★★
    对于get请求:参数追加到地址栏,会使用utf-8编码,服务器(tomcat7)接受到请求之后,使用iso-8859-1解码,所以会出现乱码
    对于post请求,参数是放在请求体中,服务器获取请求体的时候使用iso-8859-1解码,也会出现乱码
    方式1:(通用的方法:get和post均适用)
        格式:new String(参数.getBytes("iso-8859-1"),"utf-8");
        例如:new String(username.getBytes("iso8859-1"),"utf-8");
    方式2:针对于post请求来说:只需要将请求流的编码设置成utf-8即可
        request.setCharacterEncoding("utf-8");
    扩展:
        URLEncoder.encode(s, "utf-8"); 指定编码
        URLDecoder.decode(s8, "iso8859-1");指定解码

4.请求转发  ★★★
  域对象:request
    xxxAttribute()
    生命周期:一次请求
    创建:一次请求来的时候
    销毁:响应生成的时候
    作用:一次请求里面的数据
    请求转发(请求链,请求串)
        格式:request.getRequestDispatcher("内部路径").forward(request,response);
        例如:request.getRequestDispatcher("/dis2").forward(request,response);

5.请求转发和重定向的区别(常见面试题)
    重定向发送两次请求,请求转发一次请求;
    重定向地址栏发生改变,请求转发不变;
    重定向是从浏览器发送,请求转发是服务器内部;
    重定向不存在request域对象,请求转发可以使用request域对象;
    重定向是response的方法,请求转发是request的方法;
    重定向可以请求站外资源,请求转发不可以    
    

三、其他

1.封装对象(扩展)
    apache提供的一个工具类:BeanUtils
    封装数据
    使用步骤:
        a.导入两个jar包(commons-beanutils-1.8.3.jar和commons-logging-1.1.1.jar)
        b.调用 BeanUtils.populate(Object bean,Map<> 参数);

    
四、常见案例

1.案例一-文件下载
(1)需求:下载文件
(2)技术分析:response 文件下载
(3)步骤分析:编码下载(两个头一个流)
    a.设置文件的mime类型
    b.设置下载头信息 content-disposition        
    c.提供流(对拷流)

2.案例二-用户注册
(1)需求:在一个表单页面上填写用户数据,点击提交,将所有的数据提交到服务器上,
          通过java代码最终保存到数据库中.
(2)技术分析:表单 request
(3)步骤分析:
    a.先有数据库和表(见day09)
    b.创建工程
        例如:day1001(web工程)
    c.复制页面(表单)
        修改register.htm
            给每个字段添加name属性(部分需要添加value属性)
            修改表单的action属性
                action="http://localhost/day1001/regist"
            添加method属性:method="post"
    d.创建用户类(User)
    e.表单提交到一个servlet(RegistServlet:路径 /regist)
        设置编码(request);
        封装数据:接受数据,封装成一个user(使用beanutils封装对象);
        调用UserSerivce完成保存操作  int regist(User user)
        判断结果是否符合我们预期
            若int=1,插入成功;若int!=1,插入失败
            相应的提示信息在当前的servlet不做处理,将信息转发给另一个servlet展示(MsgServlet)
    f.MsgServlet
        设置编码(response);
        从request域中获取内容msg;
        将信息打印到页面上
    g.UserService
        调用UserDao
    h.UserDao 
        通过dbutils在数据库中插入一条记录
        创建queryrunner
        编写sql
        执行sql

    
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值