0 作业[cn.itcast.xml.sax.Demo2]
  1)在SAX解析器中,一定要知道每方法何时执行,及SAX解析器会传入的参数含义

1 理解dom解析器机制

1)dom解析和dom4j原理一致
  2)Node是所有元素的父接口
  3)常用的API:

   DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();取得DOM解析器工厂
DocumentBuilder domParser = factory.newDocumentBuilder();取得DOM解析器
domParser.parse(*.xml)加载需要解析的XML文件
Document.getDocumentElement()取得XML文件的根元素/节点
Element.getNodeName():取得根元素
Element.getElementsByTagName("汽车")取得"汽车"元素的集合
NodeList.item(i)取得第N个元素,从0开始
Element.getTextContent():取得元素的文本内容
Element.getAttributes().getNamedItem("出产时间").getTextContent():取得元素中某属性的值
document.createElement("汽车");创建新元素
Element.setTextContent("我的汽车");设置元素的内容
Element.appendChild(newCarElement);在尾部添加元素
Element.insertBefore(newCarElement,
rootElement.getElementsByTagName("汽车").item(1));在指定的元素前添加元素
TransformerFactory tf = TransformerFactory.newInstance();创建输出工厂
Transformer transformer = tf.newTransformer();创建输出对象
Source source = new DOMSource(document);创建内存的document对象
Result result = new StreamResult(new File("src/cn/itcast/xml/dom/car.xml"));指定输出的目标地点
transformer.transform(source,result);将document对象输出到xml文件中
Element.setTextContent("深圳");更新元素的内容
Element.removeChild(secondCarElement);在父元素基础上删除直接子元素

4)dom解析器会将空白字符当作有效元素对待 
  5)要让dom解析器将空白字符忽略,必须满足二条件

a)对XML文件必须写一个DTD约束

b)factory.setIgnoringElementContentWhitespace(true); 
  6)dom类解析器和sax类解析器

a)dom是一次性加载到内容,形成document对象,人工导航,适合curd

b)sax是分次性加载到内容,sax解析器导航,但程序员需要编写sax处理器,必须扩展DefaultHandler类,适合r

package cn.itcast.xml.dom;

import java.io.File;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList; //使用DOM解析器解析XML文件
public class Demo1 {
public static void main(String[] args) throws Exception {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder domParser = factory.newDocumentBuilder();
Document document = domParser.parse(new File("src/cn/itcast/xml/dom/car.xml"));
Element rootElement = document.getDocumentElement();
System.out.println("根元素为:"+rootElement.getNodeName());
NodeList nodeList = rootElement.getElementsByTagName("汽车");
System.out.println("共有:" + nodeList.getLength()+"辆汽车");
System.out.println("++++++++++++++++++++++++++");
for(int i=0;i<nodeList.getLength();i++){
Element element = (Element) nodeList.item(i);
String band = element.getElementsByTagName("车牌").item(0).getTextContent();
String place = element.getElementsByTagName("产地").item(0).getTextContent();
String price = element.getElementsByTagName("单价").item(0).getTextContent();
String time = element.getElementsByTagName("车牌").item(0).getAttributes().getNamedItem("出产时间").getTextContent(); System.out.println("车牌:" + band);
System.out.println("产地:" + place);
System.out.println("单价:" + price);
System.out.println("出产时间:" + time);
System.out.println("-------------------------");
}
}
}
package cn.itcast.xml.dom;

