A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 嗨。 初级黑马   /  2018-2-4 15:12  /  982 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 嗨。 于 2018-2-4 16:00 编辑

【石家庄校区】总结第四波

增强类的三种方式
                一种方式:继承的方式.
                二种方式:装饰者模式方式.
                三种方式:动态代理的方式.
【HTTP的协议的概述】
        协议:
                什么是协议:规定双方需要遵守的规则.
        HTTP协议:
                什么是HTTP协议:用来规定浏览器与服务器之前需要遵守的规则.
        HTTP协议的作用:规范浏览器和服务器之间的数据传递.
        HTTP协议的特点:
                基于请求和响应的模型.
                        必须先有请求后有响应.
                        请求和响应必须成对出现.
                默认的端口号是80.
                        HTTP协议的版本:
                                1.0        :每次响应后即刻关闭了连接.
                                1.1        :现在使用.不是每次响应后挂断,等待长时间以后没有请求会挂断.
【HTTP协议的详解】
        请求部分
                请求行
                        提交方式:
                                提交方式有很多,常用的GET和POST:
                                GET和POST的区别:
                                        GET的提交的参数会显示到地址栏上,而POST不显示.
                                        GET往往是有大小限制的,而POST没有大小的限制.
                                        GET没有请求体,而POST有请求体.
                        提交路径:
                        协议版本:
                请求头
                         都是键值对的形式显示的.一般一个key对应一个value,也有个别的是一个key对应多个value.
                        
                        User-Agent                                :代表浏览器的类型.  解决浏览器版本不一致问题
                        文件下载:下载中文文件:IE使用URLEncodor进行编码,而Firefox使用Base64编码.

                        Referer                                :代表的是网页的来源. --- 防盗链.
                        
                        If-Modified-Since        :通常与响应中的头Last-Modified一起使用查找本地缓存.
                请求体
                        就是POST提交方式的提交的参数.               
                        
        响应部分
                响应行:
                        协议版本
                        状态码                :
                                200        :成功
                                302        :重定向
                                304        :查找本地缓存
                                404        :资源找不到
                                500        :服务器内部错误
                        状态码描述
                响应头:键值对,一般一个key对应一个value,也有一个key对应多个value.
                        Last-Modified                        :与请求中的If-Modified-Since一起使用查找本地缓存.
                        Content-Dispostion        :专门用来下载用的,让浏览器以下载的方式打开文件
                        Location                                :重定向的跳转的路径.
                        Refresh                                :定时刷新/定时跳转.
                响应体:显示浏览器的页面的内容.
1.浏览器端如果想直接访问Servlet的话
        路径的编写:使用:  /工程名/servlet的虚拟路径
2.浏览器如果想要直接访问.html.jsp或者其他静态资源
        路径的编写:使用: /工程名/资源所在的路径
3.servlet A想要跳转其他servlet B
        1.重定向
                路径的编写:使用: /工程名/B对应的虚拟路径
        2.请求转发
                路径的编写:使用: /B对应的虚拟路径
4.servlet A想要跳转到 .html或者.jsp
        1.重定向
                路径的编写:使用: /工程名/.jsp或者.html所在的子路径
        2.请求转发
                路径的编写:使用: /.jsp或者.html所在的子路径
5.servlet想要读取项目下文件
        1.需要用ServletContext的对象来读取
                1.ServletContext.getResouceAsStream("资源路径(不用再加工程名)")
                2.ServletContext.getRealPath("资源路径(不用再加工程名)")

浏览器向服务器携带中文?
        get方式
                get的参数都藏在请求行中,请求行中编码是固定ISO8859-1
                解决方案: 通过String的构造方式来解决  例如:  文件名是filename--->  new String(filename.getByte("ISO8859-1"),"UTF-8");
        post方式
                post的方式参数藏在请求体中,将请求体中的编码改成UTF-8就行了
                request.setCharacherEnconding("UTF-8");
               
服务器向浏览器输出中文的时候乱码解决???
        设置响应头
                响应头的编码是固定的ISO-8859-1,所有我们需要给浏览器能看懂的东西
                if(header.contains("Firefox")){
                        filename = base64EncodeFileName(filename);
                }else{
                        filename = URLEncoder.encode(filename, "UTF-8");
                }
                public static String base64EncodeFileName(String fileName) {
                        BASE64Encoder base64Encoder = new BASE64Encoder();
                        try {
                                return "=?UTF-8?B?"
                                                + new String(base64Encoder.encode(fileName
                                                                .getBytes("UTF-8"))) + "?=";
                        } catch (UnsupportedEncodingException e) {
                                e.printStackTrace();
                                throw new RuntimeException(e);
                        }
                }
        设置响应体
                getOutputStream
                getWriter
                setContextType("text/html;charset=UTF-8")---> setHeader("Context-Type","text/html;charset=UTF-8 ")  setCharaterEnconding("UTF-8");


