




已阅读5页,还剩145页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
JavaWeb组件开发,Servlet2.4技术,Servlet概述,服务器端组件用Java语言开发Servlet优点可移植性强大功能多线程执行安全性高,Servlet生命周期,加载和实例化当容器启动,或客户端发出请求服务时,容器负责加载和实例化一个Servlet初始化Servlet加载并实例化后,容器必须初始化Servlet。初始化过程主要读取配置信息,如JDBC连接等,可以用ServletConfig对象读取容器配置信息,Servlet生命周期,处理请求Servlet初始化后,可以开始处理请求,每一个请求都由ServletRequest接收,ServletResponse响应该请求。服务结束调用destroy方法,容器移除servlet,请求(ServeltRequest),ServletRequest的子接口HttpServletRequest,实现HTTP协议请求请求接口中有大量方法,可以分为四类储存和取得属性取得请求参数取得请求HTTP头其它方法,如取得请求URL、IP、session等,请求(ServeltRequest),储存和取得属性getAttributesetAttribute,请求(ServeltRequest),取得请求参数StringgetParameter(String)StringgetParameterValues(String)EnumerationgetParameterNames()MapgetParameterMap,请求(ServeltRequest),取得请求头StringgetHeader(String)intgetIntHeader(String):取得int类型头longgetDateHeader(String):取得date类型头CookiegetCookies(),请求(ServeltRequest),其它方法StringgetContextPath():取得Context路径StringgetMethod():取得HTTP方法StringgetRequestedSessionId:取得客户端会话IdStringgetRemoteAddr():取得用户IPStringgetRemoteUser():取得用户名称VoidsetCharacterEncoding(String)设定编码方式,响应(ServletResponse),HttpServletResponse是ServletResponse子接口响应接口中方法主要分3类设定表头设定响应状态码用来URL重写,响应(ServletResponse),设定表头的方法VoidaddCookie(Cookiecookie)VoidaddHeader(String,String):新增头VoidsetHeader(String,String):为头指定新值VoidsetIntHeader(String,int)如:response.setIntHeader(“Refresh”,180)180秒自动刷新,响应(ServletResponse),设定响应状态码VoidsendError(int)VoidsendError(int,String)VoidsetStatus(int),响应(ServletResponse),URL重写StringencodRedirectURL(String):对sendRedirect方法的URL编码StringencodeURL(String)请求转发sendRedirect(String),Cookie类,创建CookieCookie(String,String)Cookie方法getNamegetValuesetMaxAge存取Cookie通过请求取:getCookies通过响应存:addCookie,会话(HttpSession),会话对象表示目前个别用户的会话状况,可以轻易识别每一个用户会话对象通过请求获得会话接口中方法分两大类存取属性其它方法,会话(HttpSession),存取属性方法getAttributesetAttribute,会话(HttpSession),其它方法StringgetId():取得sessionidLonggetCreationTime()LonggetMaxInactiveInterval():最大不活动时间voidsetMaxInactiveInterval(int)BooleanisNew()Voidinvalidate(),上下文(ServletContext),ServletContext主要功能用于取得或更改Servlet的设定方法可以分四大类存取属性及参数获得与容器相关信息获得服务器端路径和文件信息记录,上下文(ServletContext),获得与容器相关的信息IntgetMajorVersion():取得Servlet主要版本,如2IntgetMinorVersion():取得Servlet次要版本,如4StringgetServerInfo():取得容器信息,上下文(ServletContext),存取属性及参数getAttributesetAttributegetInitParameter,上下文(ServletContext),服务器端路径与方法ServletContextgetContext(String)InputStreamgetResourceAsStream(String)StringgetRealPath(String),上下文(ServletContext),信息记录Voidlog(String)Voidlog(String,Throwable),配置(ServletConfig),ServletConfig对象存放一些Servlet初始数据结构一共有四个方法StringgetInitParameter(String)EnumerationgetInitParameterNames()ServletContextgetServletContext()StringgetServletName(),请求转发(RequestDispatcher),可以通过ServletRequest,ServletContext接口中方法获取两个方法forward(req,resp)Include(req,resp),监听器,使用Listener接口,监听在容器中某一个执行程序,根据应用程序的需求作出适当响应截至到Servlet2.4,共有8个Listener接口,6个Event类,监听器,Listener接口与Event类对应表,监听器,ServletContextListener容器启动时,调用contextInitialized容器关闭时,调用contextDestroyedServletContextAttributeListener对象加入到ServletContext中,调用attributeAdded取代ServletContext中对象,调用attributeReplaced删除ServletContext对象,调用attributeRemoved,监听器,HttpSessionListener创建session,调用sessionCreated销毁session,调用sessionDestroyedHttpSessionAttributeListener对象加入到HttpSession中,调用attributeAdded取代HttpSession中对象,调用attributeReplaced删除HttpSession对象,调用attributeRemoved,监听器,HttpSessionBindingListener实现该接口的类的对象,加入session,调用valueBound实现该接口的类的对象,从session删除,调用valueUnbound该监听器不需要在web.xml中注册HttpSessionActivationListener实现该接口的session属性对象,被储存起来,等待转移至另一个JVM中,调用sessionWillPassivate当session被转移至其它JVM中,它又成为有效状态,此时调用sessionDidActivate方法,监听器,ServletRequestListener请求产生,调用requestInitialized请求消失,调用requestDestroyedServletRequestAttributeListener对象加入到ServletRequest中,调用attributeAdded取代ServletRequest中对象,调用attributeReplaced删除ServletRequest对象,调用attributeRemoved,监听器,实现监听器简单步骤实现相应监听器接口实现监听器方法在web.xml中配置,过滤器,当用户的请求到达指定网页前,可以借助filter改变请求内容,在执行结果响应到用户前,可以通过filter修改输出内容下面的情况可以使用filter统一认证处理对用户的请求作检查、作更精确的记录监视或对用户的参数作前置处理改变图像文件格式对响应编码对响应作压缩处理,过滤器,Filter运作方式如同一层接一层,一直从最外面的Filter做到最里面的原始页面但是并不都是这个顺序,首先Filter中需要有doFilter方法,才能继续传到下一个filter某些情况下,Filter并不调用doFilter,而是通过其它方式转到其它页面,如forward,include,sendRedirect,sendError等。或者是抛出异常处理,过滤器,Web.xml中可以使用设定Filter对应的请求方式REQUEST:用户直接对页面请求FORWARD:通过forwardINCLUDE:通过includeERROR:错误机制,如:.或,过滤器,实现过滤器步骤实现Filter接口实现Filter接口中3个方法,重点doFilter方法在web.xml中配置以及,Web架构MVC,网站应用程序的架构分为3部分显示层:包括HTML,XML,和Applets等商业逻辑层:包括数据处理、连接数据库和产生数据控制层:主要为了控制整个应用的流程,Web架构Model1/Model2,使用Java开发网站应用,通常分Model1和Model2两种模式Model1:分纯JSP和JSPJavaBean两种Model2:M(JavaBean,EJB等)V(JSP、HTML等)C(Servlet),Servlet2.4新特性,Web.xmlDTD改用XMLSchema新增Filter四种设定新增RequestListener、Event和RequestAttribute、Event,Web.xmlDTD改用XMLSchema,Servlet2.3版web.xml声明如下,Web.xmlDTD改用XMLSchema,Servlet2.4版web.xml声明如下.,Web.xmlDTD改用XMLSchema,DTD改为Schema主要增强两项功能元素可不按照顺序设定更强大的验证机制检查元素的值是否合法,如中的可检查Servlet、Filter或EJB-ref等等元素名称是否唯一可检查元素值是否为合法文字字符或数字字符,新增Filter四种设定,Servlet2.3新增了Filter功能,不过它只能由客户端发出请求调用,使用RequestDispatcher的forward和include方法调用Filter时,不会执行Servlet2.4中,新增了设定解决这个问题,新增Filter四种设定,Servlet2.4新增四种设定:REQUEST、FORWARD、INCLUDE、ERROR,默认为REQUEST如:GZIPEncoder/*REQUESTINCLUDE,新增RequestListener、Event和RequestAttributeListener、Event,Servlet2.4新增两种监听器和事件类ServletRequestListenerServletRequestEventServletRequestAttributeListenerServletRequestAttributeEvent,Servlet2.4的其它变更,取消SingleThreadModel接口。可以为Servlet,如:index.jspIndex,Servlet2.4的其它变更,ServletRequest接口新增一些方法PublicStringgetLocalName()PublicStringgetLocalAddr()PublicintgetLocalPort()PublicintgetRemotePort(),JSP2.0技术,JSP技术简介,JSP是由Sun公司倡导、许多别的公司参与一起建立的一种动态网页技术标准类似其它技术标准,如ASP、PHP等JSP是Server端语言,JSP优点,一次编写,各处执行可依赖其它可重复使用的组件,实现复杂逻辑采用标签化页面开发N层企业应用框架的支持,JSP执行过程,客户端发出请求容器将JSP转译成Servlet源代码将产生的Servlet源代码经过编译,加载到内存执行把结果响应到客户端,JSP语法Elements和TemplateData,TemplateData:容器不处理的部分,如HTML内容,直接送到客户端Elements:必须经由容器处理,大部分都以XML作为语法基础,大小写需要一致,JSP语法批注(Comments),客户端可见的-开发程序员专用Java批注,JSP语法指令(Directives),指令主要用来提供整个JSP网页相关的信息,并且用来设定JSP网页的相关属性,如:网页的编码方式、语法、信息等语法,JSP语法指令(Directives),JSP1.2中三个指令:page、include、taglibJSP2.0中新增加了TagFile功能,TagFile以.tag为扩展名,不是JSP页面,不能使用page指令,但是可以使用include,taglib.同时扩展了本身的指令,如tag,attribute,variable等,JSP语法指令(Directives),Page指令:最复杂的指令,为设定整个JSP网页的属性和相关功能Page指令11个属性Language:目前只能用javaExtends:定义JSP网页产生的Servlet是继承哪个父类Import:引入Java类Session:定义JSP是否使用session对象,JSP语法指令(Directives),Page指令11个属性Buffer:输出流是否有缓冲区,默认为8KBautoFlush:决定是否自动清除缓冲区isThreadSafe:servlet2.4中已经弃Info:表示JSP网页的相关信息errorPage:错误页面isErrorPage:是否是错误页面contentType:MIME类型和JSP网页编码方式pageEncoding:JSP网页编码方式isELIgnored:容器是否忽略EL,JSP语法指令(Directives),Include指令:在JSP编译时插入一个包含一段文本或代码,这个包含过程是静态的,而包含的文件可以是JSP,HTML,文本,或者是Java程序File不能是变量,也不能用?传参数,JSP语法指令(Directives),Taglib指令:JSP1.1新增进的功能,JSP语法脚本(Scripting),脚本包含三部分声明Scriptlets表达式,JSP语法动作(Action),JSP2.0中Action共有20个Action,分5类存取JavaBean3个JSP1.2原有的6个用在JSP文档中,6个动态生成XML,3个用在TagFile中,2个,JSP语法动作(Action),存取JavaBean的Action,JSP语法动作(Action),JSP1.2中有的6个Action:动态引入文件:将请求转发:与include,forward,plugin搭配:用于浏览器中播放或显示对象,通常为Applet或Bean:params中间嵌套param,给plugin传参:不能播放对象时,返回的错误信息,fallback,params都嵌套在plugin中使用,JSP语法动作(Action),动态生成XML如:MikeHello结果:Hello,JSP错误,翻译期错误请求处理期错误使用,JSP隐含对象,RequestHttpServletRequestResponseHttpServletResponsepageContextPageContextSessionHttpSessionApplicationServletContextOutJspWriterConfigServletConfigPageObjectExceptionThrowable,JSP与JavaBean,JavaBean是可复用、且跨平台的软件组件Java分两种:有UI的JavaBean和没有UI的JavaBean通常JSP搭配没有UI的JavaBean,处理一些事务,如数据运算,连接数据库,数据处理等,JSP与JavaBean,通常一个标准的JavaBean有如下特性是public类有一个public的无参构造方法取得或设定属性时,必须使用getXXX或setXXX方法,JSP与JavaBean,JavaBean的删除示例:如果存在page范围内的JavaBean,则用pageContext.removeAttribute(“”);或,JSP标签库,制作完整的标签库,需要三个组件标签处理类标签库描述文件(tld文件)JSP网页,JSP标签库标签处理类,标签处理类都需要选择继承下面两个类之一TagSupportBodyTagSupport,JSP标签库标签处理类,如果需要对标签体进行处理,就使用BodyTagSupport如果不对标签体处理,则使用TagSupport,JSP标签库标签处理类,TagSupport方法主要方法doStartTag返回Tag.SKIP_BODY,本体忽略返回Tag.EVAL_BODY_INCLUDE,本体正常doAfterBody返回Tag.SKIP_BODY,本体忽略,调用doEndTag返回IterationTag.EVAL_BODY_AGAIN,重复本体doEndTag返回Tag.SKIP_PAGE,JSP网页停止返回Tag.EVAL_PAGE,JPS网页停止Release释放处理器资源,恢复为初始状态,JSP标签库标签处理类,TagSupport标签的生命周期,EVAL_BODY_INCLUDE,EVAL_PAGE,SKIP_PAGE,release,SKIP_BODY,JSP标签库标签处理类,BodyTagSupport为TagSupport子类,除了拥有TagSupport中所有方法外,还有几个主要方法setBodyContentdoInitBodygetBodyContent另外需要注意BodyContent类,JSP标签库标签处理类,BodyTagSupport标签的生命周期(包括迭代),EVAL_PAGE,SKIP_PAGE,EVAL_BODY_INCLUDE,release,setPageContextsetParent,doStartTag,执行bodycontent,doEndTag,release,Goon,Goon,SKIP_BODY,setBodyContentdoInitBody,EVAL_BODY_BUFFERED,执行bodycontent,doAfterBody,doAfterBody,EVAL_BODY_AGAIN,EVAL_BODY_AGAIN,SKIP_BODY,SKIP_BODY,JSP2.0新功能,表达式语言(ExpressionLanguage)新增SimpleTag和TagFileWeb.xml新增元素,表达式语言(ExpressionLanguage),JSP2.0之后,正式将EL纳入JSP的标准语法EL主要的功能在于简化JSP的语法,表达式语言(ExpressionLanguage),使用EL语法count:$param.count+5使用JSP传统语法:,新增SimpleTag和TagFile,SimpleTag和TagFile这两种新的机制,为了提供方便的方法,让开发人员撰写自定义标签,新增SimpleTag和TagFile,SimpleTagHandler和其它TagHandler不同在于:SimpleTagHandler并无doStartTag()和doEndTag(),只有doTag()实现标签比以往更方便,Web.xml新增元素,主要用来设定JSP相关配置包括和子元素如和用来设置JSP网页的抬头和结尾,扩展名为.jspf,新增SimpleTag和TagFile,TagFile更为简单,可以直接用JSP的语法制作标签Hello.tag使用:,EL与JSTL,EL简介,EL原本是JSTL1.0为方便存取数据所自定义的语言。当时只能在JSTL中使用JSP2.0后,EL已经正式纳入成为标准规范之一只要支持Servlet2.4/JSP2.0的容器,就都可以在JSP页面中直接使用EL了,EL语法,EL最大特点就是简单$sessionScope.user.sex传统JSP实现:Useruser=(User)session.getAttribute(“user”);Stringsex=user.getSex();所有EL都是以$开始,以结束,EL语法.与运算符,EL提供.和两种运算符来存取数据,下列两者代表意思是一样的$sessionScope.user.sex$sessionScope.user“sex”.和也可以混用$sessionScope.shoppingCart0.price,EL语法.与运算符,下面两种情况必须用,不能用.当要存取的属性名称中包含一些特殊字符,如.或-等非字母或数字的符号,就一定用如:$user“my-name”当存取的属性名称为变量时如:$sessionScope.userdata(其中data为变量),EL语法.与运算符,假定$expr-aexpr-bExpr-a为null,返回nullExpr-b为null,返回nullExpr-a为map,返回value-a.get(value-b)Expr-a为List或Array,value-b强制转化为int,返回value-a.get(value-b)Expr-a为JavaBean对象,value-b值强制转换为String,调用getter,EL语法EL变量,EL存取变量很简单,如:$username意思是取出某一范围中名称为username的变量因为没有指定范围,默认值就先从page,再依次到request,session,application找可以指定范围,如:$sessionScope.username,EL语法EL保留字,EL隐含对象,JSP中有9个隐含对象,EL中有11个与范围有关的隐含对象applicationScopesessionScoperequestScopepageScope与输入有关的隐含对象paramParamValues其它隐含对象cookieheaderheaderValuesinitParampageContext,EL隐含对象与范围有关的隐含对象,与范围有关的四个隐含对象:pageScope,requestScope,sessionScope,applicationScope它们基本与JSP中的pageContext,request,session,application一样需要注意的是:这四个对象只能用来取得范围内属性,不能调用其它方法!,EL隐含对象与输入有关的隐含对象,与输入有关的隐含对象有两个:param、paramValuesparam和request.getParameter(Stringname)相同paramValues和request.getParameterValues(Stringname)相同如:$param.username$paramValues.habit0,EL隐含对象其他隐含对象,Cookie:可以用来取得cookie的值,如:$cookie.userCountryHeader:如同ServletRequest.getHeader(Stringname)HeaderValues:如同ServletRequest.getHeaders(Stringname)pageContext:JSP中PageContextinitParam:如同ServletContext.getInitParameter(Stringname),EL运算符,EL算术运算符EL关系运算符EL逻辑运算符EL其它运算符,EL运算符算术运算符,+加-减*乘/或div除%或mod取余,EL运算符关系运算符,=或eq等于!=或ne不等于或gt大于=或ge大于或等于,EL运算符逻辑运算符,publicstaticintnumVowels(Stringtext)Stringvowels=aeiouAEIOU;intresult=0;for(inti=0;iJSTL和EL搭配,JSTL简介安装使用JSTL1.1,JSTL1.1必须在支持Servlet2.4且JSP2.0以上版本的Container才可使用到下载JSTL1.1将lib下的jstl.jar和standard.jar拷贝到lib下将tld下的tld文件拷贝到WEB-INF相应目录在web.xml的中配置,JSTL核心标签库,核心标签库主要分四大类表达式操作:out,set,remove,catch流程控制:if,choose,when,otherwise迭代操作:forEach,forTokensURL操作:import,url,redirect,JSTL核心标签库表达式操作,:用来显示数据,同一样语法1语法2defaultvalueValue是需要显示的值,可以使用EL。default是value为null时显示的值,escapeXML是表示是否转换特殊字符,JSTL核心标签库表达式操作,:将变量储存到JSP范围中或是JavaBean属性中语法1:将value值储存至范围为scope的varName变量之中语法2:将本体内容的数据储存到范围为scope的varName变量之中本体内容,JSTL核心标签库表达式操作,语法3:将value值储存target对象的属性中语法4:将本体内容的数据储存到target对象的属性中本体内容,JSTL核心标签库表达式操作,Var和scope这两个属性不能使用表达式来表示示例:,JSTL核心标签库表达式操作,主要用来移除变量示例:,JSTL核心标签库表达式操作,主要用来处理产生错误的异常状况,并且把错误信息储存起来语法:欲抓取的部分如果发生错误,错误信息存到var中,JSTL核心标签库流程控制,同我们一般程序中的if一样语法1:语法2:本体内容,JSTL核心标签库流程控制,Test:如果表达式结果为true,则执行本体内容Var:用来存test运算后的结果,即true或falseScope:var变量的JSP范围,JSTL核心标签库流程控制,作为和的父标签语法:本体内容(和)本体内容只能是空白1或多个0或多个,JSTL核心标签库流程控制,语法本体内容必须在之间如果在同一个之间,必须在之前,JSTL核心标签库流程控制,语法本体内容在同一个中,当所有都没有成立时,则执行内容在同一个中,必须为最后一个标签,JSTL核心标签库迭代标签,为循环控制,它可以将集合中的成员循序浏览一遍,方式为,当条件符合时,就会持续重复执行本体内容语法1:迭代集合所有成员本体内容,JSTL核心标签库迭代标签,语法2:迭代指定次数本体内容,JSTL核心标签库迭代标签,Items:被迭代的集合对象Var:用来存放现在指到的对象varStatus:用来存放现在指到的相关成员信息(此属性拥有另外四个属性index,count,first,last)Begin:开始的位置End:结束的位置Step:每次迭代的间隔,JSTL核心标签库迭代标签,语法1的示例$item,JSTL核心标签库迭代标签,语法2示例$item当没有items属性时,相当于普通循环,JSTL核心标签库迭代标签,用来浏览一个字符串中所有的成员,其成员是由定义符号所分隔的语法本体内容Items:用来迭代的字符串;delims:分割字符串的字符,JSTL核心标签库迭代标签,示例$item结果ABCDE,JSTL核心标签库URL操作,JSTL包含三个URL操作相关的标签包含其它文件网页导向生成url,JSTL核心标签库URL操作,可以将其它静态或动态文件包含至本身JSP网页与JSPAction最大区别在于:只能包含同一个上下文下的文件,而可以包含不同上下文的文件或者其它网站的文件,JSTL核心标签库URL操作,语法1本体内容,JSTL核心标签库URL操作,语法2本体内容,JSTL核心标签库URL操作,url:被包含文件的地址Context:相同容器下,其它上下文,必须“/”开头charEncoding:被包含文件的编码格式Var:储存被包含文件的内容,以String类型存入Scope:var变量JSP范围varReading:储存被包含文件内容,以Reader类型存入,JSTL核心标签库URL操作,示例注意:被包含的上下文必须在server.xml定义过,如:,JSTL核心标签库URL操作,示例当var属性存在时,同样把其它文件内容包含进来,但是不会输出到网页上,而是以String的类型储存到varName中,储存的数据,可以在需要时候取出来,JSTL核心标签库URL操作,将客户端请求从一个JSP网页导向到其它文件语法1:语法2:,JSTLI18N格式标签库,I18N标签库可以对一个特定的语言请求作出适合的响
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030年中国氰凝行业市场深度发展趋势与前景展望战略研究报告
- 2025-2030年中国氧氟沙星注射液行业市场深度调研及发展趋势与投资前景预测研究报告
- 2025-2030年中国民航客运行业市场深度分析及前景趋势与投融资研究报告
- 2025-2030年中国残障马桶座圈行业市场现状供需分析及投资评估规划分析研究报告
- 2025-2030年中国棉籽油行业市场现状供需分析及投资评估规划分析研究报告
- 2025-2030年中国根管抗菌剂行业市场现状供需分析及投资评估规划分析研究报告
- 2025-2030年中国有机糖行业市场现状供需分析及投资评估规划分析研究报告
- 行政管理动力分析试题及答案
- 2025-2030年中国智能车辆架构行业市场现状供需分析及投资评估规划分析研究报告
- 从容应对主管护师考试试题及答案
- 铁路建设项目安全管理
- 项目管理课件
- 装配式建筑施工技术PPT(高职)完整全套教学课件
- 涉诈风险账户审查表
- 关风器设计说明书
- 2023年副主任医师(副高)-儿童保健(副高)考试历年真题精华集选附答案
- 《庄子过惠子之墓》中考文言文阅读试题2篇(含答案与翻译)
- HT9988详细使用说明书
- 桥式起重机司机(初级)职业技能鉴定考试题库(职校培训)
- 【超星尔雅学习通】世界建筑史网课章节答案
- 认识水拓画完整版
评论
0/150
提交评论