第8天(就业班) xml约束、Schema约束、Web开发入门、tomcat服务器、手动开发动态资源

来源:互联网 发布:java sys refcursor 编辑:程序博客网 时间:2024/05/25 23:58
1 课程回顾
XML加强
1)Dom4j修改XML文档
写出xml文档:
XMLWriter writer = new XMLWriter()
writer.wrtite(doc);   
增加:
 DocumentHelper.createDocument()  增加新文档
 Element.addElement("name");  增加子标签
 Element.addAtrribute(“name”,“value”) 增加属性
修改:
  Attribute.setValue("value");  修改属性值
  Element.setText("value");  修改文本内容
删除:
Element.detach();   删除标签
   Attribute.detach();  删除属性
2)XPath技术: 快速找到xml元素(标签,属性,文本)
2.1 dom4j使用xpath:
List<Node> list = Element.selectNodes("xpath表达式");多个节点对象
Node node = Element.selectSingleNode("xpath表达式");         一个节点对象


xpath表达式:
/       表示根位置 或者  子标签
//      表示后代标签(不分层次结构)
*       表示所有元素
[ ]      表示条件
@      表示选择属性
text()    表示选择文本
and     表示与条件


3)SAX解析: 原理: 加载一点,解析一点,处理一点,对内存要求不高!!!(基于事件)
SAXPasser 类:
parser(File file, DefaultHandler handler):该方法使用sax解析方式去解析xml文档
DefaultHandler类:重写该类中的一些方法,用于处理xml文档
startElement( ....  String qName): 读到开始标签时调用
characterrs(char[] ch,int start,int length);  读到文本内容时调用(包括空格和换行)
endElement(.....String qName): 读到结束标签时调用
2 XML约束
XML约束要求:大家能够看懂约束内容,根据约束内容写出符合规则的xml文件。
2.1 引入
XML语法: 规范的xml文件的基本编写规则。(由w3c组织制定的)
XML约束: 规范XML文件数据内容格式的编写规则。(由开发者自行定义)
2.2 XML约束技术
DTD约束:语法相对简单,功能也相对简单。学习成本也低。
Schema约束:语法相对复杂,功能也相对强大。学习成本相对高!!!(名称空间)
2.3 DTD约束
1)导入dtd方式
内部导入
<!DOCTYPE note [
  <!ELEMENT note (to,from,heading,body)>  ()里面代表子元素必须有这个节点,只允许出现一次,并按指定顺序,to→from→heading→body
  <!ELEMENT to      (#PCDATA)>
  <!ELEMENT from    (#PCDATA)>
  <!ELEMENT heading (#PCDATA)>
  <!ELEMENT body    (#PCDATA)>
]>
外部导入
本地文件系统:
<!DOCTYPE note SYSTEM "note.dtd">
公共的外部导入:
<!DOCTYPE 根元素 PUBLIC "http://gz.itcast.cn/itcast.dtd">
2)DTD语法
约束标签
<!ELEMENT 元素名称 类别>  或 <!ELEMENT 元素名称 (元素内容)>
类别:
空标签: EMPTY。 表示元素一定是空元素。
普通字符串: (#PCDATA)。表示元素的内容一定是普通字符串(不能含有子标签)。
任何内容: ANY。表示元素的内容可以是任意内容(包括子标签) 
(元素内容):
顺序问题:
<!ELEMENT 元素名称 (子元素名称 1,子元素名称 2,.....)>: 按顺序出现子标签
次数问题:
标签   :  必须且只出现1次。
标签+  : 至少出现1次
   标签*   : 0或n次。
标签?  : 0 或1次。
约束属性
<!ATTLIST 元素名称 属性名称 属性类型 默认值>
默认值:
#REQUIRED 属性值是必需的 
#IMPLIED   属性不是必需的 
#FIXED value 属性不是必须的,但属性值是固定的
属性类型:控制属性值的
CDATA :表示普通字符串 
(en1|en2|..): 表示一定是任选其中的一个值
ID:表示在一个xml文档中该属性值必须唯一。值不能以数字开头
  <!ELEMENT note (from?,to+,heading*,body+)>
  <!ELEMENT to      EMPTY>
  <!ELEMENT from    (#PCDATA)>
  <!ELEMENT heading (#PCDATA)>
  <!ELEMENT body    (#PCDATA)>
  <!ATTLIST to id ID #REQUIRED>
2.4 Schema约束
XML Schema 也是一种用于定义和描述 XML 文档结构与内容的模式语言,其出现是为了克服 DTD 的局限性
XML Schema VS DTD:
XML Schema符合XML语法结构。 
DOM、SAX等XML API很容易解析出XML Schema文档中的内容。 
XML Schema对名称空间支持得非常好。 
XML Schema比XML DTD支持更多的数据类型,并支持用户自定义新的数据类型。 
XML Schema定义约束的能力非常强大,可以对XML实例文档作出细致的语义限制。
XML Schema不能像DTD一样定义实体,比DTD更复杂,但Xml Schema现在已是w3c组织的标准,它正逐步取代DTD。  
XML Schema 文件自身就是一个XML文件,但它的扩展名通常为.xsd。
一个XML Schema文档通常称之为模式文档(约束文档),遵循这个文档书写的xml文件称之为实例文档。
和XML文件一样,一个XML Schema文档也必须有一个根结点,但这个根结点的名称为Schema。
编写了一个XML Schema约束文档后,通常需要把这个文件中声明的元素绑定到一个URI地址上,在XML Schema技术中有一个专业术语来描述这个过程,即把XML Schema文档声明的元素绑定到一个名称空间上,以后XML文件就可以通过这个URI(即名称空间)来告诉解析引擎,xml文档中编写的元素来自哪里,被谁约束。
名称空间:告诉xml文档的哪个元素被哪个schema文档约束。 在一个xml文档中,不同的标签可以受到不同的schema文档的约束。
1)一个名称空间受到schema文档约束的情况
2)多个名称空间受到多个schema文档约束的情况
3)默认名称空间的情况
4)没有名称空间的情况
<?xml version="1.0" encoding="UTF-8"?>
<itcast:书架 xmlns:itcast="http://www.itcast.cn"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.itcast.cn book.xsd">
<itcast:书>
<itcast:书名>JavaScript网页开发</itcast:书名>
<itcast:作者>张孝祥</itcast:作者>
<itcast:售价>28</itcast:售价>
</itcast:书>
</itcast:书架>
使用名称空间引入Schema
为了在一个XML文档中声明它所遵循的Schema文件的具体位置,通常需要在Xml文档中的根结点中使用schemaLocation属性来指定,例如:
<itcast:书架 xmlns:itcast="http://www.itcast.cn"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=“http://www.itcast.cn book.xsd">
schemaLocation此属性有两个值。第一个值是需要使用的命名空间。第二个值是供命名空间使用的 XML schema 的位置,两者之间用空格分隔。
注意,在使用schemaLocation属性时,也需要指定该属性来自哪里。


<?xml version="1.0" encoding="UTF-8" ?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
 targetNamespace="http://www.itcast.cn"
 elementFormDefault="qualified">
<xs:element name='书架' >
<xs:complexType>
<xs:sequence maxOccurs='unbounded' >
<xs:element name='书' >
<xs:complexType>
<xs:sequence>
<xs:element name='书名' type='xs:string' />
<xs:element name='作者' type='xs:string' />
<xs:element name='售价' type='xs:integer' />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
3 Web开发入门
3.1 引入
之前的程序: java桌面程序,控制台控制,socket gui界面。javase规范
现在和以后的程序:java web程序。浏览器控制。javaee规范
3.2 软件的结构
C/S (Client - Server  客户端-服务器端)
典型应用:QQ软件 ,飞秋,红蜘蛛。
特点:
1)必须下载特定的客户端程序。
2)服务器端升级,客户端升级。


B/S (Broswer -Server 浏览器端- 服务器端)
典型应用: 腾讯官方(www.qq.com)  163新闻网站, 传智官网(俗称:网站)
特点:
1)不需要安装特定的客户端(只需要安装浏览器即可!!)
2)服务器端升级,浏览器不需要升级!!!!
javaweb的程序就是b/s软件结构!!!
3.3 服务器
从物理上来说,服务器就是一台PC机器。8核,8G以上,T来计算,带宽100M
web服务器:PC机器安装一个具有web服务的软件,称之为web服务器
数据库服务器:PC机器安装一个具有数据管理件服务的软件,称之为数据库服务器。