HTTP协议的详解
        请求部分
                请求行
                        提交方式:
                                提交方式有很多,常用的GET和POST:
                        GET和POST的区别:
                                GET的提交的参数会显示到地址栏上,而POST不显示.
                                GET往往是有大小限制的,而POST没有大小的限制.
                                GET没有请求体,而POST有请求体.
                        提交路径:
                        协议版本:
                请求头
                        都是键值对的形式显示的.一般一个key对应一个value,也有个别的是一个key对应多个value.
                        User-Agent                        :代表浏览器的类型. --- 文件下载:下载中文文件:IE使用URLEncodor进行编码,而Firefox使用Base64编码.
                        Referer                                :代表的是网页的来源. --- 防盗链.
                        If-Modified-Since        :通常与响应中的头Last-Modified一起使用查找本地缓存.
                请求体
                        就是POST提交方式的提交的参数.
        响应部分
                响应行:
                        协议版本
                        状态码
                                200        :成功(200以内都是成功)
                                        260 : 部分成功
                                302        :重定向
                                        response.sendRedirect(需要跳转到的页面)
                                304        :查找本地缓存
                                404        :资源不存在
                                500        :服务器内部错误
                        状态码描述
                响应头:键值对,一般一个key对应一个value,也有一个key对应多个value.
                        Last-Modified                :与请求中的If-Modified-Since一起使用查找本地缓存.
                        Content-Dispostion        :文件下载的时候使用的一个头信息.
                        Location                        :重定向的跳转的路径.
                        Refresh                                :定时刷新/定时跳转.
                                格式:                        Refresh:等待的秒数;url=需要跳转的页面
                响应体:显示浏览器的页面的内容.
               
Servlet
        什么是Servlet:
                就是一个运行在WEB服务器上的小的Java程序,用来接收和响应从客户端发送过来的请求,通常使用HTTP协议.
                Servlet就是SUN公司提供的一个动态网页开发技术.
        Servlet的作用:
                用来处理从客户端浏览器发送的请求,并且可以对请求作出响应
        使用Servlet:
                编写一个类实现Servlet接口.
                将编写的这个类配置到服务器中.
     
        使用ServletRequest接收参数
                常用方法:
                        String getParameter(String name);                ---用于接收一个名称对应一个值的数据.
                        String[] getParameterValues(String name)---用于接收一个名称对应多个值的数据.
                        Map getParameterMap();                                        ---用于接收表单中的所有的数据,Map的key是表单提交的参数名称,Map的value是提交参数的值.
                        Enumeration getParameterNames()                        ---用于获取表单中提交的所有的参数的名称.
                        setCharacterEncoding(编码)                                ---设置请求体中的编码,如果不设置默认编码是ISO8859-1
               
        Servlet的实现的关系】
                Servlet                        :接口
                GenericServlet        :通用的Servlet
                HttpServlet                :HttpServlet
                        编写一个类继承HttpServlet,重写doGet和doPost方法.
                        配置
               
Servlet的生命周期:
        生命周期:就是一个对象从创建到销毁的过程.
        Servlet生命周期:Servlet从创建到销毁的过程.
                何时创建:用户第一次访问Servlet创建Servlet的实例
                何时销毁:当项目从服务器中移除的时候,或者关闭服务器的时候.
                用户第一次访问Servlet的时候,服务器会创建一个Servlet的实例,那么Servlet中init方法就会执行.任何一次请求服务器都会创建一个新的线程访问Servlet中的service的方法.在service方法内部根据请求的方式的不同调用doXXX的方法.(get请求调用doGet,post请求调用doPost).当Servlet从服务器中移除掉,或者关闭服务器,Servlet的实例就会被销毁,那么destroy方法就会执行.

启动时创建Servlet
        Servlet默认是在第一次访问的时候创建的.现在让Servlet在服务器启动的时候创建好.进行对Servlet的配置:
        在web.xml中在<servlet></servlet>标签中配置:
        * <load-on-startup>2</load-on-startup>  --- 传入正整数,整数越小,被创建的优先级就越高.

