黑马程序员技术交流社区

标题: 【石家庄校区】WEB总结 [打印本页]

作者: 逐野    时间: 2018-2-4 15:22
标题: 【石家庄校区】WEB总结
【石家庄校区】WEB总结


XML
        XML的基本语法:
                XML必须有关闭标签
                区分大小写
                属性需要有引号  
                标签必须正确嵌套.


        XML的文档声明
                文档声明:通常出现在XML的第一行第一列的位置!!!
                写法:
                        <?xml 属性名=”属性值” 属性名=”属性值” ...?>
                                version        :必须的. 使用”1.0”
                                encoding        :字符集. 是使用浏览器打开的时候采用的默认的字符集的编码.
                                standalone        :描述XML文档是否需要依赖其他的文件.
                               
        XML的注释
                <!-- XML的注释 -->
               
        XML的元素
                元素(标签)的命名规范:
                        名称可以含字母,数字以及其他的字符
                        名称不能以数字或者标点符号开始
                        名称不能以字符"xml"(或者XML,Xml)开始
                        名称不能含空格
                        名称中不能含冒号
                       
        XML的属性
                属性的名称规范与元素一致.
                        属性需要使用引号!


        XML的特殊字符和CDATA区
                XML的特殊字符:
                        &lt;        <        小于
                        &gt;        >        大于
                        &amp;        &        和号
                        &apos;        '        单引号
                        &quot;        "        引号
                XML的CDATA区:(CDATA:Character Data)
                        <![CDATA[  内容  ]]>
                       
        XPath:
                dom4j支持XPath的jar包.
                        jaxen-1.1-beta-6.jar
                dom4j的XPath支持的API:
                        List document.selectNodes(String xPath);
                        Node document.selectSingleNode(String xPath);
                代码:
                        @Test
                        /**
                         * DOM4J的XPath的写法:
                         */
                        public void demo2() throws Exception{
                                // 创建解析器:
                                SAXReader reader = new SAXReader();
                                // 解析XML返回Document对象.
                                Document document = reader.read("xml/demo1.xml");
                                /*List<Node> list = document.selectNodes("//name");
                                for (Node node : list) {
                                        Element element = (Element) node;
                                        System.out.println(element.getText());
                                }*/
                               
                                List<Node> list = document.selectNodes("//person['@id']");
                                for (Node node : list) {
                                        Element element = (Element) node;
                                        System.out.println(element.attributeValue("id"));
                                }
                        }


        XML的约束的概述:
                什么是XML的约束        :就是用来约束XML的文档中可以出现哪些标签,不能出现哪些标签,标签中是否有顺序,出现的次数.
                XML的约束                        :用来规范XML的写法.
                XML的约束的种类及区别?
                        DTD 和 Schema        :
                                区别:
                                 1.DTD语法是自成一体的.Schema语法就是XML的语法.
                                 2.Schema的语法就是XML的语法所以更容易被解析器所解析.
                                 3.Schema支持名称空间.
                                 4.Schema有比DTD更加强大的语义和语法的约束.
                DTD的语法        :(了解)
                DTD的引入方式:
                        内部的DTD:
                                <!DOCTYPE persons [
                               
                                ]>
                        外部的DTD:
                                一种本地DTD:
                                        <!DOCTYPE persons SYSTEM "unknown.dtd">
                                一种网络DTD:
                                        <!DOCTYPE persons PUBLIC "//UNKNOWN/" "unknown.dtd">
                DTD的语法:
                        元素:
                                <!ELEMENT 元素名 元素类型>
                                        元素类型:
                                                EMPTY
                                                ANY
                                                子元素
                                                        是否有序: 使用 逗号(,)(有序)或者竖线(|)(只能出现其中的一个,如果想多出现可以在后面写?,+,*)表示.
                                                        出现的次数:?:零次或一次 +:一次或多次 *:零次或多次
                                                PCDATA
                        属性:
                                <!ATTLIST 元素名称 属性名称 属性的类型 属性的约束>
                                        属性的类型:
                                                ID类型:表示属性值需要是唯一的.
                                                CDATA类型:普通的字符串.
                                                枚举:
                                        属性的约束:
                                                值                                :属性的默认值
                                               
                                                #REQUIRED                :属性值是必需的
                                                #IMPLIED                :属性不是必需的
                                                #FIXED value        :属性值是固定的