import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.junit.Test;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList; public class Demo2 {
//dom是否将空白字符当作一个有效的元素对待
public static void main(String[] args) throws Exception{
Document document = getDocument();
Element rootElement = document.getDocumentElement();
NodeList nodeList = rootElement.getChildNodes();
System.out.println("共有" + nodeList.getLength()+"个直接元素");
}
@Test
public void create() throws Exception{
Document document = getDocument();
Element newCarElement = document.createElement("汽车");
newCarElement.setTextContent("我的汽车");
Element rootElement = document.getDocumentElement();
//rootElement.appendChild(newCarElement);
rootElement.insertBefore(
newCarElement,
rootElement.getElementsByTagName("汽车").item(1));
write2xml(document);
}
@Test
public void update() throws Exception{
Document document = getDocument();
Element secondCarElement = (Element) document.getElementsByTagName("汽车").item(1);
secondCarElement.getElementsByTagName("产地").item(0).setTextContent("深圳");
secondCarElement.getElementsByTagName("车牌").item(0).getAttributes().getNamedItem("出产时间").setTextContent("2012年");
write2xml(document);
}
@Test
public void delete() throws Exception{
Document document = getDocument();
Element rootElement = document.getDocumentElement();
Element secondCarElement = (Element) rootElement.getElementsByTagName("汽车").item(1);
rootElement.removeChild(secondCarElement);
write2xml(document);
}
private void write2xml(Document document)throws Exception {
//将内存中的document对象写到外存的xml文件
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
//源
Source source = new DOMSource(document);
//目
Result result = new StreamResult(new File("src/cn/itcast/xml/dom/car.xml"));
transformer.transform(source,result);
}
private static Document getDocument() throws Exception {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
//设置dom解析器将空白字符过滤
factory.setIgnoringElementContentWhitespace(true);
DocumentBuilder domParser = factory.newDocumentBuilder();
Document document = domParser.parse(new File("src/cn/itcast/xml/dom/car.xml"));
return document;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE 车辆清单 [
<!ELEMENT 车辆清单 (汽车+)>
<!ELEMENT 汽车 (车牌,产地,单价)>
<!ELEMENT 车牌 (#PCDATA)>
<!ELEMENT 产地 (#PCDATA)>
<!ELEMENT 单价 (#PCDATA)>
<!ATTLIST 车牌
出产时间 CDATA #REQUIRED>
]>
<车辆清单>
<汽车>
<车牌 出产时间="2010年">奥迪</车牌>
<产地>北京</产地>
<单价>30</单价>
</汽车>
<汽车>
<车牌 出产时间="2012年">本田</车牌>
<产地>深圳</产地>
<单价>60</单价>
</汽车>
</车辆清单>
2 web基本概念

1)JavaWeb是用Java技术开发基于Web的应用

2)在Internet上运行的资源有二大类:

a)静态资源

无论何时何地以何种身份访问该资源,显示的结果一样

HTML或XHTML或XML,CSS,JavaScript,...

b)动态资源

无论何时何地以何种身份访问该资源,有可以结果不一样

Servlet,Jsp,...

package cn.itcast.web.base;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket; //使用JavaSocket编程,读取abc.html文件,写给每个浏览器客户端
public class Demo1 {
public static void main(String[] args) throws Exception {
ServerSocket ss = new ServerSocket(9999);
while (true) {
Socket s = ss.accept();
// 得到输入流
InputStream is = s.getInputStream();
// 将字节流包装成高级字符流,目的是行行读
BufferedReader br = new BufferedReader(new FileReader(
"d:\\abc.html"));
// 得到输出流
OutputStream os = s.getOutputStream();
String line = null;
// 循环读取abc.html文件中的内容
while ((line = br.readLine()) != null) {
// 输出到每个浏览器
os.write(line.getBytes());
}
br.close();
os.close();
s.close();
}
/*
* 项目在一定放在try-catch-finally中在非空的情况下关闭 br.close(); is.close();
* os.close(); s.close(); ss.close();
*/
}
}
*3 安装tomcat web服务器

1)将某个文件提外界用户访问,必须有一个类似的网络应用程序来接收和响应用户的请求
  2)web服务器有多种类型

java开源:tomcat6/7。。。

商用:weblogic,websphere

获取Tomcat安装程序包

  • tar.gz文件是Linux操作系统下的安装版本
  • exe文件是Windows系统下的安装版本(上线)
  • zip文件是Windows系统下的压缩版本(开发)绿色

3)安装tomcat

    a)配置JDK正确版本[至少是JDK5]和路径

b)执行tomcat/bin/startup.bat启动Web服务器 
    c)CATALINA_HOME指明需要启动哪台tomcat服务器 
    错误案例:

a)tomcat端口被占用,可以通过server.xml文件修改默认端口号 <Con>

b)查看当前进程使用情况,工具Fport.exe 
    c)窗口一闪而过,JAVA_HOME目录设置出错 
  4)tomcat目录的含义:

