黑马程序员技术交流社区

标题: 【济南中心】JavaEE就业班同步笔记第一阶段:JavaWeb之XML&Tomcat [打印本页]

作者: 小鲁哥哥    时间: 2016-12-29 21:37
标题: 【济南中心】JavaEE就业班同步笔记第一阶段:JavaWeb之XML&Tomcat
本帖最后由 小鲁哥哥 于 2020-1-8 21:58 编辑

点击查看济南黑马校区最新开班计划

【济南中心】JavaEE就业班同步笔记第一阶段:
JavaWeb之核心技术--XML&Tomcat

1 案例一:使用XML作为配置文件的方式完成模拟Tomcat.
1.1 需求:
现在有一套页面,这套页面想被其他人访问到.端口号可以进行修改的-(不修改源码的基础上).
1.2 分析:
1.2.1   技术分析:
【XML的概述】

**** 允许用户自定义标签的!!!
* 传输 和 存取数据.
* 软件的配置文件.
* XML的语法.
【XML的语法】
* XML必须有关闭标签
* 区分大小写
* 属性需要有引号
* 标签必须正确嵌套.
* 文档声明:通常出现在XML的第一行第一列的位置!!!
* 写法:
    * <?xml 属性名=”属性值” 属性名=”属性值” ...?>
        * version        :必须的. 使用”1.0”
        * encoding        :字符集. 是使用浏览器打开的时候采用的默认的字符集的编码.
        * standalone        :描述XML文档是否需要依赖其他的文件.
* <!-- XML的注释 -->
* 元素(标签)的命名规范:

***** 名称中不能包含冒号(:)
* 属性的名称规范与元素一致.
***** 属性需要使用引号!
* XML的特殊字符:

* XML的CDATA区:(CDATA:Character Data)
* <![CDATA[  内容  ]]>
【XML的解析】
* DOM解析:DOM:Document Object Model.
* SAX解析:Simple Api for XML.
* DOM和SAX的区别:
dom:一次性将文档加载到内存,形成树形结构进行解析
    缺点:文档特别大易造成内存溢出
    优点:对xml进行增删改操作比较有利
sax:事件驱动方式,一行一样进行 解析
    缺点:不能对文档进行增删改
    优点:如果文档特别大不会造成内存溢出
* JAXP                :SUN公司提供的一套XML的解析的API.
* JDOM                :开源组织提供了一套XML的解析的API-jdom.
* DOM4J                :开源组织提供了一套XML的解析的API-dom4j.
* pull                :主要应用在Android手机端解析XML.
DOM4J的入门案例步骤:
* 【步骤一】导入jar包.dom4j-1.6.1.jar
* 【步骤二】创建解析器
* 【步骤三】解析文档获得代表文档的Document对象.
* 【步骤四】获得跟节点.
* 【步骤五】从跟节点下查找其他的节点.
* 代码实现:
[Java] 纯文本查看 复制代码
@Test
        /**
         * 获得元素的内容:查询的操作.
         */
        public void demo1() throws Exception{
                // 创建解析器
                SAXReader reader = new SAXReader();
                // 解析XML的文档
                Document document = reader.read("xml/demo1.xml");
                // 获得跟节点
                Element root = document.getRootElement();
                System.out.println(root.getName());
                // 查找跟节点下的子节点. element() elements();
                Element pElement = root.element("person"); // 查找的是第一个person元素
                // root.elements("person").get(1); // 查找的是第二个person元素
                Element nElement = pElement.element("name");
                Element aElement = pElement.element("age");
                Element sElement = pElement.element("sex");
                System.out.println(nElement.getText());
                System.out.println(aElement.getText());
                System.out.println(sElement.getText());
        }

* dom4j支持XPath的jar包.
    * jaxen-1.1-beta-6.jar
* dom4j的XPath支持的API:
    * List document.selectNodes(String xPath);
    * Node document.selectSingleNode(String xPath);
* 代码:
        
[Java] 纯文本查看 复制代码
@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"));
                }
        }
1.3 代码实现:
【步骤一】:将基础班的Socket编写的代码复制到工程中.
【步骤二】:新建xml.在conf/server.xml
【步骤三】:使用DOM4J解析XML
[JavaFX] 纯文本查看 复制代码
public class MyServer {
        public static void main(String[] args) throws Exception {
                // 解析XML:
                // 创建解析器
                SAXReader reader = new SAXReader();
                // 解析XML文档:
                Document document = reader.read("conf/server.xml");
                Element element = (Element)document.selectSingleNode("//Connector['@port']");
                String port = element.attributeValue("port");
                // ServerSocket 对象可以监听端口
                ServerSocket serversocket = new ServerSocket(Integer.parseInt(port));
                while(true) {
                        Socket socket = serversocket.accept();        // 等待客户端的连接请求,一旦有请求过来,就结束阻塞,返回客户端对象
                        //System.out.println(socket.getInetAddress());
                        // 一旦有客户来访问, 就另开一个新线程去提供服务, main线程继续等待下一个客户的连接
                        new Thread(new MyService(socket)).start();
                }
        }
}