url-pattern的配置
        url-pattern配置方式共有三种:
                1.完全路径匹配        :以 / 开始                                                例如:        /ServletDemo4 , /aaa/ServletDemo5 , /aaa/bbb/ServletDemo6
                2.目录匹配                :以 / 开始 需要以 * 结束.                例如: /* ,/aaa/* ,/aaa/bbb/*
                3.扩展名匹配        :不能以 / 开始 以 * 开始的.         例如: *.do , *.action
        ***** 错误的写法        : /*.do
        
        ***** 完全路径匹配 > 目录匹配 > 扩展名匹配

        
开发中的路径的编写:
        相对路径:都是需要找位置相对关系.不能以 / 开始的.
                ./ 当前路径  ../上一级目录
                使用相对路径访问:
                        * http://localhost:8080/day09/demo4-url/demo1.html
                        * http://localhost:8080/day09/ServletDemo6
        绝对路径:不需要找位置相对关系. 以 / 开始的.
                绝对路径中分为客户端路径和服务器端路径:
                        客户端路径一定要加工程名.                /day09/ServletDemo6
                        服务器端路径不需要加工程名.        /ServletDemo6

HttpServletResponse中设置头的方法
        addHeader(String name,String value);        --- 针对一个key对应多个value的响应头.
    addDateHeader(String name,long date);
    addIntHeader(String name,int value);

         setHeader(String name,String value);        --- 针对一个key对应一个value的响应头.
    setDateHeader(String name,long date);
    setIntHeader(String name,int value);

解决向页面输出中文的乱码问题
        response.setContentType("text/html;charset=UTF-8");

ServletContext对象存取数据,存的数据都是有一定的作用的范围的.这种对象称为是域对象.
        获取方式
                GenericServlet
                        ServletContext getServletContext()  
        
        ServletContext的作用:
                1.用来获得全局初始化参数.
                        在web.xml的web-app下配置全局初始化参数:
                        如:
                                  <context-param>
                                        <param-name>username</param-name>
                                        <param-value>root</param-value>
                                  </context-param>
                                        <context-param>
                                        <param-name>password</param-name>
                                        <param-value>123</param-value>
                                  </context-param>
                        String getInitParameter(String name)
                        Enumeration getInitParameterNames()
                2.用来获得文件的MIME的类型.
                        String getMimeType(String file)
                3.作为域对象存取数据.
                        ServletContext是一个域对象.
                        作用范围:整个web工程.
                        创建:服务器启动的时候,tomcat服务器为每个web项目创建一个单独ServletContext对象.
                        销毁:服务器关闭的时候,或者项目从服务器中移除的时候.
                        存取数据方法
                                向ServletContext中存入数据.
                                        void setAttribut(Stirng name,Object object)
                                从ServletContext中获取数据.
                                        Object getAttribute(String name)
                                从ServletContext中移除数据
                                        void removeAttribute(String name)

                4.用来读取web项目下的文件.(路径不需要写项目名)
                        根据提供路径读取文件返回一个文件的输入流.
                                InputStream getResourceAsStream(String path)
                        返回一个路径的磁盘绝对路径
                                String getRealPath(String path)
                还可以使用类加载器读取classes下的文件
               
                        
ServletConfig:了解.获得Servlet的配置信息.
        String getServletName();                                ---获得Servlet在web.xml中配置的name的值.
        String getInitParameter(String name);        ---获得Servlet的初始化参数的.
        Enumeration getInitParameterNames();        ---获得所有Servlet的初始化参数的名称.

Response:代表响应的对象.从服务器向浏览器输出内容.
        响应行:
                void setStatus(int sc):设置状态码
        响应头:
                针对一个key对应多个value的响应头.
                        void addHeader(String name,String value);        
                        void addDateHeader(String name,long date);
                        void addIntHeader(String name,int value);

                针对一个key对应一个value的响应头.
                        void setHeader(String name,String value);        
                        void setDateHeader(String name,long date);
                        void setIntHeader(String name,int value);
        响应体:
                ServletOutputStream getOutputStream()
                printWriter getWriter()
转发
        request.getTequestDispatch(需要跳转到的页面).forward(reqrest,response);

向页面响应的方法:
                getOutputStream();
                getWriter();
        注意!!!!        这两个方法是互斥的.
                做出响应的时候只能使用其中的一种流响应.

Request的概述
        Request代表用户的请求.
        
常用方法:
        功能一:获得客户机的相关的信息
                获得请求方式:
                        String getMethod()
                获得请求的路径:
                        String getRequestURI()
                        StringBuffer getRequestURL()
                获得客户机的信息
                        String getRemoteAddr():获得客户机IP地址
                获得工程名:
                        String getContextPath()
        功能二:获得从页面中提交的参数:
                String getParameter(String name)
                Map getParameterMap()
                Enumeration getParameterNames()
                String[] getParameterValues(String name)
        功能三:作为域对象存取数据
                void removeAttribute(String name)
                void setAttribute(String name,Object o)
                Object getAttribute(String name)
               
处理request接收参数的中文乱码的问题:
        现在无论是GET还是POST提交中文的时候,都会出现乱码的问题.
        解决:
                POST的解决方案:
                        POST的参数在请求体中,直接到达后台的Servlet.数据封装到Servlet中的request中.request也有一个缓冲区.request的缓冲区也是ISO-8859-1编码.
                        设置request的缓冲区的编码:
                        request.setCharacterEncoding(“UTF-8”);  --- 一定要在接收参数之前设置编码就OK.
                GET的解决方案:
                        1.修改tomcat的字符集的编码.(不推荐)
                        2.使用URLEncoder和URLDecoder进行编码和解码的操作.
                        3.使用String的构造方法:
                                String(byte[] bytes,String charsetName):通过使用指定的charset解码指定的数组,构造一个新的String

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马