一、xml
XML 指可扩展标记语言(EXtensible Markup Language),也是一种标记语言,很类似 HTML。它的设计宗旨是传输数据,而非显示数据它。标签没有被预定义,需要自行定义标签。但在加了约束性条件后就得严格按照约束来。
作用:存储数据、配置文件(主要作用)
书写规范:
1.区分大小写
2.应该有一个根标签,所有内容放在根标签中
3.标签必须关闭
<xx></xx>
<xx/>
4.属性必须用引号引起来
<xx att="value"/>
5.标签体中的空格或者换行或者制表符等内容都是作为数据内容存在的
<xx>aa</xx>
<xx> aa </xx>
6.特殊字符必须转义
< > &
满足上面规范的文件我们称之为是一个格式良好的xml文件。
1.xml组成部分
声明:告诉别人我是一个xml文件
格式:<?xml ..... ?>
例如:<?xml version='1.0' encoding='utf-8' standalone="yes|no"?>,就只有版本1.0,standalone="yes|no"是指是否是个单独的文件,现在基本不用。
要求:必须在xml文件的第一行、必须顶格写,不能有空格。
元素(标签):
格式:<xx></xx>、<xx/>
要求:
1.必须关闭
2.标签名不能 xml Xml XML 等等开头
3.标签名中不能出现" "或者":"等特殊字符
属性:<xx 属性名="属性值"/>,属性必须用引号引起来
注释:和html一样,<!-- 注释内容 -->
CDATA:xml文件的特殊字符必须转义,但是通过cdataky可以保证数据就按照特殊字符的原样输出。
<![CDATA[
原样输出的内容
]]>
二、xml解析
解析方式:
1.sax:逐行解析,从上到下,只能查询,不能增删改查。
2.dom:一次性将文档加载到内容中,形成一个dom树,可以对dom树curd操作。
解析技术:
JAXP:sun公司提供支持DOM和SAX开发包,用的很少
JDom:dom4j兄弟,名字不一样而已
jsoup:一种处理HTML特定解析开发包
dom4j:常用的解析开发包,hibernate底层也采用,JDom的升级品。
1.dom4j
使用步骤:
1.导入jar包,dom4j-1.6.1.jar
2.创建一个核心对象 SAXReader:SAXReader reader = new SAXReader();
3.将xml文档加载到内存中形成一棵树
Document doc=reader.read(文件路径名称);路径的“\”要进行转义,写成“\\”
4.获取根节点:Element root=doc.getRootElement();
5.通过根节点就可以获取其他节点(文本节点,属性节点,元素节点)
获取所有的子元素:List<Element> list=root.elements();
获取自定标签的元素:List<Element> list = root.elements( "servlet");
获取元素的指定属性内容:
String value=root.attributeValue("version");
String value=ele.attributeValue("id");
获取子标签标签体:遍历list 获取到每一个子元素,只获取根标签下,子标签的标签里面的内容,再往下获取不到: String text=ele.elementText("子标签名称")。
6.存在的问题是找节点太费力,所以引入XPath。
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5">
<servlet>
<servlet-name>HelloMyServlet</servlet-name>
<servlet-class>cn.itcast.e_web.HelloMyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloMyServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>HelloMyServlet2</servlet-name>
<servlet-class>cn.itcast.e_web.HelloMyServlet2</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloMyServlet2</servlet-name>
<url-pattern>/hello2</url-pattern>
</servlet-mapping>
</web-app>
解析实现:
SAXReader reader = new SAXReader();
Document doc = reader.read("D:\\eclipsewk\\28\\day08\\xml\\web.xml");
Element root=doc.getRootElement();
String value = root.attributeValue("version");
System.out.println(value);
List<Element> list = root.elements();
for (Element ele : list) {
String text = ele.elementText("servlet-name");
System.out.println(text);
}
2.xpath
依赖于dom4j,需要导入dom4j。xpath解析技术可以直接获取到自己指定节点的内容,比dom4j方便。
使用步骤:
1.导入jar包(dom4j和jaxen-1.1-beta-6.jar)
2.加载xml文件到内存中
3.使用api
selectNode("表达式");获取一组标签
selectSingleNode("表达式");
表达式的写法:
/ :从根节点选取
// :从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置
例如一个标签下有一个id属性且有值 id=2;
格式://元素名[@属性名='属性值']
Element ele=(Element)doc.selectSingleNode("//servlet-name[@id='3']");
Document doc=new SAXReader().read("D:\\eclipsewk\\28\\day08\\xml\\web.xml");
//获取节点
//List<Element> list = doc.selectNodes("/web-app/servlet/servlet-name");
//Element ele = list.get(0);
Element ele=(Element) doc.selectSingleNode("//servlet/servlet-name");
System.out.println(ele.getText());
三、xml约束
作用:规定xml中可以出现哪些元素及哪些属性,以及他们出现的顺序。
约束的分类:
DTD约束:struts,hiebernate等等。文件以dtd后缀。
SCHEMA约束:tomcat spring等等
DTD约束:和xml的关联 (一般都会提供好,复制过来即可,有时候连复制都不需要)
方式1:内部关联
格式:<!DOCTYPE 根元素名 [dtd语法]>
方式2:外部关联-系统关联
格式:<!DOCTYPE 根元素名 SYSTEM "约束文件的位置">
例如:<!DOCTYPE web-app SYSTEM "web-app_2_3.dtd">
方式3:外部关联-公共关联
格式:<!DOCTYPE 根元素名 PUBLIC "约束文件的名称" "约束文件的位置">
<?xml version="1.0" encoding="UTF-8"?>
<!--
传智播客DTD教学实例文档。
模拟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 welcome-file-list (welcome-file+)>
<!ELEMENT welcome-file (#PCDATA)>
<!ATTLIST web-app version CDATA #IMPLIED>
1.DTD语法
元素:<!Element 元素名称 (数据类型|包含内容)>
数据类型:#PCDATA:普通文本,使用的时候一般用()引起来
包含内容:该元素下可以出现那些元素 用()引起来
<!ELEMENT servlet (servlet-name,description?,(servlet-class|jsp-file))>
符号:
* 出现任意次
? 出现1次或者0次
+ 出现至少1次
| 或者
() 分组
, 顺序
属性:
格式: <!ATTLIST 元素名 属性名 属性类型 #属性是否必须出现>
属性类型:
ID:唯一
CDATA:普通文本
属性是否必须出现
REQUIRED:必须出现
IMPLIED:可以不出现
例如:<!ATTLIST web-app version CDATA #IMPLIED>
注意:一个xml文档中只能添加一个DTD约束,如果要添加多个约束则需要用到SCHEMA。
2.SCHEMA
使一个xml文档中可以添加多个schema约束。文件以xsd后缀。
<?xml version="1.0" encoding="UTF-8"?>
<!--
传智播客Schema教学实例文档。
模拟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"></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>
xml和schema的关联。
格式:
<根标签 xmlns="..." ...>
<根标签 xmlns:别名="..." ...>
名称空间:如果一个XML文档中使用多个Schema文件,而这些Schema文件中定义了相同名称的元素时就会出现名字冲突。这就像一个Java文件中使用了import java.util.*和import java.sql.*时,在使用Date类时,那么就不明确Date是哪个包下的Date了。
总之名称空间就是用来处理元素和属性的名称冲突问题,与Java中的包是同一用途。如果每个元素和属性都有自己的名称空间,那么就不会出现名字冲突问题,就像是每个类都有自己所在的包一样,那么类名就不会出现冲突。
<?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></servlet-name>
<servlet-class></servlet-class>
</servlet>
<servlet-mapping>
<servlet-name></servlet-name>
<url-pattern></url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file></welcome-file>
<welcome-file></welcome-file>
<welcome-file></welcome-file>
</welcome-file-list>
</web-app>
注意:schema约束本身也是xml文件。
四、web概念
动态的web开发技术:servlet jsp php .net。静态的web开发技术:html css ....。通过java语言编写的网页称之为javaweb。
web通信机制:基于请求响应机制,一次请求一次响应,先有请求后有响应。
常见的web服务器:
名称 厂商 特点
Weblogic oracle 大型的收费的支持javaee所有规范的服务器
webspere IBM 大型的收费的支持javaee所有规范的服务器
tomcat apache组织 中小型的免费的支持servlet和jsp规范的服务器
五、tomcat
1.目录
bin:存放的可执行程序
conf:配置文件
lib:存放的是tomcat和项目运行时需要的jar包
logs:日志 注意:catalina
temp:临时文件
★★webapps:存放项目的目录
★work:存放jsp文件在运行时产生的java和class文件
2.web项目的目录结构
myweb(项目名称) web2.5版本标准的目录结构
|
|---- html css js image等目录或者文件
|
|---- WEB-INF(特点:通过浏览器直接访问不到 目录)
| |
| |--- lib(项目的第三方jar包)
| |--- classes(存放的是我们自定义的java文件生成的.class文件)
| |--- web.xml(当前项目的核心配置文件)
| |
访问路径:http://主机:端口号/项目名称/资源路径
例如:我的项目 myweb,资源 myweb有一个1.html,则http://localhost:80/myweb/1.html。
3.项目发布方式:(虚拟目录映射)
★方式1:将项目放到tomcat/webapps下
(了解)方式2:修改 tomcat/conf/server.xml
大概130行:
在host标签下 添加如下代码
<Context path="/项目名" docBase="项目的磁盘目录"/>
例如:<Context path="/my" docBase="G:\myweb"/>
(了解)方式3:
在tomcat/conf/引擎目录/主机目录下 新建一个xml文件
文件的名称就是项目名 文件的内容如下: <Context docBase="G:\myweb"/>
4. 常见问题(配置)
1)启动的时候一闪而过:正确配置:JAVA_HOME
2)端口冲突问题:打开tomcat/conf/server.xml,大概70行左右 有如下代码:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
修改port后面的值就可以了。
注意:1024以下的端口号留给系统用的,80端口是留给http协议用的,我们可以使用这个端口号。