1.4 总结:
1.4.1 XML的约束:
* 什么是XML的约束:就是用来约束XML的文档中可以出现哪些标签,不能出现哪些标签,标签中是否有顺序,出现的次数.
* XML的约束:用来规范XML的写法.
***** XML的约束的种类及区别?
     * DTD 和 Schema        :
         * 区别:
             1.DTD语法是自成一体的.Schema语法就是XML的语法.
             2.Schema的语法就是XML的语法所以更容易被解析器所解析.
             3.Schema支持名称空间.
             4.Schema有比DTD更加强大的语义和语法的约束.
* DTD的引入方式:
     * 内部的DTD:
   
[XML] 纯文本查看 复制代码
<!DOCTYPE persons [
    ]>
     * 外部的DTD:
         * 一种本地DTD:
         
[XML] 纯文本查看 复制代码
<!DOCTYPE persons SYSTEM "unknown.dtd">

         * 一种网络DTD:
         
[XML] 纯文本查看 复制代码
<!DOCTYPE persons PUBLIC "//UNKNOWN/" "unknown.dtd">

* DTD的语法:
     * 元素:
         * <!ELEMENT 元素名 元素类型>
             * 元素类型:
                 * EMPTY
                 * ANY
                 * 子元素
                     * 是否有序: 使用 逗号(,)或者竖线(|)表示.
                     * 出现的次数:?:零次或一次 +:一次或多次 *:零次或多次
                 * PCDATA
    * 属性:
        * <!ATTLIST 元素名称 属性名称 属性的类型 属性的约束>
            * 属性的类型:
                * ID类型:表示属性值需要是唯一的.
                * CDATA类型:普通的字符串.
                * 枚举:
            * 属性的约束:
                
Schema的语法:(了解)
[XML] 纯文本查看 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<!--
    名称空间:一个XML只能引入一个DTD约束文档.使用了Schema约束XML文档,一个XML可以引入多个Schame的约束!!!
                      如果再多个Schema文档中定义了相同的属性名称 该怎么办?
      * 名称空间类似于java中的package.通过名称空间区分 标签或属性来自于哪个文档的!!!通常名称空间唯一的不重复的即可.一般情况下使用一个URL地址表示一个名称空间.
      
        xmlns                                :xml name sapace .代表当前的文档应用的名称空间.
        targetNameSpace                :目标名称空间.
        elementFormDefault        :
-->
<schema
xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.itheima.com/ee25"
elementFormDefault="qualified">
        <!-- 复杂标签 -->
        <element name="persons">
                <!-- 复杂类型 -->
                <complexType>
                        <sequence maxOccurs="unbounded" minOccurs="1">
                                <element name="person">
                                        <complexType>
                                                <sequence>
                                                        <!-- 简单标签 -->
                                                        <element name="name" type="string"></element>
                                                        <element name="age" type="int"></element>
                                                        <element name="sex" type="string"></element>
                                                </sequence>
                                                <attribute name="id" type="string" use="required"/>
                                        </complexType>
                                </element>
                        </sequence>
                </complexType>
        </element>
</schema>


2 案例二:使用Tomcat发布一个WEB项目.
2.1 需求:
有一个web项目,需要通过tomcat服务器被其他人访问到.
2.2 分析:
2.2.1 技术分析:
【软件的架构】
* Client / Server 客户端和服务器端的软件. 都是需要在PC端安装的软件. 比如 QQ,迅雷,暴风...
* 优点:效果炫,一部分代码写到客户端(速度快).
* 缺点:服务器端更新,客户端都需要更新.
* Browser / Server 浏览器端和服务器端的软件. 不需要安装到PC端,只需要有一个浏览器即可. 比如 京东,网银,WEBQQ,WEB迅雷...
* 优点:服务器端更新,客户端浏览器不需要进行更新.
* 缺点:效果不炫,所有的代码运行都在服务器端,导致服务器压力过大.
    * 效果:使用HTML5,CSS3可以做出很炫效果.
    * 服务器端压力:搭建服务器的集群.而且还有AJAX技术.
【WEB的资源】
* HTML,CSS,JS,图片...
* PHP:
* ASP:
* Servlet/JSP:
【服务器】
【常见WEB服务器】
【WEB动态资源目录结构】
website
    |-----静态资源
    |-----WEB-INF
                |-----web.xml        :必须的
                |-----classes        :可选的
                |-----lib                :可选的
2.3 案例实现:
2.3.1 Tomcat的安装:
【下载Tomcat】
http://tomcat.apache.org/download-70.cgi
【安装Tomcat】
解压即可.
【了解Tomcat的目录结构】

