javaee笔记1.docx

上传人:b****7 文档编号:23393569 上传时间:2023-05-16 格式:DOCX 页数:47 大小:99.59KB
下载 相关 举报
javaee笔记1.docx_第1页
第1页 / 共47页
javaee笔记1.docx_第2页
第2页 / 共47页
javaee笔记1.docx_第3页
第3页 / 共47页
javaee笔记1.docx_第4页
第4页 / 共47页
javaee笔记1.docx_第5页
第5页 / 共47页
点击查看更多>>
下载资源
资源描述

javaee笔记1.docx

《javaee笔记1.docx》由会员分享,可在线阅读,更多相关《javaee笔记1.docx(47页珍藏版)》请在冰豆网上搜索。

javaee笔记1.docx

javaee笔记1

一、SAX解析--(掌握解析原理,能讲出DOM与SAX的区别)

1、XML解析的特点

A、DOM解析的特点

是先把xml文件全部读完,并把文件中每一个节点都转换成相关DOM对象,并存放在内存.

文件大的时候,读的过程耗时长;对大文件解析不了(文件大小超过java虚拟的可用内存会出现内存溢出)/性能低.

B、SAX解析的思路

for(inti=0;i<100000;i++){

Bookb=newBook();

读xml中一个节点,把节点中的内容变成java对象

...

对Book进行处理,

把b保存到数据库

}

SAX解析是基于事件驱动的方式。

解析器会去读xml文件,每读到一过片段(标签开始,文本开始,标签结束),均会产生事件。

如果用户对某一个事件有兴趣,就可以进行监听。

2、SAX解析器相关api

SAXParserFactory这个类负责创建一个SAXParser;

SAXParser负责创建一个XMLReader;

XMLReader上面可设置ContentHandler,内容处理器;

调用XMLReader上的parse方法解析xml文件;

解析的过程中,会不断根据顺序读取xml相关信息(元素开始、元素结束、读到字符),去调用CotentHandler里面的相关方法,(并把读到信息作为参数传到方法里)。

内容处理器就根据这参数中的信息作相应的处理。

3、完整的解析代码

finalListlist=newArrayList();

//解析器工厂

SAXParserFactoryfactory=SAXParserFactory.newInstance();

//创建解析器

SAXParserparser=factory.newSAXParser();

//创建内容处理器,使用匿名DefaultHandler的子类