*bin/启动和停止tomcat的脚本文件

*conf/配置tomcat的文本,以xml文件为主

*lib/tomcat用到的第三方jar包

logs/tomcat服务器操作相关的日志文件

temp/tomcat运行时用到的一些临时文件 
    **webapps/tomcat能被外界访问的符合标准目录结构的web应用

work/tomcat运行的工作目录

5)Web标准目录结构:

6)Web常用的编号

404:客户端请求的资源,服务端找不到

*4 配置虚拟主机和目录

1)虚拟目录:在tomcat/conf/server.xml文件中设置如下代码:

    <Context path="/qq" docBase="d:\mail"/>

path="以/开头,表示虚拟目录"    
    docBase="web应用的真实目录"

附加: reloadable="false"服务端会自动监视/WEB-INF/classes或lib目录下的变化情况,一旦变化,服务湍在设置成true的情况下,自动加载最新的内容,如果设置成false,服务端无法加载最新的资源,需要手工重新启动服务器,开发阶段设置为true,上线阶段设置为false。unpackWAR="true"服务器会自动将web压缩文件解压成标准的web目录结构

2)设置默认web应用 |缺省的Web应用程序

    <Context path="" docBase="d:\mail"/>

3)设置默认web资源 |缺省的web资源

mail-WEB-INF-web.xml文件中设置如下代码:

<welcome-file-list>

<welcome-file>mail.html</welcome-file>

<welcome-file>mail.htm</welcome-file>

<welcome-file>mail.jsp</welcome-file> 
        </welcome-file-list> 
  4)设置虚拟主机:在tomcat/conf/server.xml文件中设置如下代码:

<Host name="www.163.com"  appBase="d:\sina">

<Context path="" docBase="d:\sina\mail"/>

<Context path="/news" docBase="d:\sina\news"/>

</Host>

name表示虚拟主机名,与HOSTS文件中定义的一致   
      appBase虚拟主机对应的Web应用根目录

\表示真实目录

/表示外界通过浏览器访问的目录   
      以windowXP为例:C:\WINDOWS\system32\drivers\etc\HOSTS文件 
  5)位于webapps/目录下的标准web应用,服务器会自动映射成一个虚拟目录

<Context path="/day04" docBase="d:\apache-tomcat-6.0.29\webapps\day04"/>   
  6)某些旧版的tomcat服务器,可能无法自动映射webapps/目录下的标准web应用,需要加上WEB-INF/web.xml文件才行

5 理解C/S和B/S结构的特点

1)Domain Name Service

  2)DNS是电信内部的一个域名和IP地址的映射关系

3)在查询DNS之前,先查看本地操作系统对应的HOSTS文件,是否能找到对应的IP,如果能找到,不会查DNS了,只有在

查找不到的情况下,再连网找DNS服务器

4)CS结构:程序和数据分离在不同的端

*BS结构:程序和数据绑定在服务端

6 观察http协议

1)超文本的传输协议,是基于TCP/UDP协议(底层)

  2)有二个版本

a)HTTP/1.0(一次用户请求,服务端响应后,立即断开)

b)HTTP/1.1(一次用户请求,服务端响应后,会保持一定的时间,在该一定时间后,用户可以再次请求)

3)为了让客户端响应速度快,在满足业务需求的情况下,尽量减少HTTP请求数的发送