邮件服务器:PC机器安装一个具有发送邮件服务的软件,称之为邮件服务器。

package gz.itcast.c_server;import java.io.File;import java.io.FileInputStream;import java.io.OutputStream;import java.net.ServerSocket;import java.net.Socket;/** * socket服务器端程序 * @author APPle * */public class Server {public static void main(String[] args) throws Exception {//1.创建ServerSocketServerSocket server = new ServerSocket(8080);System.out.println("服务器已经启动成功....");while(true){//2.接收客户端的连接Socket socket = server.accept();//3.读取本地的test.html文件FileInputStream in = new FileInputStream(new File("e:/web/test.html"));//4.构建数据输出通道OutputStream out = socket.getOutputStream();//5.发送数据byte[] buf = new byte[1024];int len = 0;while( (len=in.read(buf))!=-1 ){out.write(buf, 0, len);}//6.关闭资源out.close();in.close();}}

3.4 web服务软件

web服务软件的作用:把本地的资源共享给外部访问。

 

3.5 常见的市面上web服务软件

javase的规范,包含IO流,线程,集合,socket编程。。。。

WebLogic: BEA公司的产品。 收费的。支持JavaEE规范。

WebSphere: IBM公司的产品。收费的。支持JavaEE规范

JBoss: Redhat公司的产品。收费的。支持JavaEE规范

Tomcat: 开源组织Apache的产品。免费的。支持部分的JavaEE规范。(servlet、jsp。jdbc,但                                        ejb, rmi不支持)

4Tomcat基本使用

4.1 下载并按照

1)到apache官网。www.apache.org     http://jakarta.apache.org(产品的主页)

2)

