WEB编程阶段

在WEB编程中,我们可以通过浏览器访问WEB服务器上的资源。WEB服务器就是另一台计算机

浏览器的入口不同(访问路径),访问的资源也不同。

为了灵活实现的不同路径(/hello)执行不同的资源( HeIIoMyServlet)我们需要使用XML进行配置;为了限定XML内容,

我们需要使用xml约束(DTD或schema);为了获得xml的内容,我们需要使用dom4j进行解析。

XML

概念:

XML个称为Extensible Markup Language,意思是可扩展的标记语言。

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

常见应用:

XML语法

1、XML文档声明:

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

2.文档声明必须从文档的0行0列位置开始:

3.文档声明只有属性:

  a) versioin:指定XML文档版本。必须属性,因为我们不会选择1.1,只会选择1.0;

  b) encoding:指定当前文档的编码。可选属性,默认值是。utf-8

元素element:

1.元素是XML文档中最重要的组成部分,

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

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

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

5.元素命名:

  a) 区分大小写

  b) 不能使用空格,不能使用冒号:

  c) 不建议以XML,  xml,  Xml开头

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

属性:

1.属性是元素的一部分,它必须出现在元素的开始标签中

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

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

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

注释:

XML的注释与HTML相同,即以“<!--”开始,以“-->”结束。注释内容会被XML解析器忽略!

转义字符:

XML中的转义字符与HTML一样。

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

CDATA区:

当大量的转义字符出现在xml文档中时,会使xml文档的可读性大幅度降低。这时如果使用CDATA段就会好一些。

在CDATA段中出现的“<”、“>’,、“””、“‘”、“&”,都无需使用转义字符。这可以提高xml文档的可读性。

在CDATA段中不能包含“]]>”,即CDATA段的结束定界符。

DTD

TD (Document Type Definition ),文档类型定义,用来约束XML文档。规定XML文档中元素的名称,子元素的名称及顺序,元素的属性等。

开发中,我们很少自己编写DTD约束文档,通常情况我们都是通过框架提供的DTD约束文档,编写对应的XML文档

Schema约束

①Schema是新的XML文档约束:

②Schema要比DTD强大很多,是DTD替代者;

③Schema本身也是XML文档,但Schema文档的扩展名为xsd,而不是xml .

④Schema功能更强大,数据类型更完善

⑤Schema支持名称空间

与DTD一样,要求可以通过schema约束文档编写xml文档。

dom4j解析

解析方式和解析器

开发中比较常见的解析方式有三种,如下:

DOM:

要求解析器把整个XML文档装载到内存,并解析成一个Document对象。

a) 优点:元素与元素之间保留结构关系,故可以进行增删改查操作。

b) 缺点:XML文档过大,可能出现内存溢出显现。

SAX:

是一种速度更快,更有效的方法。它逐行扫描文档,一边扫描一边解析。并以事件 驱动的方式进行具体解析,每执行一行,都将触发对应的事件。(了解)

a) 优点:处理速度快,可以处理大文件

b) 缺点:只能读,逐行后将释放资源。

3. PULL:  Android内置的XML解析方式,类似SAX。(了解)

解析器:

就是根据不同的解析方式提供的具体实现。有的解析器操作过于繁琐,为了方便开发人员,有提供易于操作的解析开发包。

常见的解析开发包:

①JAXP: sun公司提供支持DOM和SAX开发包

②JDom:dom4j兄弟

③jsoup:一种处理HTML特定解析开发包

④dom4j:比较常用的解析开发包,hibernate底层采用。

DOM解析原理及结构模型

XML DOM和HTML DOM类似,XML DOM将整个XML文档加载到内存,生成一个DOM树,

并获得一个Document对象,通过Document对象就可以对DOM进行操作

注意:

DOM中的核心概念就是节点,在XML文档中的元素、属性、文本等,在DOM中都是节点!

API使用

如果需要使用dom4j,必须导入jar包。

