??xml version="1.0" encoding="utf-8" standalone="yes"?>
最q看到很多sql里用到where 1=1Q原来觉得这没用嘛,但是又想到如果没用ؓ(f)什么要写呢Q于是在|上
查了(jin)查,在这里就谈一下:(x)
1=1 永真Q?nbsp; 1<>1 永假?br>
1<>1 的用处:(x)
用于只取l构不取数据的场?br>例如Q?br>create table table_temp tablespace tbs_temp as
select * from table_ori where 1<>1
建成一个与table_ori l构相同的表table_tempQ但是不要table_ori 里的数据。(除了(jin)表结构,其它l?/p>
构也同理)
1=1的用?br>用于动态SQL
例如 lv_string := 'select tbl_name,tbl_desc from tbl_test where 1=1 '||l_condition;
当用户选择?jin)查询的名?abc'时l_condition :='and tbl_name = ''abc'''';但是当用h?/p>
选择名称查询时l_condition׃ؓ(f)I?q样 lv_string = 'select tbl_name,tbl_desc from tbl_test
where 1=1 ' Q运行也不会(x)出错Q相当于没有限制名称条g。但是如果没?=1的条Ӟ则lv_string =
'select tbl_name,tbl_desc from tbl_test where ';q样׃(x)报错?br>
除了(jin)1=1 ?<>1之外的其它永真永假的条g同理?br>
![]() 主要包含?jin)以下几U技术:(x) AjaxQAsynchronous JavaScript + XMLQ的定义 Zweb标准Qstandards-based presentationQXHTML+CSS的表C; 使用 DOMQDocument Object ModelQ进行动态显C及(qing)交互Q? 使用 XML ?XSLT q行数据交换?qing)相x(chng)作; 使用 XMLHttpRequest q行异步数据查询、检索; 使用 JavaScript 所有的东西l定在一赗?/font> 英文 参见Ajax的提?gu)Jesse James Garrett的原文a cM于DHTML或LAMPQAJAX不是指一U单一的技术,而是有机地利用了(jin)一pd相关的技术。事实上Q一些基于AJAX的“派?合成”式Qderivative/compositeQ的技术正在出玎ͼ如“AFLAX”? AJAX的应用用支持以上技术的web览器作行^台。这些浏览器目前包括QMozilla、Firefox、Internet Explorer、Opera、Konqueror?qing)Safari。但是Opera不支持XSL格式对象Q也不支持XSLT?br /> 与传l的web应用比较 传统的web应用允许用户填写表单(form)Q当提交表单时就?/font> web 服务?/font> 发送一个请求。服务器接收q处理传来的表单Q然後返回一个新?/font> |页 。这个做法浪费了(jin)许多带宽Q因为在前後两个面中的大部分HTML代码往往是相同的。由于每ơ应用的交互都需要向服务器发送请求,应用的响应时间就依赖于服务器?/font> 响应旉 。这D?jin)用L(fng)面的响应比本地应用慢得多? 与此不同QAJAX应用可以仅向服务器发送ƈ取回必需的数据,它用SOAP或其它一些基于XML的web service接口Qƈ在客L(fng)采用JavaScript处理来自服务器的响应。因为在服务器和览器之间交换的数据大量减少Q结果我们就能看到响应更快的应用。同时很多的处理工作可以在发?gu)求的客户端机器上完成Q所以Web服务器的处理旉也减了(jin)?br /> Ajax应用E序的优势在于:(x) 1. 通过异步模式Q提升了(jin)用户体验 2. 优化?/font> 览?/font> 和服务器之间的传输,减少不必要的数据往q,减少?jin)带宽占?br /> 3. Ajax引擎在客L(fng)q行Q承担了(jin)一部分本来由服务器承担的工作,从而减了(jin)大用户量下的服务器负载?br /> Ajax的工作原?/b> Ajax的核?j)是JavaScript对象XmlHttpRequest。该对象在Internet Explorer 5中首ơ引入,它是一U支持异步请求的技术。简而言之,XmlHttpRequest使?zhn)可以使用JavaScript向服务器提出hq处理响应,而不d用户?br /> 在创建Web站点Ӟ在客L(fng)执行屏幕更新为用h供了(jin)很大的灵zL。下面是使用Ajax可以完成的功能:(x) (tng) (tng) 动态更新购物R的物品LQ无需用户单击Updateq等待服务器重新发送整个页面? (tng) (tng) 提升站点的性能Q这是通过减少从服务器下蝲的数据量而实现的。例如,在某购物车页面,当更新篮子中的一物品的数量Ӟ?x)重新蝲入整个页面,q必M载整个页面的数据。如果用Ajax计算新的总量Q服务器只会(x)q回新的总量|因此所需的带宽仅为原来的癑ֈ之一?消除?jin)每ơ用戯入时的页面刷新。例如,在Ajax中,如果用户在分列表上单击NextQ则服务器数据只h列表而不是整个页面? 直接~辑表格数据Q而不是要求用户导航到新的面来编辑数据。对于AjaxQ当用户单击EditӞ可以静(rn)态表格刷Cؓ(f)内容可编辑的表格。用户单击Done之后Q就可以发出一个Ajaxh来更新服务器Qƈh表格Q其包含静(rn)态、只ȝ数据?br /> 一切皆有可能!但愿它能够激发?zhn)开始开发自qZAjax的站炏V然而,在开始之前,让我们介l一个现有的Web站点Q它遵@传统的提?{待/重新昄的范例,我们q将讨论Ajax如何提升用户体验?br /> Ajax的工作原理相当于在用户和服务器之间加?jin)—个中间层,使用h作与服务器响应异步化。这h以前的一些服务器负担的工作{嫁到客户端,利于客户端闲|的处理能力来处理,减轻服务器和带宽的负担,从而达到节UISP的空间及(qing)带宽U用成本的目的?br /> 我们以两个验证通行证帐h否存在的例子来讲qAJAX在实际中的应用:(x) (1)用文本字W串的方式返回服务器的响应来验证|易通行证帐h否存在; (2)以XMLDocument对象方式q回响应来验证金山通行证帐h否存在; 首先Q我们需要用JavaScript来创建XMLHttpRequest cd服务器发送一个HTTPhQ?XMLHttpRequest c首先由Internet Explorer以ActiveX对象引入Q被UCؓ(f)XMLHTTP?后来MozillaHNetscapeHSafari 和其他浏览器也提供了(jin)XMLHttpRequestc,不过它们创徏XMLHttpRequestcȝҎ(gu)不同?br /> 对于Internet Explorer览器,创徏XMLHttpRequest Ҏ(gu)如下Q?br /> xmlhttp_request = new ActiveXObject("Msxml2.XMLHTTP.3.0"); //3.0?.0, 5.0 xmlhttp_request = new ActiveXObject("Msxml2.XMLHTTP"); xmlhttp_request = new ActiveXObject("Microsoft.XMLHTTP"); ׃在不同Internet Explorer览器中XMLHTTP版本可能不一_(d)Z(jin)更好的兼容不同版本的Internet Explorer览器,因此我们需要根据不同版本的Internet Explorer览器来创徏XMLHttpRequestc,上面代码是Ҏ(gu)不同的Internet Explorer览器创建XMLHttpRequestcȝҎ(gu)?br /> 对于MozillaHNetscapeHSafari{浏览器Q创建XMLHttpRequest Ҏ(gu)如下Qxmlhttp_request = new XMLHttpRequest(); 如果服务器的响应没有XML mime-type headerQ某些Mozilla览器可能无法正常工作?Z(jin)解决q个问题Q如果服务器响应的header不是text/xmlQ可以调用其它方法修改该header?br /> xmlhttp_request = new XMLHttpRequest(); xmlhttp_request.overrideMimeType('text/xml'); 在实际应用中Qؓ(f)?jin)兼容多U不同版本的览器,一般将创徏XMLHttpRequestcȝҎ(gu)写成如下形式Q?br /> try{ if( window.ActiveXObject ){ for( var i = 5; i; i-- ){ try{ if( i == 2 ){ xmlhttp_request = new ActiveXObject( "Microsoft.XMLHTTP" ); }else{ xmlhttp_request = new ActiveXObject( "Msxml2.XMLHTTP." + i + ".0" ); } xmlhttp_request.setRequestHeader("Content-Type","text/xml"); xmlhttp_request.setRequestHeader("Content-Type","gb2312"); break;} catch(e){ xmlhttp_request = false; } } }else if( window.XMLHttpRequest ){ xmlhttp_request = new XMLHttpRequest(); if (xmlhttp_request.overrideMimeType) { xmlhttp_request.overrideMimeType('text/xml'); } } }catch(e){ xmlhttp_request = false; } 在定义了(jin)如何处理响应后,p发送请求了(jin)。可以调用HTTPhcȝopen()和send()Ҏ(gu)Q如下所C:(x) xmlhttp_request.open('GET', URL, true); xmlhttp_request.send(null); open()的第一个参数是HTTPh方式—GETQPOST或Q何服务器所支持的?zhn)惌用的方式?按照HTTP规范Q该参数要大写;否则Q某些浏览器(如Firefox)可能无法处理h? W二个参数是h面的URL?br /> W三个参数设|请求是否ؓ(f)异步模式。如果是TRUEQJavaScript函数l执行,而不{待服务器响应。这是"AJAX"中的"A"?br /> 用JavaScript来创建XMLHttpRequest cd服务器发送一个HTTPh后,接下来要军_当收到服务器的响应后Q需要做什么。这需要告诉HTTPh对象用哪一个JavaScript函数处理q个响应。可以将对象的onreadystatechange属性设|ؓ(f)要用的JavaScript的函数名Q如下所C:(x)xmlhttp_request.onreadystatechange =FunctionName; FunctionName是用JavaScript创徏的函数名Q注意不要写成FunctionName()Q当然我们也可以直接JavaScript代码创徏在onreadystatechange之后Q例如:(x)xmlhttp_request.onreadystatechange = function(){ // JavaScript代码D?br /> }; 在这个函C。首先要(g)查请求的状态。只有当一个完整的服务器响应已l收C(jin)Q函数才可以处理该响应。XMLHttpRequest 提供?jin)readyState属性来Ҏ(gu)务器响应q行判断?br /> readyState的取值如下:(x) 0 (未初始化) 1 (正在装蝲) 2 (装蝲完毕) 3 (交互? 4 (完成) 所以只有当readyState=4Ӟ一个完整的服务器响应已l收C(jin)Q函数才可以处理该响应。具体代码如下:(x) if (http_request.readyState == 4) { // 收到完整的服务器响应 } else { // 没有收到完整的服务器响应 }当readyState=4Ӟ一个完整的服务器响应已l收C(jin)Q接着Q函C(x)(g)查HTTP服务器响应的状态倹{完整的状态取值可参见W3C文档。当HTTP服务器响应的gؓ(f)200Ӟ表示状态正常?br /> 在检查完h的状态值和响应的HTTP状态值后Q就可以处理从服务器得到的数据了(jin)。有两种方式可以得到q些数据Q?1) 以文本字W串的方式返回服务器的响?br /> (2) 以XMLDocument对象方式q回响应 实例一Q?用文本字W串的方式返回服务器的响应来验证|易通行证帐h否存?br /> 首先Q我们登陆网易通行证注册页面,可以看到(g)用户名是否存在是将用户名提交给checkssn.jsp面q行判断Q格式ؓ(f)Q?br /> reg.163.com/register/checkssn.jsp?username=用户?Ҏ(gu)上面讲到的方法,我们可以利用AJAX技术对|易通行证用户名q行(g):(x) W一步:(x)新徏一个基于Xhtml标准的网,在区域插入Javascript函数如下Q?br /> function getXMLRequester( ) { var xmlhttp_request = false; try { if( window.ActiveXObject ) { for( var i = 5; i; i-- ){ try{ if( i == 2 ) { xmlhttp_request = new ActiveXObject( "Microsoft.XMLHTTP" ); } else { xmlhttp_request = new ActiveXObject ( "Msxml2.XMLHTTP." + i + ".0" ); xmlhttp_request.setRequestHeader ("Content-Type","text/xml"); xmlhttp_request.setRequestHeader("Content-Type","gb2312"); } break;} catch(e){ xmlhttp_request = false; } } } else if( window.XMLHttpRequest ) { xmlhttp_request = new XMLHttpRequest(); if (xmlhttp_request.overrideMimeType) { xmlhttp_request.overrideMimeType('text/xml'); } } } catch(e){ xmlhttp_request = false; } return xmlhttp_request ; } function IDRequest(n) {//定义收到服务器的响应后需要执行的JavaScript函数 url=n+document.getElementById('163id').value; //定义|址参数 xmlhttp_request=getXMLRequester(); //调用创徏XMLHttpRequest的函?xmlhttp_request.onreadystatechange = doContents; //调用doContents函数 xmlhttp_request.open('GET', url, true); xmlhttp_request.send(null); } function doContents() { if (xmlhttp_request.readyState == 4) {// 收到完整的服务器响应 if (xmlhttp_request.status == 200) { //HTTP服务器响应的值OK document.getElementById('message').innerHTML = xmlhttp_request.responseText; //服务器q回的字W串写到面中ID为message的区?} else { alert(http_request.status); } } } 在区域徏立一个文本框Qid?63id 再徏一个id为messsge的空白区域用来显C回字W串(也可以通过Javascript函数截取一部分字符串显C?Q? q样Q一个基于AJAX技术的用户名检页面就做好?jin),不过q个面返回服务器响应生成面的所有字W串Q当然还可以对返回的字符串进行一些操作,便于应用C同的需要当中?br /> 实例二:(x) 以XMLDocument对象方式q回响应来验证金山通行证帐h否存?br /> 在上面的例子中,当服务器对HTTPh的响应被收到后,我们?x)调用请求对象的reponseText属性。该属性包含了(jin)服务器返回响应文件的内容。现在我们以XMLDocument对象方式q回响应Q此时将不再需要reponseText属性而用responseXML属性?br /> 首先登陆金山通行证注册页面,我们发现金山通行证用户名的检方式ؓ(f)Q?pass.kingsoft.com/ksgweb/jsp/login/uid.jsp?uid=用户?q且q回XML数据: isExistedUid -2 当resultgؓ(f)-1时表C此用户名已被注册,当resultgؓ(f)-2时表C此用户名尚未注册,因此通过对result值的判断可以知道用户名是否被注册?br /> 对上例代码进行修改:(x) 首先扑ֈ document.getElementById('message').innerHTML = xmlhttp_request.responseText; 改ؓ(f): var response = xmlhttp_request.responseXML.documentElement; var result = response.getElementsByTagName('result')[0].firstChild.data;//q回result节点数据 if(result ==-2){ document.getElementById('message').innerHTML = "用户?+document.getElementById('163id').value+"未注册";} else if(result ==-1){ document.getElementById('message').innerHTML = "对不?用户?+document.getElementById('163id').value+"已经注册";} 通过以上两个实例说明?jin)AJAX的客L(fng)基础应用Q采用的是网易和金山现成的服务器端程序,当然Z(jin)开发合适自己页面的E序Q还需要对自己~写服务器端E序Q这设计到程序语a?qing)数据库的操作,对于有一定程序基的读者一定不是很隄事情?br /> |
Struts只是一个MVC框架QF(tun)rameworkQ?用于快速开发Java Web应用。Struts实现的重点在C(Controller)Q包括ActionServlet/RequestProcessor和我们定制的Action,也ؓ(f)V(View)提供?jin)一pd定制标签QCustom TagQ。但Struts几乎没有涉及(qing)M(Model),所以Struts可以采用JAVA实现的Q何Ş式的商业逻辑?
Spring是一个轻型容?light-weight container)Q其核心(j)是Bean工厂(Bean Factory)Q用以构造我们所需要的M(Model)。在此基之上QSpring提供?jin)AOPQAspect-Oriented Programming, 面向层面的编E)(j)的实玎ͼ用它来提供非理环境下申明方式的事务、安全等服务Q对Bean工厂的扩展ApplicationContext更加方便我们实现J2EE的应用;DAO/ORM的实现方便我们进行数据库的开发;Web MVC和Spring Web提供?jin)Java Web应用的框架或与其他流行的Web框架q行集成? 是说可两者一起用,辑ֈ两者自w的特点q行互补?br />优点Q? Struts跟Tomcat、Turbine{诸多Apache目一P是开源YӞq是它的一大优炏V开发者能更深入的?jin)解其内部实现机制? 除此之外QStruts的优点主要集中体现在两个斚wQTaglib和页面导航。Taglib是Struts的标记库Q灵zd用,能大大提高开发效率。另外,q前国内的JSP开发者而言Q除?jin)用JSP自带的常用标记外Q很开发自q标记Q或许Struts是一个很好的L(fng)? 关于面DQ我认ؓ(f)那将是今后的一个发展方向,事实上,q样做,使系l的脉络更加清晰。通过一个配|文Ӟ卛_把握整个pȝ各部分之间的联系Q这对于后期的维护有着莫大的好处。尤其是当另一批开发者接手这个项目时Q这U优势体现得更加明显? ~点Q? Taglib是Struts的一大优势,但对于初学者而言Q却需要一个持l学?fn)的q程Q甚臌?sh)(x)打׃|页~写的习(fn)惯,但是Q当你习(fn)惯了(jin)它时Q你?x)觉得它真的很棒? StrutsMVC的Controller一分ؓ(f)三,在获得结构更加清晰的同时Q也增加?jin)系l的复杂度? Struts从生到现在q(sh)到半q_(d)但已逐步来多q用于商业Y件。虽然它现在q有不少~点Q但它是一U非怼U的J2EE MVC实现方式Q如果你的系l准备采用J2EE MVC架构Q那么,不妨考虑一下Struts? |
Spring是一个开源框Ӟ它由Rod Johnson创徏。它是ؓ(f)?jin)解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从单性、可试性和松耦合的角度而言QQ何Java应用都可以从Spring中受益?br />
•? (tng) (tng) (tng) 目的Q解决企业应用开发的复杂?br /> •? (tng) (tng) (tng) 功能Q用基本的JavaBean代替EJBQƈ提供?jin)更多的企业应用功?br /> •? (tng) (tng) (tng) 范围QQ何Java应用 单来_(d)Spring是一个轻量的控制反?IoC)和面向切?AOP)的容器框架?br /> ■? (tng) (tng) (tng) 轻量——从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大只?MB多的JAR文g里发布。ƈ且Spring所需的处理开销也是微不道的。此外,Spring是非侵入式的Q典型地QSpring应用中的对象不依赖于Spring的特定类? ■? (tng) (tng) (tng) 控制反{——Spring通过一U称作控制反转(IoCQ的技术促(j)q了(jin)松耦合。当应用?jin)IoCQ一个对象依赖的其它对象?x)通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认ؓ(f)IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不{对象请求就d依赖传递给它?br /> ■? (tng) (tng) (tng) 面向切面——Spring提供?jin)面向切面编E的丰富支持Q允?dng)R过分离应用的业务逻辑与系l服务Q例如审计(auditingQ和事务Q)(j)理Q进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们ƈ不负责(甚至是意识)(j)其它的系lx(chng)点,例如日志或事务支持? ■? (tng) (tng) (tng) 容器——Spring包含q管理应用对象的配置和生命周期,在这个意义上它是一U容器,你可以配|你的每个bean如何被创建——基于一个可配置原型QprototypeQ,你的bean可以创徏一个单独的实例或者每ơ需要时都生成一个新的实例——以?qing)它们是如何怺兌的。然而,Spring不应该被混同于传l的重量U的EJB容器Q它们经常是庞大与笨重的Q难以用? ■? (tng) (tng) (tng) 框架——Spring可以简单的lg配置、组合成为复杂的应用。在Spring中,应用对象被声明式地组合,典型地是在一个XML文g里。Spring也提供了(jin)很多基础功能Q事务管理、持久化框架集成{等Q,应用逻辑的开发留l了(jin)你? 所有Spring的这些特征你能够编写更q净、更可管理、ƈ且更易于试的代码。它们也为Spring中的各种模块提供?jin)基支持? |
Hibernate 是一个面?/font>
Java
环境的对?关系数据库映工兗用来把对象模型表示的对象映到ZSQL 的关pL型结构中厅R?br />
Hibernate 不仅仅管理Java cd数据库表的映,q提供数据查询和获取数据的方法,可以大幅度减开发时人工使用SQL 和JDBC 处理数据的时间。Hibernate 的目标是对于开发者通常的数据持久化相关的编EQ务,解放其中?5%?/font> 是一?/font> 开放源代码 的对象关pL框Ӟ它对JDBCq行?jin)非常轻量的对象封装,使得JavaE序员可以随?j)所Ʋ的使用对象~程思维来操U|据库?Hibernate可以应用在Q何用JDBC的场合,既可以在Java的客L(fng)E序实用Q也可以在Servlet/JSP的Web应用中用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMPQ完成数据持久化的重仅R? |
(tng) (tng) EJB是sun的服务器端组件模型,最大的用处是部|分布式应用E序Q类似微软的.com技术。凭借java跨^台的优势Q用EJB技术部|的分布式系l可以不限于特定的^台?br />
(tng) (tng) EJB (Enterprise JavaBean)是J2EE的一部分Q定义了(jin)一个用于开发基于组件的企业多重应用E序的标准。其特点包括|络服务支持和核?j)开发工?SDK)? (tng) (tng) 在J2EE里,Enterprise Java Beans(EJB)UCؓ(f)Java 企业柄,是Java的核?j)代码,分?f)整体柄和片段柄和消息柄三个部分,其中的消息柄在以后再作讨论。现在我们来看看什么是整体柄和片段柄? (tng) (tng) 整体柄是一U对? 标准Java对象由创建它的程序创建,当程序终止时Q对象也随之丢失Q这意味着当再ơ运行些E序Ӟ无法找到先前创建的柄,而整体柄?x)一直存在着直到它被删除?一个程序可以创Z个整体柄Qƈ且这个程序可以在被保存后随时停止和重启。整体柄会(x)依然存在。重启后Q程序可以找C之相对应的整体柄Qƈ且会(x)l箋(hu)使用q个整体柄?br /> (tng) (tng) EJB实际上是SUN的J2EE中的一套规?q且规定?jin)一pd的API用来实现把EJB概念转换成EJB产品.EJB是BEANS,BEANS是什么概?那就是得有一个容U_,让她可劲造腾的地?是得有容器.EJB必须生存在EJB容器?q个容器可是功能强大之极!奚w先要包装你BEAN,EJB的客L(fng)序实际上从来׃和你~写的EJB直接打交?他们之间是通过HOME/REMOTE接口来发生关pȝ.它负责你的BEAN的所有的吃喝拉萨?比如BEAN的持l化,安全?事务理... 一.什么是 EJB? 一个技术规范:(x)EJB 从技术上而言不是一U?产品" EJB 是一U标准描qC(jin)构徏应用lg要解决的: 可扩?(Scalable) 分布?(Distributed) 事务处理 (Transactional) 数据存储 (Persistent) 安全?(Secure) ?Sun ?EJB 的期?br /> 提供一个标准的分布的、基?OO 的组件架?br />屏蔽复杂的系l功能需?br />Write once, run anywhere 与非 Java 应用之间的互操作能力 兼容 CORBA 标准 ?Z么选择 EJB? EJB 服务器完?J杂"的工作:(x)应用开发h员关注于业务逻辑的实现而不是底层的实现机制(cM?4GL 语言设计的目? 支持事务处理 多个业务操作同时成功Q或全部p| 可以通过在代码外的描q来定义事务处理U别 可扩展?br />EJB 可以Ҏ(gu)(zhn)应用的增长而扩?br />EJB 服务器往往q提供了(jin)负蝲均衡?br />安全性:(x)?EJB 服务器提供资源的讉K权限控制 ?EJB 架构 Z(jin)满架构的目标,规范中描qC(jin) 服务?(Server) 容器 (Container) c?(Class) 和实?(Instance) Home ?Remote 接口 客户?(Client) ? 化的~程模型 x(chng)于业务逻辑实现QEJB 负责生命周期 (lifecycle), 数据存储 (persistence), 事务处理语义 (transactional semantic), 安全(security), ... 通用的编E模型:(x)各种服务的高?API Java 是其~程语言 |
一、javax.servlet.Servlet接口
servlet抽象集是javax.servlet.Servlet接口Q它规定?jin)必ȝServletcd现由servlet引擎识别和管理的Ҏ(gu)集?br />Servlet接口的基本目标是提供生命期方?font color="#990000">init()、service()和destroy()Ҏ(gu)?/font>
servlet接口中的Ҏ(gu)
void init(ServletConfit config)throws ServletException
在servlet被蝲入后和实施服务前由servlet引擎q行一ơ性调用。如果init()产生溢出UnavailableExceptionQ则servle退出服务?
ServletConfig getServletConfig()
q回传递到servlet的init()Ҏ(gu)的ServletConfig对象
void service(ServletRequest request, ServletResponse response)throws ServletException,IOException
处理request对象中描q的hQ用response对象q回hl果
String getServletInfo()
q回描述servlet的一个字W串
void destory()
当servlet要卸蝲时由servlet引擎调用
二、javax.servlet.GenericServletc(协议无关版本Q?/font>
GenericServlet是一U与协议无关的servletQ是一U跟本不对请求提供服务的servletQ而是单地从init()Ҏ(gu)启动后台U程q在destory()中杀歅R它可以用于模拟操作pȝ的端口监控进E?br />servlet API提供?jin)Servlet接口的直接实玎ͼUCؓ(f)GenericServlet。此cL供除?jin)service()Ҏ(gu)外所有接口中Ҏ(gu)的缺省实现。这意味着通过单地扩展GenericServlte可以~写一个基本的servlet?br />除了(jin)Servlet接口外,GenericServlet也实C(jin)ServletConfig接口Q处理初始化参数和servlet上下文,提供Ҏ(gu)权传递到init()Ҏ(gu)中的ServletConfig对象的方法?/font>
GenericServletcM的方?
void destory() ~飞l成单词“destory”的一个注册入?
String getInitParameter(String name) q回h指定名称的初始化参数倹{通过凋用config.getInitParameter(name)实现?
Enumeration getInitParameterNames() q回此serv]et已编码的所有初始化参数?个枚丄型倹{调用config.getInitParameterNames()获得列表。如果未提供初始化参敎ͼ则返?个空的枚丄型|但不是nullQ?
ServletConfig getServletConfig() q回传递到init()Ҏ(gu)的ServletConfig对象
ServletContext getServletContext() q回在config对象中引用的ServletContext
String getServletInfo() q回I字W串
void init(ServletConfig config)throws ServletException 在一实例变量中保存config对象。编写组成单词“init”的注册入口,然后调用Ҏ(gu)init()
void init()throws ServletException 可以被蟩q以处理servlet初始?在config对象被保存后init(ServletConfig config)的结֤自动被调?servlet作者经怼(x)忘记调用super.init(config)
void log(String msg) ~写注册servlet的入?为此调用servlet上下文的log()Ҏ(gu).servlet的名字被加到消息文本的开头?
void log(String msg,Throwable t) ~写一个入口和servlet注册的栈轨迹。此Ҏ(gu)也是ServletContext中相应方法的一个副本?
abstract void service(Request request,Response response)throws ServletException,IOException 由servlet引擎调用求对象描q的h提供服务。这是GenericServlet中唯一的抽象方法。因此它也是唯一必须被子cL覆盖的方法?
String getServletName() q回在Web应用发布描述器(web.xmlQ中指定的servlet的名字?
三、javax.servlet.http.HttpServletc(HTTP版本Q?/font>
虽然servlet API允许扩展到其它协议,但最l所有的servlet均在Web环境下实施操作,只有几种servlet直接扩展?jin)GenericServlet。对servlet更一般的是扩展其HTTP子类HttpServlet?br />HttpServletc通过调用指定到HTTPhҎ(gu)的方法实现service()Q亦卛_DELETE、HEAD、GET、OPTIONS、POST、PUT和TRACEQ分别调?font color="#660000">doDelete()、doHead()、doGet()、doOptions()、doPost()、doPut()和doTrace()Ҏ(gu)Q将h和响应对象置入其HTTP指定子类?/font>
HttpServletcM的方?
Void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException
(tng)由servlet引擎调用用处理一个HTTP GETh。输入参数、HTTP头标和输入流可从request对象、response头标和response对象的输出流中获得?
Void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException
由servlet引擎调用用处理一个HTTP POSTh。输入参数、HTTP头标和输入流可从request对象、response头标和response对象的输出流中获得?
Void doPut(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException
由servlet引擎调用用处理一个HTTP PUTh。本Ҏ(gu)中请求URI指出被蝲入的文g位置?
Void doDelete(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException
(tng)由servlet引擎调用用处理一个HTTP DELETEh。请求URI指出资源被删除?
Void doOptions(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException
由servlet引擎调用用处理一个HTTP OPTIONSh。返回一个Allow响应头标表明此servlet支持的HTTPҎ(gu)。一个servlet不需要覆盖此Ҏ(gu)Q因为HttpServletҎ(gu)已经实现规范所需的功能?
Void doTrace(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException
由servlet引擎调用用处理一个HTTP TRACEh。得请求头标被反馈成响应关标。一个servlet不需要覆盖此Ҏ(gu)Q因为HttpServletҎ(gu)已经实现HTTP规范所需的功能?
Void service(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException Service(Request request,Response response)
调用的一个立x(chng)法,带有指定HTTPh和响应。此Ҏ(gu)实际上将h导向doGet()、doPost(){等。不应该覆盖此方法?
Void service(Request request,Response response)throws ServletException,IOException 请求和响应对象|入其指定的HTTP子类Qƈ调用指定HTTP的service()Ҏ(gu)?
四、javax.servlet.ServletRequestc(协议无关版本Q?/font>
ServletRequest接口装?jin)客L(fng)h的细节。它与协议无养Iq有一个指定HTTP的子接口?br />ServletRequest主要处理Q?br />1.扑ֈ客户端的L名和IP地址
2.(g)索请求参?br />3.取得和设|属?br />4.取得输入和输出流
ServletRequestcM的方?
Object getAttribute(String name) q回h指定名字的请求属性,如果不存在则q回null。属性可由servlet引擎讄或用setAttribute()昑ּ加入?
Enumeration getAttributeName() q回h中所有属性名的枚举。如果不存在属性,则返回一个空的枚举?
String getCharacteEncoding() q回h所用的字符~码?
Int getContentLength() 指定输入的长度Q如果未知则q回-1?
ServletInputStream getInputStream()throws IOException q回与请求相关的Q二q制Q输入流。可以调用getInputStream()或getReader()Ҏ(gu)之一?
String getParameter(String name) q回指定输入参数Q如果不存在Q返回null?
Enumeration getParameterName() q回h中所有参数名的一个可能ؓ(f)I的枚D?
String[] getParameterValues(String name) q回指定输入参数名的取值数l,如果取g存在则返回null。它在参数具有多个取值的情况下十分有用?
String get Protocol() q回h使用协议的名U和版本?
String getScheme() q回hURI的子Ԍ但不包含W一个冒号前的内宏V?
String getServerName() q回处理h的服务器的主机名?
String getServerPort() q回接收L正在侦听的端口号?
BufferedReader getReader()throws IOException q回与请求相兌入数据的一个字W解d。此Ҏ(gu)与getInputStream()只可分别调用Q不能同时用?
String getRemoteAddr() q回客户端主机的数字型IP地址?
String getRemoteHost() 如果知道Q返回客L(fng)L名?
void setAttribute(String name,Object obj) 以指定名UC存请求中指定对象的引用?
void removeAttribute(String name) 从请求中删除指定属?
Locale getLocale() 如果已知Q返回客L(fng)的第一现场或者ؓ(f)null?
Enumeration getLocales() 如果已知Q返回客L(fng)的第一现场的一个枚举,否则q回服务器第一现场?
boolean isSecure() 如果h使用?jin)如HTTPS安全隧道Q返回true
RequestDispatcher getRequestDispatcher(String name) q回指定源名U的RequsetDispatcher对象?
五、javax.servlet.http.HttpServletRequest接口QHTTP版本Q?/font>
HttpServletRequestcM要处理:(x)
1.d和写入HTTP头标
2.取得和设|cookies
3.取得路径信息
4.标识HTTP?x)话?/font>
HttpServletRequest接口中的Ҏ(gu)
String getAuthType()
如果servlet׃个鉴定方案所保护Q如HTTP基本鉴定Q则q回Ҏ(gu)名称?
String getContextPath()
q回指定servlet上下文(web应用Q的URL的前~?
Cookie[] getCookies()
q回与请求相关cookie的一个数l?
Long getDateHeader(String name)
(tng)输?gu){换成适合构徏Date对象的longcd取值的getHeader()的简化版?
String getHeader(String name)
q回指定的HTTP头标指。如果其p求给出,则名字应为大写不敏感?
Enumeration getHeaderNames() q回hl出的所有HTTP头标名称的权丑ր{?
Enumeration getHeaders(String name) q回hl出的指定类型的所有HTTP头标的名U的枚D|它对h多取值的头标非常有用?
int getIntHeader(String name) 输?gu){换ؓ(f)int取值的getHeader()的简化版?
String getMethod()
q回HTTPhҎ(gu)Q例如GET、POST{等Q?
String getPathInfo()
q回在URL中指定的L附加路径信息?
String getPathTranslated() q回在URL中指定的L附加路径信息Q被子{换成一个实际\径?
String getQueryString() q回查询字符Ԍ即URL?后面的部份?
String getRemoteUser()
如果用户通过鉴定Q返回远E用户名Q否则ؓ(f)null?
String getRequestedSessionId()
q回客户端的?x)话ID
String getRequestURI()
q回URL中一部分Q从?”开始,包括上下文,但不包括L查询字符丌Ӏ?
String getServletPath()
q回hURI上下文后的子?
HttpSession getSession()
调用getSession(true)的简化版?
HttpSession getSession(boolean create)
q回当前HTTP?x)话Q如果不存在Q则创徏一个新的会(x)话,create参数为true?
Principal getPrincipal() 如果用户通过鉴定Q返回代表当前用L(fng)java.security.Principal对象Q否则ؓ(f)null?
boolean isRequestedSessionIdFromCookie() 如果h的会(x)话ID׃个Cookie对象提供Q则q回trueQ否则ؓ(f)false?
boolean isRequestedSessionIdFromURL() 如果h的会(x)话ID在请求URL中解码,q回trueQ否则ؓ(f)false
boolean isRequestedSessionIdValid() 如果客户端返回的?x)话ID仍然有效Q则q回true?
Boolean isUserInRole(String role) 如果当前已通过鉴定用户与指定角色相养I则返回trueQ如果不是或用户未通过鉴定Q则q回false?
六、javax.servlet.ServletResponse接口Q协议无关版本)(j)
ServletResponse对象一个servlet生成的结果传到发?gu)求的客户端。ServletResponse操作主要是作出流?qing)其内容cd和长度的包容器,它由servlet引擎创徏.
ServletResponse接口中的Ҏ(gu)
void flushBuffer()throws IOException 发送缓存到客户端的输出内容。因为HTTP需要头标在内容前被发送,调用此方法发送状态行和响应头标,以确认请求?
int getBufferSize() q回响应使用的缓存大。如果缓存无效则q加0?
String getCharacterEncoding() q回响应使用字符解码的名字。除非显式设|,否则为ISO-8859-1
Locale getLocale() q回响应使用的现场。除非用setLocale()修改Q否则缺省ؓ(f)服务器现场?
OutputStream getOutputStream()throws IOException q回用于返回的二进制输出写入客L(fng)的流Q此Ҏ(gu)和getWrite()Ҏ(gu)二者只能调用其一?
Writer getWriter()throws IOException q回用于返回的文本输出写入客户端的一个字W写入器Q此Ҏ(gu)和getOutputStream()二者只能调用其一?
boolean isCommitted() 如果状态和响应头标已经被发回客L(fng)Q则q回trueQ在响应被确认后发送响应头标毫无作用?
void reset() 清除输出~存?qing)Q何响应头标。如果响应已得到认Q则引发事gIllegalStateException?
void setBufferSize(int nBytes) 讄响应的最缓存大。实际缓存大可以更大,可以通过调用getBufferSize()得到。如果输出已被写入,则生IllegalStateException?
void setContentLength(int length) 讄内容体的长度?
void setContentType(String type) 讄内容cd。在HTTP servlet中即讄Content-Type头标?
void setLocale(Locale locale) 讄响应使用的现场。在HTTP servlet中,对Content-Type头标取g生媄(jing)响?
七、javax.servlet.http.HttpServletResponse接口QHTTP版本Q?/font>
HttpServletResponse加入表示状态码、状态信息和响应头标的方法,它还负责对URL中写入一Web面的HTTP?x)话IDq行解码?/font>
HttpServletResponse接口中的Ҏ(gu)
void addCookie(Cookie cookie) 一个Set-Cookie头标加入到响应?
void addDateHeader(String name,long date) 使用指定日期值加入带有指定名字(或代换所有此名字头标Q的响应头标的方法?
void setHeader(String name,String value) 讄h指定名字和取值的一个响应头标?
void addIntHeader(String name,int value) 使用指定整型值加入带有指定名字的响应头标Q或代换此名字的所有头标)(j)?
boolean containsHeader(String name) 如果响应已包含此名字的头标,则返回true?
String encodeRedirectURL(String url) 如果客户端不知道接受cookidQ则向URL加入?x)话ID。第一UŞ式只对在sendRedirect()中用的URLq行调用。其他被~码的URLs应被传递到encodeURL()
String encodeURL(String url)
void sendErr(int status) 讄响应状态码为指定|可选的状态信息)(j)。HttpServleetResponse定义?jin)一个完整的整数帔R集合表示有效状态倹{?
void sendError(int status,String msg)
void setStatus(int status) 讄响应状态码为指定指。只应用于不产生错误的响应,而错误响应用sendError()?
八、javax.servlet.ServletContext接口
一个servlet上下文是servlet引擎提供用来服务于Web应用的接口。Servlet上下文具有名字(它属于Web应用的名字)(j)唯一映射到文件系l的一个目录?br />一个servlet可以通过ServletConfig对象的getServletContext()Ҏ(gu)得到servlet上下文的引用Q如果servlet直接或间接调用子cGenericServletQ则可以使用getServletContext()Ҏ(gu)?br />Web应用中servlet可以使用servlet上下文得刎ͼ(x)
1.在调用期间保存和(g)索属性的功能Qƈ与其他servlet׃nq些属性?br />2.dWeb应用中文件内容和其他?rn)态资源的功能?br />3.互相发送请求的方式?br />4.记录错误和信息化消息的功能?/font>
ServletContext接口中的Ҏ(gu)
Object getAttribute(String name) q回servlet上下文中h指定名字的对象,或用已指定名捆l一个对象。从Web应用的标准观点看Q这L(fng)对象是全局对象Q因为它们可以被同一servlet在另一时刻讉K。或上下文中L其他servlet讉K?
void setAttribute(String name,Object obj) 讄servlet上下文中h指定名字的对象?
Enumeration getAttributeNames() q回保存在servlet上下文中所有属性名字的枚D?
ServletContext getContext(String uripath) q回映射到另一URL的servlet上下文。在同一服务器中URL必须是以?”开头的l对路径?
String getInitParameter(String name) q回指定上下文范围的初始化参数倹{此Ҏ(gu)与ServletConfigҎ(gu)名称不一P后者只应用于已~码的指定servlet。此Ҏ(gu)应用于上下文中所有的参数?
Enumeration getInitParameterNames() q回Q可能ؓ(f)I)(j)指定上下文范围的初始化参数值名字的枚D倹{?
int getMajorVersion() q回此上下文中支持servlet APIU别的最大和最版本号?
int getMinorVersion()
String getMimeType(String fileName) q回指定文g名的MIMEcd。典型情冉|Z文g扩展名,而不是文件本w的内容Q它可以不必存在Q。如果MIMEcd未知Q可以返回null?
RequestDispatcher getNameDispatcher(String name) q回h指定名字或\径的servlet或JSP的RequestDispatcher。如果不能创建RequestDispatchQ返回null。如果指定\径,必须?j)?”开_(d)q且是相对于servlet上下文的剙?
RequestDispatcher getNameDispatcher(String path)
String getRealPath(String path) l定一个URIQ返回文件系l中URI对应的绝对\径。如果不能进行映,q回null?
URL getResource(String path) q回相对于servlet上下文或dURL的输入流的指定绝对\径相对应的URLQ如果资源不存在则返回null?
InputStream getResourceAsStream(String path)
String getServerInfo() q顺servlet引擎的名U和版本受?
void log(String message)
void log(String message,Throwable t) 一个消息写入servlet注册Q如果给出Throwable参数Q则包含栈轨qV?
void removeAttribute(String name) 从servlet上下文中删除指定属性?/font>
?ji)、javax.servlet.http.HttpSession接口
HttpSessioncM于哈希表的接口,它提供了(jin)setAttribute()和getAttribute()Ҏ(gu)存储和检索对象。HttpSession提供?jin)一个会(x)话ID关键字,一个参与会(x)话行为的客户端在同一?x)话的请求中存储和返回它。servlet引擎查找适当的会(x)话对象,q之对当前h可用?/font>
HttpSession接口中的Ҏ(gu)
Object getAttribute(String name) 会(x)话中一个对象保存(sh)ؓ(f)指定名字Q返回或删除前面保存的此名称对象?
void setAttribute(String name,Object value)
void removeAttribute(String name)
Enumeration getAttributeName() q回捆绑到当前会(x)话的所有属性名的枚丑ր{?
long getCreationTime() q回表示?x)话创徏和最后访问日期和旉的一个长整型Q该整型形式为java.util.Date()构造器中用的形式?
long getLastAccessedTime()
String getId() q回?x)话IDQservlet引擎讄的一个唯一关键字?
ing getMaxInactiveInterval() 如果没有与客L(fng)发生交互Q设|和q回?x)话存活的最大秒数?
void setMasInactiveInterval(int seconds)
void invalidate() 使得?x)话被终止,释放其中L对象?
boolean isNew() 如果客户端仍未加入到?x)话Q返回true。当?x)话首次被创建,会(x)话ID被传入客L(fng)Q但客户端仍未进行包含此?x)话ID的第二次L(fng)Ӟq回true?
static (tng)
String
|
separator
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)The system-dependent default name-separator character, represented as a string for convenience. |
File
(
File
(tng)parent,
String
(tng)child)
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)Creates a new File instance from a parent abstract pathname and a child pathname string.
|
File
(
String
(tng)pathname)
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)Creates a new File instance by converting the given pathname string into an abstract pathname.
|
File
(
String
(tng)parent,
String
(tng)child)
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)Creates a new File instance from a parent pathname string and a child pathname string.
|
(tng)
String
[]
|
list
()
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)Returns an array of strings naming the files and directories in the directory denoted by this abstract pathname. |
(tng)
String
[]
|
list
(
FilenameFilter
(tng)filter)
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)Returns an array of strings naming the files and directories in the directory denoted by this abstract pathname that satisfy the specified filter. |
(tng)boolean
|
isDirectory
()
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)Tests whether the file denoted by this abstract pathname is a directory. |
static
|
sort
(
List
<T> (tng)list)
Sorts the specified list into ascending order, according to the natural ordering of its elements. |
|
static
|
sort
(
List
<T> (tng)list,
Comparator
<? super T> (tng)c)
Sorts the specified list according to the order(tng)induced by the specified comparator. |
int | compareTo(T (tng)o) Compares this object with the specified object for order. |
(tng)int | compare(T (tng)o1, T (tng)o2) Compares its two arguments for order. |
(tng)boolean | equals(Object (tng)obj) Indicates whether some other object is "equal to" this Comparator. |
只需实现compareҎ(gu)p,equalsҎ(gu)在obejectcd?x)?而实体类l承自objectc?必然会(x)有equalsҎ(gu),所以不需实现