zoukankan      html  css  js  c++  java
  • 0305 xml

    web编程

    可以通过浏览器访问web服务器上的资源了

    什么是xml

    xml是可扩展标记语言,XML语法上和HTML比较相似,但HTML中的元素是固定的,而XML的标签是可以由用户自定义的

    xml格式:

    文档声明必须为<?xml开头,以?>结束

    元素:

    普通元素的结构开始标签、元素体、结束标签组成。例如:<hello>大家好</hello

    元素体:元素体可以是元素,也可以是文本,例如:<b><a>你好</a ></b>

    空元素:空元素只有开始标签,而没有结束标签,但元素必须自己闭介,例如:<c/>

    元素命名:

    区分大小写

    不能使用空格,不能使用冒号

    不建议以XML,  xml,  Xml开头

    格式化良好的XML文档,必须只有一个根元素

    属性:

    属性的定义格式:属性名=属性值,其中属性值必须使用单引或双引

    一个元素可以有O ~ N个属性,但一个元素中不能出现同名属性

    属性名不能使用空格、冒号等特殊字符,且必须以字母开头

    注释:

    XML的注释与HTML相同,即以“<!--”开始,以“-->”结束

    因为很多符号己经被XML文档结构所使用,所以在元素体或属性值中想使用这些符号就必须使用转义字符,例如:"<"、”>”、” ’ ”、” ” ”、”&”

    那么我们就要采用CDATA区 将代码包裹起来

    我们先写一个简单的,创建一个demo01.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <school>
    	<class1>
    		<student name="张三" age="18"></student>
    		<student name="李斯" age="18"></student>
    	</class1>
    	<class2>
    		<student name="小红" age="18"></student>
    		<student name="小绿" age="18"></student>
    	</class2>
    	<class3>
    		<![CDATA[
    			if(a<b&&a>100){
    				a=1;
    			}
    		]]>
    	</class3>
    </school>
    

      像上述代码中我们自定义了一些标签,但是感觉并没有什么任何意义,所以提供了DTD约束和Schema约束,去约束xml文件的代码编写

    1、DTD约束,我们将web-app_2_3.dtd文件打开发现

    <?xml version="1.0" encoding="UTF-8"?>
    <!--
    	模拟servlet2.3规范,如果开发人员需要在xml使用当前DTD约束,必须包括DOCTYPE。
    	格式如下:
    	<!DOCTYPE web-app SYSTEM "web-app_2_3.dtd">
    -->
    <!ELEMENT web-app (servlet*,servlet-mapping* , welcome-file-list?) >
    <!ELEMENT servlet (servlet-name,description?,(servlet-class|jsp-file))>
    <!ELEMENT servlet-mapping (servlet-name,url-pattern+) >
    <!ELEMENT servlet-name (#PCDATA)>
    <!ELEMENT servlet-class (#PCDATA)>
    <!ELEMENT url-pattern (#PCDATA)>
    <!ELEMENT description (#PCDATA)>
    <!ELEMENT jsp-file (#PCDATA)>
    
    <!ELEMENT welcome-file-list (welcome-file+)>
    <!ELEMENT welcome-file (#PCDATA)>
    
    <!ATTLIST web-app version CDATA #IMPLIED>
    

      上述DTD约束中规定了xml文件 的根标签 子标签的书写规范,什么标签下必须有什么标签,那我们再创建一个web.xml文件

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE web-app SYSTEM "web-app_2_3.dtd">
    <web-app>
    	<servlet>
    		<servlet-name>MyServlet</servlet-name>
    		<servlet-class>com.oracle.demo01.MyServlet</servlet-class>
    	</servlet>
    	<servlet-mapping>
    		<servlet-name>MyServlet</servlet-name>
    		<url-pattern>/MyServlet</url-pattern>
    	</servlet-mapping>
    </web-app>
    

      我们只需要将web-app_2_3.dtd文件中的<!DOCTYPE web-app SYSTEM "web-app_2_3.dtd">这句代码粘贴到我们创建的xml文件中,按照提示将标签点出来就OK了

    2、Schema约束,和DTD约束用法是一样的。Schema约束比DTD约束要强大一点

    那么我们将完整包名加类名写在了xml文件的标签中,那我们只能获取到他的内容我们才能去进行反射 获取他的类对象,从而操作类的方法

    依旧采用dom树的思路去获取标签内容,那么久用到了dom4jjar包

    dom4j必须使用核心类SaxReader加载xml文档获得Document通过Document对象获得文档的根元素

    SaxReader类中有一个read方法 用于加载xml文件,返回值是一个document对象,

    document类中有一个getRootElement方法获取根元素,返回值是Element对象

    Element中

    elements获取指定名称的所有子元素

    element 获取指定名称的第一个子元素

    getName 获取当前元素的元素名称

    attributeValue 获取指定属性名的属性值

    elementText获取指定子元素的文本值

    getTxt获取当然元素的文本内容

    代码展示

    先将jar包导入到项目中

     将Schema约束文件放在同一个包中

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- 
    	模拟servlet2.5规范,如果开发人员需要在xml使用当前Schema约束,必须包括指定命名空间。
    	格式如下:
    	<web-app xmlns="http://www.example.org/web-app_2_5" 
    			xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    			xsi:schemaLocation="http://www.example.org/web-app_2_5 web-app_2_5.xsd"
    			version="2.5">
    -->
    <xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" 
    	targetNamespace="http://www.example.org/web-app_2_5"
    	xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    	xmlns:tns="http://www.example.org/web-app_2_5" 
    	elementFormDefault="qualified">
    	
    	<xsd:element name="web-app">
    		<xsd:complexType>
    			<xsd:choice minOccurs="0" maxOccurs="unbounded">
    				<xsd:element name="servlet">
    					<xsd:complexType>
    						<xsd:sequence>
    							<xsd:element name="servlet-name"></xsd:element>
    							<xsd:element name="servlet-class"></xsd:element>
    						</xsd:sequence>
    					</xsd:complexType>
    				</xsd:element>
    				<xsd:element name="servlet-mapping">
    					<xsd:complexType>
    						<xsd:sequence>
    							<xsd:element name="servlet-name"></xsd:element>
    							<xsd:element name="url-pattern" maxOccurs="unbounded"></xsd:element>
    						</xsd:sequence>
    					</xsd:complexType>
    				</xsd:element>
    				<xsd:element name="welcome-file-list">
    					<xsd:complexType>
    						<xsd:sequence>
    							<xsd:element name="welcome-file" maxOccurs="unbounded"></xsd:element>
    						</xsd:sequence>
    					</xsd:complexType>
    				</xsd:element>
    			</xsd:choice>
    			<xsd:attribute name="version" type="double" use="optional"></xsd:attribute>
    		</xsd:complexType>
    	</xsd:element>
    </xsd:schema>
    

      将上述代码中的

    <web-app xmlns="http://www.example.org/web-app_2_5" 
    			xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    			xsi:schemaLocation="http://www.example.org/web-app_2_5 web-app_2_5.xsd"
    			version="2.5">

    复制到创建的web.xml中

    创建web.xml文件

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://www.example.org/web-app_2_5" 
    			xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    			xsi:schemaLocation="http://www.example.org/web-app_2_5 web-app_2_5.xsd"
    			version="2.5">
    			<servlet>
    				<servlet-name>HelloServlet</servlet-name>
    				<servlet-class>com.oracle.demo02.HelloServlet</servlet-class>
    			</servlet>
    			<servlet-mapping>
    				<servlet-name>HelloServlet</servlet-name>
    				<url-pattern>/HelloServlet</url-pattern>
    			</servlet-mapping>
    </web-app>
    

      创建HelloServlet类

    public class HelloServlet {
    
    	public void init(){
    		System.out.println("Servlet创建啦");
    	}
    	public void service(){
    		System.out.println("Servlet被访问了");
    	}
    	public void destory(){
    		System.out.println("Servlet被销毁了");
    	}
    }
    

      

    创建测试类

    public class Demo01 {
    
    	public static void main(String[] args) throws DocumentException, ClassNotFoundException, InstantiationException, IllegalAccessException {
    		//加载xml文档 获取整个文档对象
    		SAXReader sax=new SAXReader();
    		Document doc=sax.read("src/com/oracle/demo02/web.xml");
    		//获取根元素对象
    		Element root=doc.getRootElement();
    		//获取servlet标签
    		Element servlet=root.element("servlet");
    		//获取servlet-class元素对象
    		Element servletClass=servlet.element("servlet-class");
    		//获取当前元素文本内容
    		String className=servletClass.getText();
    		//获取字节码文件
    		Class c=Class.forName(className);
    		//快速创建对象
    		HelloServlet hello=(HelloServlet)c.newInstance();
    		//获取成员方法对象
    		hello.init();
    		hello.service();
    		hello.destory();
    	}
    }
    

      运行结果

    Servlet创建啦
    Servlet被访问了
    Servlet被销毁了

  • 相关阅读:
    现身说法“好奇心害死人啊”
    代码错误集合(全是低级错误,欢迎高手前来指教)
    Return from TAOKEE
    泡了DOUBAN一个下午,思考中。。。
    买了两本书
    PDFBox,PDF文件处理
    数据库营销,DM杂志
    一个JS写的时间选择显示的控件,源文件下载
    WEB2.0新想法,让明星还有你无所遁行,让你我都做“狗仔队”
    hdu 1237 简单计算器 (栈的简单应用)
  • 原文地址:https://www.cnblogs.com/-gongxue/p/14486838.html
Copyright © 2011-2022 走看看