* bin                        :tomcat的执行的文件.
* conf                :tomcat的配置文件.
* lib                        :tomcat运行的需要的jar包.
* logs                :tomcat的运行的日志文件.
* temp                :tomcat产生临时文件存放的路径.
* webapps        :tomcat发布的web项目的路径.
* work                :tomcat运行JSP的时候,JSP翻译成Servlet的代码存放的路径.
2.3.2 发布一个WEB项目到Tomcat中.
* 1.直接将工程copy到tomcat/webapps下.
* 2.配置tomcat虚拟路径:
* 3.配置tomcat虚拟路径:
【方式一:直接将项目copy到webapps下】
* 将工程复制到webapps即可.
【方式二:配置tomcat的虚拟路径-不推荐】
* 在tomcat/conf/server.xml文件中进行配置:
* 在<Host>标签下配置:
    * <Context path="/itheima" docBase="C:/website"/>
【方式三:配置tomcat的虚拟路径-推荐】
* 在tomcat/conf/Catalina/localhost/xxx.xml
* 配置<Context docBase="C:/website"/>
* xxx作为虚拟路径的名称.
2.4 总结:
2.4.1 Tomcat常见问题:
【没有配置JAVA_HOME引发tomcat一闪消失】
* 一定要配置JAVA_HOME环境变量.
【端口号冲突的问题】
* 一种:将占用端口的应用结束.
    * netstat -ano
    * 打开任务管理器结束:
* 二种:修改自身应用的端口号.
    * tomcat/conf/server.xml

作者: Mr_Maty    时间: 2016-12-29 21:41
不错,顶起

作者: @211    时间: 2017-1-1 16:29
不错,很好的!
作者: 小陵不懂    时间: 2017-1-2 09:52
这样的笔记真不错哦
作者: 小虎同学    时间: 2017-1-3 10:33
不错不错,顶起来

作者: 事难懂    时间: 2017-1-3 13:29
好东西,果断收藏了
作者: hittor    时间: 2017-1-3 19:20
感谢分享!
作者: Yin灬Yan    时间: 2017-1-10 00:11
好帖子 收藏下
作者: 185447328    时间: 2017-1-10 14:16
asdkgjkadfhgadkjhgkdajhgljdkfahkjdaflhgkjdfahglda
作者: zmanx    时间: 2017-2-12 21:52
我们还没开始毕业班呢,基础知识还有好多不懂的
作者: 爱吃橘子的小泽    时间: 2017-2-12 22:02
定一下,我们现在还在努力
作者: zmanx    时间: 2017-2-12 22:05
一起加油吧,我还是小白,加油吧
作者: a690223483    时间: 2017-2-26 11:28
谢谢分享
作者: xulinml    时间: 2017-2-28 08:58
谢谢老师~!~感谢感谢
作者: 为过去的我买单    时间: 2017-3-2 10:05
谢谢分享!
作者: zhouxiaoyang    时间: 2017-3-26 23:26

作者: ys5214    时间: 2017-3-31 11:16
666666666666666666
作者: Cerol    时间: 2017-4-12 17:19
力挺楼主,支持你   666
作者: hrywxn    时间: 2017-5-22 22:23
学习一下,真不错
作者: 3371906349    时间: 2017-5-29 23:17
非常感谢楼主大大的无私奉献
作者: 3371906349    时间: 2017-5-29 23:23
非常感谢楼主大大的无私奉献
作者: liujinlong666    时间: 2017-5-30 00:10
谢谢分享
作者: liujinlong666    时间: 2017-5-30 00:11
谢谢分享
作者: liujinlong666    时间: 2017-5-31 00:11
谢谢分享!!
作者: dhj    时间: 2017-6-11 16:46
感谢分享!!!!
作者: str.arr    时间: 2017-7-9 09:45
要是我们的版块也能多出一些像楼主这么好的帖子就好了,可惜几个人都没有
作者: cheat    时间: 2017-7-10 22:29
不错,谢谢分享。
作者: 梁修成    时间: 2017-7-10 22:29

这样的笔记真不错哦!
作者: k1453711238    时间: 2017-8-2 22:41
多谢大哥分享啊,希望持续更新啊
作者: →_→←_←    时间: 2017-8-3 13:06
学习ing.....
作者: rimfwfn    时间: 2017-8-3 18:54
很好,感谢分享!!
作者: at123    时间: 2017-8-7 23:15

黑马币来了,大家加油哦。。。
作者: iMoney    时间: 2017-10-12 17:55
这个还没学,先收藏
作者: newu    时间: 2017-10-12 22:32
力挺楼主,支持你   666
作者: 仙锄    时间: 2017-11-19 23:55
感谢分享
作者: 体育    时间: 2017-11-28 23:13
推荐孔祥熙宅院n

作者: 你好,黑马    时间: 2017-12-22 19:19
不错,加油!!!




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