Tomcat
        软件的架构
                C/S架构的软件:
                        Client / Server 客户端和服务器端的软件. 都是需要在PC端安装的软件. 比如 QQ,迅雷,暴风...
                        优点:效果炫,一部分代码写到客户端(速度快).
                        缺点:服务器端更新,客户端都需要更新.


                B/S架构的软件:
                        Browser / Server 浏览器端和服务器端的软件. 不需要安装到PC端,只需要有一个浏览器即可. 比如 京东,网银,WEBQQ,WEB迅雷...
                        优点:服务器端更新,客户端浏览器不需要进行更新.
                        缺点:效果不炫,所有的代码运行都在服务器端,导致服务器压力过大.
                                效果:使用HTML5,CSS3可以做出很炫效果.
                                服务器端压力:搭建服务器的集群.而且还有AJAX技术.


        了解Tomcat的目录结构】
         
                bin                        :tomcat的执行的文件.
        *        conf                :tomcat的配置文件.
                lib                        :tomcat运行的需要的jar包.
                logs                :tomcat的运行的日志文件.
                temp                :tomcat产生临时文件存放的路径.
        *        webapps                :tomcat发布的web项目的路径.
                work                :tomcat运行JSP的时候,JSP翻译成Servlet的代码存放的路径.


        发布一个WEB工程到Tomcat中共有三种方式:
                1.直接将工程copy到tomcat/webapps下.
                2.配置tomcat虚拟路径:(一般不用 )
                        在tomcat/conf/server.xml文件中进行配置:
                        在<Host>标签下配置:
                                <Context path="/itheima" docBase="C:/website"/>
                3.配置tomcat虚拟路径:
                        在tomcat/conf/Catalina/localhost/xxx.xml
                        配置<Context docBase="C:/website"/>
                        xxx作为虚拟路径的名称.


        Tomcat常见问题:
                没有配置JAVA_HOME引发tomcat一闪消失
                        一定要配置JAVA_HOME环境变量.
                端口号冲突的问题
                        一种:将占用端口的应用结束.
                                netstat -ano
                                打开任务管理器结束:
                        二种:修改自身应用的端口号.
                                tomcat/conf/server.xml




        1.安装Tomcat
                --1.JAVA_HOME要配置正确
                --2.端口号冲突的问题要自己会解决---->去conf-->server.xml去找Connectioner的标签里面去修改
                2.要会在Tomcat中发布自己的项目
                --1.直接拷贝
                --2.在conf--->server.xml中找Host--->Context的标签--->重要的两个属性-->(path(虚拟路径),docBase(实际路径))
                --3.在conf--->引擎文件夹中---主机文件夹中---->创建以.xml结尾的文件(xml的文件名是虚拟路径)--->Context的标签-->一个重要的属性docBase
        2.STS关联Tomcat
                如何关联????
                        window-->prefer--->server--->runtime--->add--->apache7.0--->关联本地tomcat路径
                        server--->new Server--->apache7.0--->open---将默认的项目发送地址给成webapps