dom4j必须使用核心类SaxReader加载xml文档获得Document通过Document对象获得文档的根元素,然后就可以操作了。

步骤:

1.获取解析器

2.获得document文档对象

3.获取根元素

4.获取根元素下的子元素

5.遍历子元素

6.判断元素名称为servlet的元素

7.获取servlet-name元素

8.获取servlet-class元素

演示:

public static void main(String[] args) throws Exception {
//1、获取解析器
SAXReader saxReader=new SAXReader();
//2、获取document文档对象
Document doc=saxReader.read("src/com/oracle/demo2/web.xml");
//3、获取根元素
Element rootElement=doc.getRootElement();
/*//获取元素名称
System.out.println(rootElement.getName());
//获取元素中的指定属性的属性值
System.out.println(rootElement.attributeValue("version"));*/
//4、获取根元素下的所有子元素
List<Element> childElements=rootElement.elements();
//5、遍历子元素
for(Element el: childElements){
//获得servlet对象
if("servlet".equals(el.getName())){
//获得servletName对象
Element servletName=el.element("servlet-name");
//获得servletclass对象
Element servletclass=el.element("servlet-class");
System.out.println(servletName.getText());
System.out.println(servletclass.getText());
}
}
}

实例:

模拟服务器端程序

利用反射执行:

测试程序我们直接new HeIloServlet,这种编程方式我们称为硬编码,及代码写死了。为了后期程序的可扩展,开发中通常使用实现类的全限定类名(com.oracle.demo.MyServletImpl)通过反射加载字符串指定的类,并通过反射创建实例。

演示:

MyServlet接口创建:

public interface MyServlet {
public void init();
public void service();
public void destroy();
}

实现类创建:

public class MyServletImp implements MyServlet{
public void init(){
System.out.println("初始化");
}
public void service() {
System.out.println("工作");
}
public void destroy() {
System.out.println("死亡");
}
}

测试:

//利用反射灵活获取并创建实例对象
public class demo02 {
public static void main(String[] args) throws Exception {
//1、获取解析器
SAXReader saxReader=new SAXReader();
//2、获取document文档对象
Document doc=saxReader.read("src/com/oracle/demo2/web.xml");
//3、获取根元素
Element rootElement=doc.getRootElement();
//4、获取根元素下的所有子元素
List<Element> childElements=rootElement.elements();
String className=null;//获取完整的包名类名
for(Element el:childElements){
if("servlet".equals(el.getName())){
className=el.element("servlet-class").getText();
}
}
//5、创建字节码文件对象
Class c=Class.forName(className);
Object obj=c.newInstance();
//向下转型
MyServletImp myservlet=(MyServletImp)obj;
myservlet.init();
myservlet.service();
myservlet.destroy();
}
}

servlet执行的更多相关文章

  1. Servlet执行流程和生命周期【慕课网搬】

    Servlet执行流程(GET方式为例) 首先用户客户端浏览器发出Get方式(点击超链接方式)向浏览器发出请求. 服务器接收到客户端点击超链接,接收到GET请求之后,服务器到WEB.xml中<s ...

  2. 【JAVA】servlet执行流程

    servlet执行流程 客户端发出http请求,web服务器将请求转发到servlet容器,servlet容器解析url并根据web.xml找到相对应的servlet,并将request.respon ...

  3. Servlet执行流程和生命周期

    Servlet执行流程 Get方式请求HelloServlet ---> <a href="servlet/HelloServlet"> ↓ 服务器在配置文档中查 ...

  4. [转帖]浅析Servlet执行原理

    浅析Servlet执行原理 原贴地址: https://www.cnblogs.com/wangjiming/p/10360327.html 原作者画的图挺好. 自己之前看过iis的一些配置文档 但是 ...

  5. JSP页面最终是编译为Servlet执行的

    JSP页面最终是编译为Servlet执行的,你可以在Tomcat的%CATALINA_HOME%/work/Catalina/localhost中找到一个文件夹,该文件夹跟你的web-project的 ...

  6. java的servlet执行过程是怎么样的?

    java的servlet执行过程是怎么样   答: Servlet执行过程:程序第一次访问,会调用servlet的init()方法初始化(只执行一次),每次程序执行都会根据请求调用doGet()或者d ...

  7. web.xml中多个Servlet执行顺序的问题!

    1.两个servlet或者两个servlet-mapping,其中的servlet-name名称不能存在相同. 2.所有的servlet-mapping标签下,url-pattern中包含的文本不能相 ...

  8. JavaWeb之 Servlet执行过程 与 生命周期

    Servlet的概念 什么是Servlet呢? Java中有一个叫Servlet的接口,如果一个普通的类实现了这个接口,这个类就是一个Servlet.Servlet下有一个实现类叫HttpServle ...

  9. Servlet 执行流程 生命周期 ServletConfig 线程安全

    Day34 servlet 三.如何使用Servlet 1.继承GenericServlet类(通用) (1)GenericServlet类有一个关键的设计,定义了一个私有的ServletConfig ...

  10. 浅析Servlet执行原理

    在JavaWeb学习研究中,Servlet扮演重要的作用,学好它,是后续JavaWeb学习的良好基础.无论是SSH,还是SSM,微服务JavaWeb技术,都应先学好Servlet,从而达到事半功倍的效 ...

随机推荐

  1. MongoDB快速入门教程 (2)

    2.MongoDB的基本的CRUD操作 2.1.创建文档 在具体操作之前,想要知道有多少数据库,可以执行下面命令 show dbs 在mongodb中,数据库中包含的叫做集合(表),集合中存储的内容叫 ...

  2. MBA都需要学习哪些课程

    MBA课程内容详解: 1.核心课程: 管理经济学.营销管理.战略管理.组织行为学.会计学.公司财务管理.人力资源管理与开发.管理与沟通.经济法.国际贸易 2.学位课程: 商务英语(一.二).管理伦理学 ...

  3. Centos 6.4 安装/卸载 Adobe Reader 9(.bin .tar.bz2 rpm 包)

    一.To install Adobe Reader 9.1 using a tarball installer 1. Open a terminal window. 2. Change directo ...

  4. SpringCloud项目配置加载顺序

    bootstrap.yml:位于jar包外的优先级最高 application.yml: 配置中心的文件 > JVM参数配置> 本地active指定文件 > 本地default文件, ...

  5. 一行一行源码分析清楚AbstractQueuedSynchronizer

    ​“365篇原创计划”第二十四篇. 今天呢!灯塔君跟大家讲: 一行一行源码分析清楚AbstractQueuedSynchronizer 在分析 Java 并发包 java.util.concurren ...

  6. kubernetes-pod驱逐机制

    1.驱逐策略 kubelet持续监控主机的资源使用情况,并尽量防止计算资源被耗尽.一旦出现资源紧缺的迹象,kubelet就会主动终止部分pod的运行,以回收资源. 2.驱逐信号 以下是一些kubele ...

  7. html/css解决inline-block内联元素间隙的多种方法总汇

    序 display有几种属性:inline是内联对象,比如<a/> . <span/>标签等,可以“堆在一起”显示,宽高由内容决定,不能设置:block是块对象,比如<d ...

  8. fastjson到底做错了什么?为什么会被频繁爆出漏洞?

    GitHub 15.8k Star 的Java工程师成神之路,不来了解一下吗! GitHub 15.8k Star 的Java工程师成神之路,真的不来了解一下吗! GitHub 15.8k Star ...

  9. kibana限制用户只具备读图的权限

    假设需求 因为业务需要将日志系统收集到的信息进行图表化展示并交付到用户进行业务交流. 解决方案 这个需求看着似乎蛮简单的,如何解决? 1.对需要的数据进行过滤制作图表 2.对用户的权限限制为只读级别, ...

  10. Emergency Evacuation 题解

    The Japanese government plans to increase the number of inbound tourists to forty million in the yea ...