安装版:window (exe、msi) linux(rmp)

压缩版:window(rar,zip) linux(tar,tar.gz)学习时候使用

3)运行和关闭tomcat

4.2启动软件

a)找到%tomcat%/bin/startup.bat ,双击这个文件

b)弹出窗口,显示信息(不要关闭次窗口)

c)打开浏览器,输出以下地址

http://localhost:8080

d)看到一只猫画面,证明软件启动成功!

4.3 关闭软件

a)找到%tomcat%/bin/shutdown.bat,双击这个文件即可!

b)打开浏览器,输出以下地址。看到“无法连接”(最好先清空浏览器缓存)

4.4 tomcat软件使用的常见问题

1)闪退问题

原因:tomcat软件是java语言开发的。tomcat软件启动时,会默认到系统的环境变量中查找一个名称叫JAVA_HOME的变量。这个变量的作用找到tomcat启动所需的jvm。

解决办法; 到环境变量中设置JAVA_HOME的变量

JAVA_HOME= C:\ProgramFiles\Java\jdk1.6.0_30  (注意别配置到bin目录下)

2)端口占用的错误

原因: tomcat启动所需的端口被其他软件占用了!

解决办法:

a)关闭其他软件程序,释放所需端口

b)修改tomcat软件所需端口

找到并修改%tomcat%/conf/server.xml文件

  <Connector port="8081" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" />

3)CATALINA环境变量问题
原因: tomcat软件启动后,除了查找JAVA_HOME后,还会再查找一个叫CATALINA_HOME变量,这个变量的作用是设置tomcat的根目录。
解决办法:建议不要设置CATALINA_HOME变量。检查如果有的话,清除掉!!!
4.5 体验tomcat软件作用
webapps目录: tomcat共享目录。需要共享的本地资源放到此目录中。


4.6 URL
URL全名叫统一资源定位符,用于定位互联网的资源。


问题: http://localhost:8081/myweb/test.html  看到文件?