DefaultHandlerhandler=newDefaultHandler(){

privateintc=0;

privateStringtag;

privateBookbook;

@Override

publicvoidstartElement(Stringuri,StringlocalName,Stringname,

Attributesattributes)throwsSAXException{

System.out.println((c++)+":

<"+name+">");

tag=name;

if("书".equals(tag)){

//读到<书>标签时立即创建一个新Book

book=newBook();

//取出id属性

Stringid=attributes.getValue("id");

book.setId(newInteger(id));

list.add(book);

}

}

@Override

publicvoidendElement(Stringuri,StringlocalName,Stringname)

throwsSAXException{

System.out.println((c++)+":

");

tag=null;

}

@Override

publicvoidcharacters(char[]ch,intstart,intlength)

throwsSAXException{

Stringvalue=newString(ch,start,length);

System.out.println((c++)+"text:

"+value);

//读取书名

//当上次一次读的开始标签是书名,则本次读到文本就是书名

if("书名".equals(tag)){

book.setName(value);

}

elseif("作者".equals(tag)){

book.setAuthor(value);

}

//elseif(tag!

=null&&tag.equals("售价")){

elseif("售价".equals(tag)){

value=value.replace("元","");

book.setPrice(newDouble(value));

}

}

};

parser.parse("books.xml",handler);

System.out.println("解析完成!

");

System.out.println(list);

二、XPath概述--(了解)

如何查询xml的节点:

XPath就是做xml节点查询。

查询数据表:

select*from表名wherena=?

1、XPath概述--W3C定义一套专门用来查询xml元素(节点)的语言-

XPath是一门在XML文档中查找信息的语言。

XPath用于在XML文档中通过元素和属性进行导航。

表达式描述

nodename选取此节点的所有子节点

/从根节点选取

//从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置

.选取当前节点

..选取当前节点父节点

@选取属性

2、Java6中Xpath的相关api

A、创建XPathFactory

XPathFactoryxpathFactory=XPathFactory.newInstance();

B、创建XPath对象

XPathxpath=xpathFactory.newXPath();

C、写XPath查询表达式(专门查询xml文件的语言),通过xpath对象对文档进行查询。

查询的结果就是一堆符合条件DOM节点。

(Element等)

3、XPath使用举例

XPathFactoryfactory=XPathFactory.newInstance();

XPathxpath=factory.newXPath();

//使用xpath去查询xml文档,执行一个XPath表达式来查询

InputSourceis=newInputSource("books.xml");

try{

//查询书下面的作者节点

Stringret=xpath.evaluate("//书/作者",is);

System.out.println(ret);

//查询最后一个作者

ret=xpath.evaluate("//书[last()]/作者",is);

System.out.println(ret);

//查询属性id为2的书名

ret=xpath.evaluate("//书[@id='2']/书名",is);

System.out.println(ret);

System.out.println("--------------");

//如果需要查出来的是DOM节点,使用XPathConstants中定义的常量来指定返回的节点类型

//返回单个元素

Elementel=(Element)xpath.evaluate("//书",is,XPathConstants.NODE);

System.out.println(el.getTagName());

System.out.println(el.getTextContent());

//返回多个元素,XPathConstants.NODESET用来指定返回多个元素NodeLit

NodeListnodeList=(NodeList)xpath.evaluate("//书",is,XPathConstants.NODESET);

System.out.println("节点数:

"+nodeList.getLength());

System.out.println(nodeList.item(0).getTextContent());

}catch(XPathExpressionExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}

三、JDOM及DOM4J框架应用--(了解)

Java6之前解析xml,使用第三方框架。

1、JDOM

A、下载JDom

从文档或者示例代码入手.

/*XMLWriterforviewingSAXevents.*/

XMLWriterecho=newXMLWriter();

/*Builddocumentfromxmlfile.*/

SAXBuilderbuilder=newSAXBuilder();

builder.setXMLFilter(echo);

InputStreamin=FilterTest.class.getResourceAsStream("test2.xml");

System.out.println("--SAXBuilder(test2.xml),echobyXMLWriter--\n");

Documentdoc=builder.build(in);

System.out.println("--DocumentReader(doc)outputbyXMLWriter--\n");

XMLReaderparser=newDocumentReader(doc);

echo.setParent(parser);

StringWriterwriter=newStringWriter();

parser=newXMLWriter(echo,writer);

parser.parse((InputSource)null);

/*Reconstitutedocumentfromregurgitatedstring.*/

builder=newSAXBuilder();

builder.setXMLFilter(echo);

Stringxml=writer.toString();

System.out.println("--xmlstring--\n");

doc=builder.build(newStringReader(xml));

System.out.println("--SAXBuilder(xml)outputbyXMLOutputter--\n");

XMLOutputteroutputter=newXMLOutputter();

outputter.output(doc,System.out);

B、把框架jar及相关的jar拷到我们的项目中。

并添加到Buildpath中。

2、DOM4J--参考测试代码

四、Web开发概述

1、web开发发展过程

A、写网页-静态网页--HTML标记--1998

B、动态网页--CGI网关(C语言)

main(){

out.println("

");

out.println("

");

if(dd){

out.println("");

}

}

C、动态网页--ASP

D、动态网页--Servlet(Java类)--JSP(在html标签加入java代码)。

E、Model2--->MVC框架

F、其它语言:

PHP、Ruby.

2、什么是Web应用开发

需要连接网络的应用程序。

A、C/S结构

程序即要安装客户端,又要安装服务器端。

Clinet/Server。

维护成本很高,升级很麻烦,开发成本高。

C语言/Java/C++/C#

B、B/S结构(Browser/Server)

客户端没有程序,只有浏览器。

服务器端就是Web应用。

优点:

部署容易/维护起来简单一点。

支持任意客户端。

Android/iOS/WindowPhone

C/C结构的优势:

客户端处理速度快。

3、访问web的流程

A、用户在浏览器上输出一个网址

B、DNS服务器会根据网址找到对应的ip192.168.10.21

C、客户端浏览器程序就会与IP进行连接--端口

D、连接成功以后,客户端给服务器发送数据(HTTP请求)

E、服务器端收到连接,解析请求信息,并执行服务器的相关程序。

最后把结果发送客户端。

F、客户端浏览解析服务器端发回来的html信息,并显示在网页。

五、Web服务器的原理

1、HTTP协议

是浏览器软件包与web服务器软件进行通话的种标准语言,也就是http协议。

无状态

http1.0来说

无连接

2、监控http请求

FireBug

HttpWatcher

A、客户端给服务器发送的数据内容:

GET/login.htmlHTTP/1.1

Accept:

*/*

Accept-Language:

zh-cn,ja;q=0.7,zh-tw;q=0.3

Accept-Encoding:

gzip,deflate

User-Agent:

Mozilla/4.0(compatible;MSIE6.0;WindowsNT5.1;SV1;Mozilla/4.0(CompatibleMozilla/4.0(Compatible-EmbeddedWB14.59EmbeddedWB-14.59from:

;CIBA;.NETCLR2.0.50727;.NETCLR3.0.4506.2152;.NETCLR3.5.30729;InfoPath.2)

Host:

Connection:

Keep-Alive

Cookie:

BAIDUID=9BA49B23C52B3BA5F64DD7805EA0DB13:

FG=1;BDUSS=RLVVhzSmpSTThrTVhrUkhIOG5MWXNZbzN1ak04dkFnQzBjOTk4ZXI3NEtGVFJSQUFBQUFBJCQAAAAAAAAAAAouSSCodJAMs8m2vGphdmHAx87RAAAAAAAAAAAAAAAAAAAAAAAAAACAYIArMAAAAOD6RX0AAAAAmWdCAAAAAAAxMC4zNi4xNArHRlAKx0ZQM3

B、服务器端给客户端的响应信息

HTTP/1.1200OK

Server:

Apache-Coyote/1.1

ETag:

W/"1062-1275810607203"

Last-Modified:

Sun,06Jun201007:

50:

07GMT

Content-Type:

text/html

Content-Length:

1062

Date:

Wed,12Sep201207:

25:

11GMT

锘?

?

xmlversion="1.0"encoding="UTF-8"?

>

DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.1//EN""http:

//www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

//www.w3.org/1999/xhtml">

3、使用Telnet来连接web服务器

telnet主机ip端口号(web服务器端默认端口号是80)

按:

ctrl+] 

再按:

回车

输入Http请求信息

GET/login.htmlHTTP/1.1

Host:

4、写一个简单的Web服务器

publicclassServer{

privatebooleanstop=false;

privateintport=80;

privateStringappBase="F:

/cditcast/gz20120908/day04-helloweb";

publicvoidstart()throwsException{

//创建一个服务器端Socket

ServerSocketserverSocket=newServerSocket(port);

System.out.println("服务器启动....");

while(!

stop){

//开始监听,等待客户端连接

finalSocketsocket=serverSocket.accept();

//让客户端与服务器端进行通话,在新线程中运行

newThread(newRunnable(){

publicvoidrun(){

try{

System.out.println("客户端:

"+socket.getInetAddress());

//1,接收http请求信息

BufferedReaderreader=newBufferedReader(newInputStreamReader(socket.getInputStream()));

//GET/login.htmlHTTP/1.1

Stringline=reader.readLine();

//获得客户端要请求的资源

StringfileName=line.split("")[1];

//处理客户端的请求

Filefile=newFile(appBase+fileName);

InputStreamin=newFileInputStream(file);

//给客户端发出来数据内容

OutputStreamout=socket.getOutputStream();

//下面的contentType是有问题,应该根据不同的扩展名来生成不同的。

StringcontentType=fileName.endsWith(".html")?

"text/html":

"image/jpeg";

//发送响应头

out.write("HTTP/1.1200OK\r\n".getBytes());

out.write("Server:

ItcastwebServer\r\n".getBytes());

out.write(("Content-Type:

"+contentType+"\r\n").getBytes());

out.write(("Content-Length:

"+file.length()+"\r\n").getBytes());

out.write("\r\n".getBytes());

//写正文内容

byte[]buffer=newbyte[1024];

intlen=-1;

while((len=in.read(buffer))>0){

out.write(buffer,0,len);

}

out.close();

socket.close();

}

catch(Exceptione){

e.printStackTrace();

}

}

}).start();

}

}

publicvoidshutdown(){

stop=true;

}

/**

*@paramargs

*/

publicstaticvoidmain(String[]args)throwsException{

Serverserver=newServer();

//第一个参数是web应用的根目录第二个参数是端口号

if(args.length>0)server.appBase=args[0];

if(args.length>1)server.port=newInteger(args[1]);

server.start();

}

}

六、Tomcat的配置

1、javaweb应用目录结构

A、静态部分(html,image,xml文件等均为静态资源)--->当用户请求这些资源,服务器会内容直接输出给客户端。

B、动态资源(jsp,servert)--->当用户访问时,Web容器会进行处理,执行相应的程序,最后才生成静态html给客户端。

WEB-INF目录,他里面存放是动态web有关的信息。

包括:

web.xml,classes目录,lib目录。

这个目录是不能直接访问的。

Servlet(2.5,3.0)--JavaWeb应用开发/web服务器所遵循的一些规范。

web应用可以打成一个war包,这就是一个标准的zip文件。

2、Tomcat入门

A、安装程序介绍

tomcat7支持Servelt3.0

tomcat6支持servelt2.5

apache-tomcat-6.0.29.exe--在window下的安装程序。

apache-tomcat-7.0.30.zip--绿色版

apache-tomcat-7.0.30-src.zip--Tomcat源代码(Java写)

B、tomcat软件的目录结构

bin--提供一些批处理

startup.bat--起动tomcat,(startup.shLinux平台的起动程序)

shutdown.bat--停止

conf--tomcat配置目录

lib--tomcat运行所依赖的一些包

logs--日志目录

webapps--web应用的目录

work--tomcat的工作目录

3、常见错误

A、端口被占用--关掉使用该端口的程序/修改tomcat的使用端口

.BindException:

Addressalreadyinuse:

JVM_Bind

at.PlainSocketImpl.socketBind(NativeMethod)

查看哪些端口被使用

netstat-a-o

B、设有设置好JAVA_HOME环境变量

TheJRE_HOMEenvironmentvariableisnotd

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1