dom解析器机制 web基本概念 tomcat的更多相关文章

  1. PHP Simple HTML DOM解析器

    一直以来使用php解析html文档树都是一个难题.Simple HTML DOM parser 帮我们很好地解决了使用 php html 解析 问题.可以通过这个php类来解析html文档,对其中的h ...

  2. 使用Dom解析器,操作XML里面的信息

    import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;impo ...

  3. PHP Simple HTML DOM解析器使用入门

    http://www.cnphp.info/php-simple-html-dom-parser-intro.html 一直以来使用php解析html文档树都是一个难题.Simple HTML DOM ...

  4. JAVA与DOM解析器提高(DOM/SAX/JDOM/DOM4j/XPath) 学习笔记二

    要求 必备知识 JAVA基础知识.XML基础知识. 开发环境 MyEclipse10 资料下载 源码下载   sax.dom是两种对xml文档进行解析的方法(没有具体实现,只是接口),所以只有它们是无 ...

  5. JAVA与DOM解析器基础 学习笔记

    要求 必备知识 JAVA基础知识.XML基础知识. 开发环境 MyEclipse10 资料下载 源码下载   文件对象模型(Document Object Model,简称DOM),是W3C组织推荐的 ...

  6. PHP HTML DOM 解析器 中文手册

    简单的PHP HTML DOM 解析器 中文手册 | PHP Simple HTML DOM Parser中文手册 目录 快速入门 如何创建HTML DOM 对象? 如何查找HTML元素? 如何访问H ...

  7. 解析XML文件之使用DOM解析器

    在前面的文章中.介绍了使用SAX解析器对XML文件进行解析.SAX解析器的长处就是占用内存小.这篇文章主要介绍使用DOM解析器对XML文件进行解析. DOM解析器的长处可能是理解起来比較的直观,当然, ...

  8. Java DOM解析器 - 解析XML文档

    使用DOM的步骤 以下是在使用DOM解析器解析文档使用的步骤. 导入XML相关的软件包. 创建DocumentBuilder 从文件或流创建一个文档 提取根元素 检查属性 检查子元素 导入XML相关的 ...

  9. Java DOM解析器

    文档对象模型是万维网联盟(W3C)的官方推荐.它定义了一个接口,使程序能够访问和更新样式,结构和XML文档的内容.支持DOM实现该接口的XML解析器. 何时使用? 在以下几种情况时,应该使用DOM解析 ...

随机推荐

  1. httpd 配置用户访问认证

    需求:单用户访问网站的某个目录,需要使用帐号密码来登录才能访问. 一.编辑虚拟主机的配置文件,添加目录级访问限制 <Directory "/var/www/html/demo" ...

  2. apache和php扩展问题

    1.redis扩展: windows下开发用的xampp集成的环境,想装个php-redis扩展,扩展的github地址:  https://github.com/nicolasff/phpredis ...

  3. 利用HibernateTools从数据库表生成带注解的POJO

    在SSH框架中,如果先设计好了数据库,那么下一步就需要从数据库Table生成实体java类和hbm.xml配置文件.在最新的开发框架中,已经支持使用注解,从而避免了繁琐的hbm.xml配置,而且我们可 ...

  4. ngx_cdecl

    ngx_cdecl 作为跨平台用,现在理解有限,以后补充 _cdecl 是C Declaration的缩写(declaration,声明),表示C语言默认的函数调用方法:所有参数从右到左依次入栈,这些 ...

  5. 【转】winform带参数启动另一个exe

     启动EXE string arg1 = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; string arg2 = "bbbbbbbbbbbbbbbb ...

  6. laravel5.1关于lists函数的bug

    查询语句为: class DateAttrModel extends BaseModel{ -- static function getDays(--){ $days = self::lists('d ...

  7. CCNP第三天 EIGRP综合实验

    实验题如图所示:其中R2连R3 R5为快速以太网线,其他均为串线,帧中继默认是富曼斯(全连网状结构),即所有接入的路由之间的PVC都已经打通,所有  要关闭R5和R8的逆向arp功能,来手工配置R5到 ...

  8. RTC搭建android下三层应用程序访问服务器MsSql-服务器端

    前几天通过Ro搭建webservice,然后在android下调用,虽然已近成功,但是返回的数据库里的中文有乱码一直未得到解决!rtc6.23版本,已经支持xe5,也支持fmx的android下开发, ...

  9. Linux vi 中搜索关键字

    当你用vi打开一个文件后,因为文件太长,如何才能找到你所要查找的关键字呢? 在vi里可没有菜单-〉查找 不过没关系,可以在命令模式下敲斜杆( / )这时在状态栏(也就是屏幕左下脚)就出现了 “/” 然 ...

  10. Ubuntu下Sublime Text 3无法输入中文的解决方案

    1. 保存下面的代码到文件sublime_imfix.c中: /* * sublime-imfix.c * Use LD_PRELOAD to interpose some function to f ...