javaee笔记1.docx
- 文档编号:23393569
- 上传时间:2023-05-16
- 格式:DOCX
- 页数:47
- 大小:99.59KB
javaee笔记1.docx
《javaee笔记1.docx》由会员分享,可在线阅读,更多相关《javaee笔记1.docx(47页珍藏版)》请在冰豆网上搜索。
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、完整的解析代码
finalList
//解析器工厂
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++)+":
"+name+">");
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- javaee 笔记