Servlet
        什么是Servlet:
                就是一个运行在WEB服务器上的小的Java程序,用来接收和响应从客户端发送过来的请求,通常使用HTTP协议.
                Servlet就是SUN公司提供的一个动态网页开发技术.
        Servlet的作用:
                用来处理从客户端浏览器发送的请求,并且可以对请求作出响应
        使用Servlet:
                编写一个类实现Servlet接口.
                将编写的这个类配置到服务器中.
        Servlet的入门:
                编写类:
                        public class ServletDemo1 implements Servlet{


                                @Override
                                /**
                                 * 为用户处理请求和响应的方法.
                                 */
                                public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
                                        res.getWriter().println("Hello Servlet...");
                                }
                        ...
                        }
                配置:
                          <!-- 配置Servlet -->
                          <servlet>
                                <!-- Servlet的名称 -->
                                <servlet-name>test1</servlet-name>
                                <!-- SErvlet的全路径 -->
                                <servlet-class>com.itheima.a_servlet.ServletDemo1</servlet-class>
                          </servlet>
                          
                          <!-- Servlet的映射 -->
                          <servlet-mapping>
                                <!-- Servlet的名称 -->
                                <servlet-name>test1</servlet-name>
                                <!-- Servlet的访问路径 -->
                                <url-pattern>/ServletDemo1</url-pattern>
                          </servlet-mapping>
                访问:


               
        使用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()
        重定向               
                response.sendRedirect(需要跳转到的页面)需要写项目名


        文件下载的方式
                一种:超链接下载.直接将文件的路径写到超链接的href中.---前提:文件类型,浏览器不支持.
                二种:手动编写代码的方式完成文件的下载.
                        设置两个头和一个流:
                                Content-Type                :文件的MIME的类型.
                                Content-Disposition        :以下载的形式打开文件.
                                        格式:Content-Disposition:attachment;filename=文件名(设置下载时的文件名)
                                InputStream                        :文件的输入流.


        中文文件的下载:
                解决系统无法找到文件
                        将filename从iso-8859-1编码变成utf-8;
                                String filename=filename.getBytes("ISO8859-1","UTF-8");
                解决文件名乱码问题
                        IE浏览器下载中文文件的时候采用的URL的编码.
                        Firefox(火狐)浏览器下载中文文件的时候采用的是Base64的编码.
                       
                        使用URLEncoder.encode(文件名,UTF-8)解决URL编码的问题
                        使用以下方法解决base64编码的问题
                                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);
                                        }
                                }



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的作用范围:
                        作用范围就是一次请求的范围.
                        创建和销毁:
                                创建:客户端向服务器发送了一次请求以后,服务器就会创建一个request的对象.
                                销毁:当服务器对这次请求作出了响应之后.
                       
        处理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


        重定向               
                response.sendRedirect(需要跳转到的页面)需要写项目名
        转发
                request.getRequestDispatch(需要跳转到的页面).forward(reqrest,response);


        重定向和转发的区别:(redirect和forward的区别)
                1.重定向的地址栏会发生变化,转发的地址栏不变.
                2.重定向两次请求两次响应,转发一次请求一次响应.
                3.重定向路径需要加工程名,转发的路径不需要加工程名.
                4.重定向可以跳转到任意网站,转发只能在服务器内部进行转发.



Cookie
        会话技术
                什么是会话        :用户打开一个浏览器访问页面,访问网站的很多页面,访问完成后将浏览器关闭的过程称为是一次会话.
                常见的会话技术:
                        Cookie        :将数据保存到客户端浏览器.
                        Session        :将数据保存到服务器端.
                为什么使用会话技术?
                        私有的数据,购物信息数据保存在会话技术中.


        Cookie技术的使用
                向浏览器保存数据:
                        HttpServletResponse有一个方法:
                                void addCookie(Cookie cookie);
                获得浏览器带过来的Cookie:
                        HttpServletRequest有一个方法:
                                Cookie[] getCookies();
                创建一个Cookie对象:
                        Cookie(String name,String value);


        Cookie的常用方法
                getName();
                getValue();
                setDomain(String domain); -- 设置Cookie的有效域名. //  www.baidu.com  music.baidu.com
                setPath(String path); -- 设置Cookie的有效路径.
                setMaxAge(int maxAge); -- 设置Cookie的有效时间.


        Cookie的分类有关:
                会话级别的Cookie:默认的Cookie.关闭浏览器Cookie就会销毁.
                持久级别的Cookie:可以设置Cookie的有效时间.那么关闭浏览器Cookie还会存在. 手动销毁持久性Cookie. setMaxAge(0)---前提是有效路径必须一致.



Session
        Session的概述
                Cookie本身是有大小和个数的限制.Session没有限制.Cookie的数据保存在客户端,Session数据保存在服务器端.
                        Session的执行原理:基于Cookie的.
                获得Session:
                        request.getSession().getAttribute();--->如果拾的cookie有JSEEIONID的话,就会打开对应的区域,而不会创建新的区域,                                       


        Session何时创建和销毁?作用范围:
                创建:服务器端第一次调用getSession()创建session.
                销毁:三种情况销毁session:
                        1.session过期. 默认过期时间为30分钟.如果想要session永久有效---可以去conf文件夹-->web.xml-->的有效时间改为0就能永久有效
                        2.非正常关闭服务器.如果正常关闭session序列化到硬盘.--->如果session存储有对象,这个对象要实现序列化接口
                        3.手动调用session.invalidate();---->这个方法是将session销毁一般用不到, 我们平时想要去销毁一个数据,通过removeAttribute去销毁
                作用范围:多次请求.(一次会话)









欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2