⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 复习5.txt

📁 Java大部分的基础知识,EJB3,EJB2,WEBSERVICE,SOAP,JMS,MQ,还有些面试题
💻 TXT
字号:
xml:
	1、xml
		1、作用:用于传输数据,html用于显示数据,xml在数据交换、配置文件中
			用的非常多。
			html中标签是固定不变而xml中的标签可以自定义。
		2、元素:
			节点:
				标签
				属性
			文本:
				标签中的值
			<customer customerID="1">
				<customerName>张ddd三</customeName>
			</customer>
		3、正规的xml文件要求
			1、有一个根元素,包括所有子元素。
			2、标签区分大小写,标签必须正确嵌套。
			3、一个标签内的属性名不能重名,标签的值用'号或"括起来。
			4、注释不可以嵌套,在标签内不可以用注释。
				<!--
					<customer><!----></customer>
				-->
				<customer<!---->></customer>
			5、原样输出,里面可以放除<![[或]]>的所有的字符
				<![CDATA[]]>
			6、标签的文本值中不能直接给>,<,',",&,面是通过实体代替
				&gt; 是>
				&lt; 是<
				&quot; 是"
				&amp;  是&
				&apos; 是'
		4、xml的命名空间,如果引入了两个dtd或两个schema,为了区分
			来自不同定义文件但标签却相同的标签,前面加前缀
			进行区分。
			命名空间的定义:
				在声明部分声明:
					xmlns:前缀名="uri"
					如:
						<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
				标签有两部分组成,一是前缀,另一是本地名
	二、dtd
		1、作用:定义xml文件的格式,规范xml文件格式。
		2、具体定义:
			1、元素
				<!ELEMENT customers(customer+)>
				<!ELEMENT customer(customerName,sex,age)>
				<!ELEMENT customerName (#PCDATA)>
				<!ELEMENT sex (#PCDATA)>
				<!ELEMENT age (#PCDATA)>
				元素套元素时:
					+:1..n
					*:0..n
					?:0..1
					|:多选一]
					,:依次出现
					没有:出现一次
				元素是文本:
					#(PCDATA)
			2、属性
				<!ATTRLIST 元素名  属性名 属性类型 属性修饰>
					属性类型:
						CDATA  文本
						ID    不可重复,首位必须是字母的文本
					属性修饰
						#IMPLIED:可有可无
						#REQUIRED:必须有
	三、schema(xsd):也dtd的作用一样,也是定义xml文件格式的,但比dtd的功能更加强大
		   ,更好的支持命名空间,数据的类型更加非富,类型可以自己定义。
		   1、核心标签
		   	complexType:如果有子元素或属性必须通过complexType说明。
		   		<complexType>
		   			<sequence>必须出现,顺序出现
		   				<element name="customerName" type="xs:string" minOccors="0" maxOccors="unbounded"/>
		   				<element name="sex" type="xs:string" minOccors="0" maxOccors="unbounded"/>
		   				<element name="age" type="xs:string" minOccors="0" maxOccors="unbounded"/>
		   			</sequence>
		   		</complexType>
		   		<complexType>
		   			<choice> 多选一
		   				<element name="customerName" type="xs:string" minOccors="0" maxOccors="unbounded"/>
		   				<element name="sex" type="xs:string" minOccors="0" maxOccors="unbounded"/>
		   				<element name="age" type="xs:string" minOccors="0" maxOccors="unbounded"/>
		   			</choice>
		   		</complexType>	   		
		   		<customerName type="java.lang.String">张三</customerName>
		   		ComplexType
		   			SimpleContent
		   				extension
		   					attribute	   			
		   	SimpleType:只说明元素的文本或属性的值。
		   		<simpleType>
		   			<restriction base="xs:string">
		   				<minInclude value="a"> //>=最小值
		   				<maxInclude value="z"> //<=最大值
		   				<minExclusive value="a"> //>最小值
		   				<maxExclusive value="z"> //<最大值
		   				<enumeration value="序列"/>//序列
		   			</restriction>
		   		</simpleType>
		   		<customerName>aa</customerName>
		   		<customer customerID="a001"></customer>
		   	type:每一个元素有一个type属性,其指向具体的simpleType或
		   	     complexType说明元素的内容。
	四、xsl
		作用:将xml转化成html
		注意事项:
			必须有一个模板
		标签:
			<template match="/">:是xsl必须有的模板
			<apply-templates select="路径"/>
			--循环
			<foreach>
			--排序
			<sort select="元素名" order=""/>
			--判断
			--if
				<if test="元素=''">
				</if>
				<if test="元素  lt; ''">
				</if>	
		
				<if test="@属性名=''">
				</if>
	
			--choose
				<choose>
					<when test=''></when>
					<otherwise></otherwise>
				</choose>
	
				<choose>
					<when test="students/student[(score &lt;85 or score =85) and sex='女']"></when>
					<otherwise></otherwise>
				</choose>
			--变量
				<varial name="a1">
					<value-of>count(students/student)</value-of>
				</varial>
	
				<varial name="a2">
					<value-of>sum(students/student/score)</value-of>
				</varial>
	
				<varial name="a3">
					<value-of>round(($a1 div $a2)*10) div 10</value-of>
				</varial>
			--取值
				<value-of/>
			--应用模块可以代循环
			--数据的转化
				--两个源(xml、xsl),一个目标(html)
				trans.tranformer(new DOMSource(doc),new StreamResult("a.xml"));
	五、dom解析
		特点:将整个xml文件加载到内存中,形成一个对象树,每一个节点都是一个对象
		     通过每一个节点的方法及属性与外部交互。
		优点及缺点:
			优点:
				可随意读,可写
			缺点:
				因为要将所有的内容加载内存中,耗内存,速度慢。
		dom中的六大接口:
			Document:代表xml文件文档
				NodeList nl=doc.getElementsByTagName("customer");
				doc.createElement("customer");//创建一个节点
				doc.createTextNode("");//创建文本节点
				doc.appendChild();//增中根元素
				doc.documentElement;//得到根元素
			Node:节点
				Element:一个元素
					NodeList nl=cod.getElementsByTagName("customer");
					setAttribute("属性名","值");//设值
					getAttribute("属性名");//取值
				TextNode:文本节点
					tn.getNodeValue();//文本值
			NodeList:节点集合
				nl.getLength();//得到长度
				nl.item(0);//取一个元素
			Attribute:属性
		dom的解析过程:
			//得到一个解析器工厂
			DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
			//得到一个解析器
			DocumentBuilder db=dbf.newDocumentBuilder();
			//解析
			Document doc=db.parse("c:\a.xml");
		dom内容的写出
			//得到一个传输工厂
			TransformerFactory tff=TransformerFactory.newInstance();
			//得到一传输器
			Transformer former=tff.newTransformer();
			//传输
			former.transform(new DOMSource(doc),new ResultStream("c:\a.xml"));
	五、sax解析
		特点:边读边解析,只读、只进,j2ee相关的配置文件是通过sax解析的。
		优:
			快,所耗资源小
		缺:
			只读,只进
		实现:
			1、实现一个处理类,必须继承于DefaultHandler
				public class MyHandler extends DefaultHandler
				{
					//文档开始时触发
					public void startDocument();
					//元素开始时触发
					public void startElement();
					//元素结束时触发
					public void endElement();
					//文档结束时触发
					public void endDocument();
					//碰到文本时触发
					public void characters();				
				}
			2、通过sax解析
				SAXParserFactory spf=SAXParserFactory.newInstance();
				SAXParser sp=spf.newSAXParser();
				sp.parse("c:\a.xml",new MyHandler());
		作业: 
			create table student
			(
				studentID int primary key,
				studentName varchar2(20),
				sex varchar2(20),
				birthday date,
				like varchar2(20)
			)
			studentID及like是属性,其余是子元素
			编写dtd、schema、xml、通过xsl将xml的信息转化为一个表格的html
			将xml信息解析写入到数据库、从数据库读取student信息
			写入到xml文件中用两种方式。	
			2、通过sax解析customer.xml文件将内容写入到数据库中。
io
	io流整体总结
			用的是装饰模式,装饰模式有四个角色,分别是通用接口、本原、抽象装饰、
		具体装饰,因为是将本原聚合到了装饰中,所以可以将本原或装饰通过构造子注入到
		另一个装饰,多个装饰可以随意的组合,形成一个综合的功能对象。
			io流分为输入流及输出流,输入流是文件到内存,输出流是内存到文件。
		流分为低层流及高层流,在实例化高层流时必须通过构造子将低层流注入到高层
		流中。输入流通用的方法是read(),read(char[]),read(byte[]),readline,输出流
		的通用方法是write(int),write(byte[]),write[char[]],print("string")。
		当读取一个文件时,对于以字节/字节数组,字符/字符数组读取的结束条件是!=-1,
		对于以字符串读取的结束条件是!=null。对于有缓存的输出时,要想写入到文件
		必须flush或close。
		输入字节流的体系结构
					InputStream
			FileInputStream			FilterInputStream
					ObjectInputStream	DataInputStream		BufferedInputStream
			实现代码:
				--读一个字节
				int temp=fis.read();
				while(temp!=-1)
				{
					System.out.print(temp);
					temp=fis.read();
				}
				--读一批字节
				byte[] bytes=new byte[1000];
				int result=fis.read(bytes);
				while(result!=-1)
				{
					String temp=new String(bytes,0,result);
					result=fis.read(bytes);
				}
		输出的字节流:
					OutputStream
			FileOutputStream		FilterOutputStreame
					ObjectOutputStream	BufferedOutputStream	DataOutputStream    PrintStream
		输出字节流代码:
			int temp;
			fis.write(temp);
			byte temps[]=new byte[1000];
			fos.write(temps);
		输入的字符流
					Reader
			FileReader			InputStreamReader(将字节流转化字符流)
							BufferedReader(有缓存)
		输入字符流的实现
			BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
			String temp=br.readLine();
			while(temp!=null)
			{
				temp=br.readLine();
			}
		输出的字符流:
					Writer
			FileWriter			OutputStreamWriter
						BufferedWriter		PrintWriter
		输出字符流代码:
			fw.write(int)
			fw.write(char[])
			fw.write("string");
	PrintStream、BufferedWriter、PrintWriter
		PrintStream:属于字节流,即可以打印字节也可以打印数组,
			    写入文件不用close或flush,e.printStackTrace()
			    System.out.println()都是它的实例。
		BufferedWriter、PrintWriter:属于字符流,只可以打印字符或字符串
			 因为有缓存,要想写入文件必须close或flush

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -