1.schema约束
dtd语法:
** schema符合xml的语法,xml语句
**一个xml里面可以有多个schema,多个schema使用名称空间区分(类似于java包名)
**dtd里面有PCDATA类型,但是在schema里面可以支持更多的数据类型
***比如 年龄 只能是整数, 在schema里面可以直接定义一个整数类型
***schema语法更加复杂,schema目前不能替代dtd
schema的快速入门
*创建一个schema文件 后缀名是.xsd */ ⚫单例,一个类只有一个对象;;当然可能存在多个Servlet类! 处理请求和发送响应的过程是由一种叫做Servlet的程序来完成的,并且Servlet是为了解决实现动态页面而衍生的东西。理解这个的前提是了解一些http协议的东西,并且知道B/S模式(浏览器/服务器)。 servlet的生命周期 Servlet生命周期的三个关键方法,init、service、destroy。 Servlet没有main()方法,不能独立运行,它的运行完全由Servlet引擎来控制和调度。 什么是ServletConfig对象 ServletConfig对象,叫Servlet配置对象。主要用于加载配置文件的初始化参数。 创建时机 ServletConfig对象在servlet对象创建之后,调用init方法之前创建,该Config对象随着init方法传入到servlet中。 常用方法 java.lang.String getInitParameter(java.lang.String name) 根据名称获取参数值 java.util.Enumeration getInitParameterNames() 得到所有参数 ServletContext getServletContext() 获取servlet上下文对象 ava.lang.String getServletName() 得到servlet名称 问题:SevletConfig中的初始化参数不能被其他Servlet共享!! 下面来演示一下这些方法的使用: 我们先在servlet的配置文件web.xml配置servlet的初始化参数,然后运用上面的方法得到这些数据! 配置文件: 下面我们就在相应的servlet内得到配置好的数据吧! ServletConfig servletConfig = getServletConfig(); String color = servletConfig.getInitParameter("color"); 这样就能得到配置好的数据了!还有更简单的方法: 先说明一下:首先HttpServlet继承自GenericServlet类,而GenericServlet类又继承自Servlet接口,Servlet接口有方法getServletConfig() ,所以HttpServlet肯定有方法getServletConfig()。而GenericServlet类又实现了ServletConfig 接口,也就是他肯定实现了ServletConfig接口中的所有方法,所以以上代码我们还可以这样写: String color = getInitParameter("color"); 其它方法也差不多,这里不做示范~~~ 什么是ServletContext对象 我们知道一个Web应用里面可以有多个servlet,如果现在有一份数据需要传给所有的servlet使用,那么我们就可以使用ServletContext对象了。 ServletContext对象叫servlet上下文对象。该对象在一个web应用中只会创建一个对象,代表当前web应用的环境。在当前的web应用中所有servlet都共享一个ServletContext对象。 ServletContext对象创建的时机 由ServletContext对象的特性我们可以推断出它被创建的时机:每当一个web应用被加载,那么一个ServletContext对象就被创建了,然后web应用里的servlet就可以同使用它了! 那么,我们如何在servlet里得到这个已经创建的对象呢? 得到ServletContext对象 开发者十分巧妙的将ServletContext对象放入在了该web应用里的每一个servlet中的ServletConfig对象里! 在一个servlet被创建时,会调用它的构造方法,随后就会调用init()方法对它初始化,而在初始化的过程中,就把ServletContext对象放入到ServletConfig对象中了!那么这个servlet得到ServletContext对象对象就十分方便了,只需要用一句代码! ServletContext servletContext =this.getServletContext(); ServletContext对象的常用方法 得到了ServletContext对象,我们就要想:这个对象有什么用呢!?以下介绍一下它的常用的方法。 主要有五种用法: 一)得到web应用的上下文路径: java.lang.String getContextPath() 二)获取web应用的全局参数 : java.lang.String getInitParameter(java.lang.String name) java.util.Enumeration getInitParameterNames() 三)域对象相关的方法: java.lang.Object getAttribute(java.lang.String name) void setAttribute(java.lang.String name, java.lang.Object object) void removeAttribute(java.lang.String name) 四)用于转发: RequestDispatcher getRequestDispatcher(java.lang.String path) 五)web应用加载资源文件方法: java.lang.String getRealPath(java.lang.String path) java.io.InputStream getResourceAsStream(java.lang.String path) 下面示范一下使用这些方法: 一)得到web应用的上下文路径 通过request来调用该方法 String path = request.getContextPath(); System.out.println(path); 输出结果: /TestArea web应用的路径 是 tomcat服务器中web应用的名称,而不是ecplise中的项目名称。 request.getContextPath();为了方便获取上下文路径。推荐使用该方法。 二)获取web应用的全局参数 先在web应用对应的web.xml中设置全局参数: 全局参数的标签写咋 然后在servlet内得到这个参数: //1.得到ServletContext对象ServletContext context =this.getServletContext(); 注意: 所有的servlet都可以获取全局参数!!!
**根节点
*在schema文件里面
**属性 xmlns="http://www.w3.org/2001/XMLSchema"
-表示当前xml文件是一个约束文件
**targetNamespace="http://www.itcast.cn/20151111"
-使用schema约束文件,直接通过这个地址引入约束文件
**elementFormDefault="qualified"
步骤
(1)看xml中有多少个元素
(2)看简单元素和复杂元素
*如果复杂元素
子元素
(3)简单元素,写在复杂元素的
步骤和代码
/
*1.得到document
*2.直接使用selectSingleNode方法实现
-xpath : //p1[@id1='aaaa']/name
//得到document
Document document = Dom4jUtils.getDocument(Dom4jUtils.PATH);
//直接使用selectSingleNode方法实现
Node name1 = document.selectSingleNode("//p1[@id1='aaaa']/name"); //name元素
//得到那么里面的值
String s1 = name1.getText();
System.out.printly(s1);Servlet概述
生命周期方法:
⚫void int(ServletConfig):出生之后(1次);
⚫void servlet(ServletRequest request,ServletResponse response):每次处理请求时都会被调用;;
⚫void destroy():临死之前(一次)
特性:
⚫线程不案例的,所以它的效率是高的!Servlet类由我们来写,但对象由服务器来创建,并且由服务器来调用相应的方法。
什么是servlet?
针对客户端的多次Servlet请求,通常情况下,服务器只会在第一次请求的时候创建一个Servlet实例对象,并驻留在内存中,为后续的其他请求服务,直至web容器退出,Servlet实例对象才会销毁。
在Servlet的整个生命周期内,Servlet的init()方法只被调用一次,而对于每一个请求都会调用一次Servlet的service()方法service根据请求方式调用doGet或doPost方法
如果在
ServletContext对象
//2.获取全局参数System.out.println(context.getInitParameter("AAA"));
Enumeration enums = context.getInitParameterNames();
while(enums.hasMoreElements()){
String paramName = enums.nextElement();
String paramValue = context.getInitParameter(paramName);
System.out.println(paramName+"="+paramValue);
}