http://     协议。http协议。
localhost    域名。为了找到IP地址。
本地域名: localhost
外部域名:www.baidu.com
8081       端口。软件监听的
8080: tomcat默认的端口
3306:mysql数据库的端口
1521: orace数据库的端口。
/myweb:   web应用的名称。默认情况下,在webapps目录下找
/test.html  : 资源名称。

5 Tomcat的目录结构
|-bin: 存放tomcat的命令。
catalina.bat 命令:
startup.bat  -> catalina.bat start
shutdown.bat - > catalina.bat stop
|- conf: 存放tomcat的配置信息。其中server.xml文件是核心的配置文件。
|-lib:支持tomcat软件运行的jar包。其中还有技术支持包,如servlet,jsp
|-logs:运行过程的日志信息
|-temp: 临时目录
|-webapps: 共享资源目录。web应用目录。(注意不能以单独的文件进行共享)
|-work: tomcat的运行目录。jsp运行时产生的临时文件就存放在这里
6 Web应用的目录结构
|- WebRoot :   web应用的根目录
|- 静态资源(html+css+js+image+vedio)
|- WEB-INF : 固定写法。
|-classes: (可选)固定写法。存放class字节码文件
|-lib: (可选)固定写法。存放jar包文件。
|-web.xml    

注意:
1)WEB-INF目录里面的资源不能通过浏览器直接访问
2)如果希望访问到WEB-INF里面的资源,就必须把资源配置到一个叫web.xml的文件中。
练习:
1)在webapps下建立一个mybbs目录
2)创建两个文件
2.1 index.html  里面随便写内容,有超链接-连接到test.html
2.2 test.html   里面随便写
3)通过浏览器访问到。

7 手动开发动态资源
7.1 静态资源和动态资源的区别
静态资源: 当用户多次访问这个资源,资源的源代码永远不会改变的资源。
动态资源:当用户多次访问这个资源,资源的源代码可能会发送改变。
7.2 动态资源的开发技术
Servlet : 用java语言来编写动态资源的开发技术。
Servlet特点:
1)普通的java类,继承HttpServlet类,覆盖doGet方法
2)Servlet类只能交给tomcat服务器运行!!!!(开发者自己不能运行!!!)
Servlet手动编写步骤:
1)编写一个servlet程序,继承HttpServlet

/**
 * 第一个servlet程序
 * @author APPle
 *
 */
public class HelloServlet extends HttpServlet{


@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//解决中文乱码问题
resp.setContentType("text/html;charset=utf-8");
//向浏览器输出内容
resp.getWriter().write("这是第一个servlet程序。当前时间为:"+new Date());
}
}


2)找到HelloServlet类的class字节码,然后把拷贝到tomcat的一个web应用中WEB-INF/classes目录下。
3)在当前web应用下的web.xml文件配置Servlet。

<!-- 配置一个servlet程序 -->
<servlet>
<!-- servlet的内部名称 ,可以自定义-->
<servlet-name>HelloServlet</servlet-name>
<!-- servlet类名: 包名+简单类名-->
<servlet-class>gz.itcast.d_servlet.HelloServlet</servlet-class>
</servlet>


<servlet-mapping>
<!-- servlet的内部名称,和上面的名称保持一致!!!-->
<servlet-name>HelloServlet</servlet-name>
<!-- servlet的访问名称: /名称 -->
<url-pattern>/hello</url-pattern>
</servlet-mapping>


4)启动tomcat服务器,运行访问
访问servlet:  http://localhost:8080/myweb/ hello
8 工具开发动态资源
1)创建web project (javaweb工程)
2)在WebRoot下建立静态资源文件,
3)在src下建立动态资源文件
 3.1 new -> Servlet( servlet的代码生成器)
 3.2 写pacakge  -> class名 -> 修改mapping  url 
4)关联tomcat服务器
4.1 window-> Preferences - > MyEcplise -> servers -> Tomcat 6.x (注意一定要enable)


5)部署web project应用。(拷贝web应用到tomcat的webapps目录下)
6)启动tomcat服务器
7)访问servlet
http://localhost:8081/day08_web/hello





0 0
原创粉丝点击