已阅读5页,还剩26页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
“表示重要性,星号越多越重要DAY1一、WEB应用基础1BS架构架构的发展C/SVSB/SC/S架构CLIENT客户端SERVER服务端胖客户端要求客户端运行业务;把业务放到服务器端,则是瘦客户端典型的C/S应用FTP工具、QQ、邮件系统、杀毒软件1建立在TCP/IP协议之上,有自己的通信规则建立业务2需要相互配合才能完成一个完整业务逻辑3允许多个客户端程序同时接入一个SERVER程序并发4每一个CLIENT机器都必须安装客户软件5修改了SERVER程序,通常CLIENT程序都要修改升级优点利用客户端的计算能力,分担服务器的负荷大型网络游戏就利用这点缺点用户必须安装客户端程序;客户端需要升级麻烦B/S架构BROWSERWEBSERVERCLUSTER集群极瘦客户端最低限度地减少客户端程序,只需要BROWSER浏览器1基于HTTP协议应用层2几乎所有的业务逻辑处理都在SERVER完成3支持并发4CLIENT要求很少,只需要安装BROWSER浏览器5修改SERVER之后,CLIENT不需要任何变化6SERVER端开发技术HTML/JS,XHTML,PHP,ASP,JSP,SERVLET缺点所有业务都在服务器端完成,服务器负荷大。优点支持高并发访问;不需另外安装软件只需浏览器,免去更新的麻烦。2开发一个静态的WEB应用1下载一个TOMCAT服务器2WEB服务器TOMCAT的启动和配置熟练使用和配置先进入TOMCAT主目录下的BIN目录/CATALINA_HOME/BINWINDOW平台启动STARTUPBAT关闭SHUTDOWNBATLINUX平台启动STARTUPSH或CATALINASHRUN/CATALINA单次启动;STARTUP启动直至SHUTDOWN关闭SHUTDOWNSH或CTRLC测试打开浏览器,访问TOMCAT首页HTTP/LOCALHOST8080或者HTTP/1270018080/获取进程ID强行杀死TOMCAT进程PSEF|GREPTOMCAT查看TOMCAT的进程IDKILL9TOMCAT进程ID号强行杀死TOMCAT进程3介绍WEB应用的结构严格定义为两部分WEB应用的根目录下有一个特定的子目录称为WEBINF,其中包含不能被客户访问的专用WEB应用程序软件,包括SERVLET类文件、部署描述符WEBXML、外部库以及其他任何由此应用程序使用的专用文件。所有位于WEBINF之外的文件都被看作是公共的,它们可以从客户端被访问。资源包括HTML页面、JSP页面和图像等。WEBXML的模板一个WEBXML中可以配置多个SERVLETSERVLET的名字1/SERVLET的逻辑名SERVLET类全名1/类的完全限定名SERVLET的名字2SERVLET类全名2SERVLET的名字1/要和SERVLET标签中的相同指定SERVLET相对于应用目录的路径/SERVLET的访问路径SERVLET的名字2指定SERVLET相对于应用目录的路径INDEXJSP/指定默认的欢迎页面4注意事项3介绍WEB服务器的一些特点什么是静态内容什么是动态内容静态返回页面每个客户端都相同。动态各个客户端的页面各不相同。产生动态内容的WEB辅助应用CGIPOST方法其他方法HEAD,TRACE,PUT,DELETE,CONNECT等GET方法HTTP最简单的方法,其最主要的任务从服务器上获取资源POST方法更强大的请求方法,不仅可以请求资源,还可以向服务器发送表单数据4分析HTTP请求的信息客户端向服务器发送一个请求,请求头包含1请求的方法;2URI;3协议版本;4以及包含请求修饰符;5客户信息和内容的类似于MIME的消息结构5分析HTTP响应的信息截获内容HTTP/11200OK/HTTP/11是WEB服务器使用的版本;200是状态码;OK是状态码的文本版本ETAGW/“4721198101802343“LASTMODIFIEDWED,19DEC2007220322GMTCONTENTTYPETEXT/HTML/MIME类型告诉浏览器所要接收的是哪一类型的数据。以供浏览器显示。CONTENTLENGTH472DATEWED,19DEC2007220544GMTSERVERAPACHECOYOTE/11/以上是HTTP响应的首部/响应体中包含了HTML以及其他要显示的内容USERLOGINHTTP响应状态码分析具体代码含义参看HTTP代码对照表1XX信息响应类,表示接收到请求并且继续处理2XX处理成功响应类,表示动作被成功接收、理解和接受3XX重定向响应类,为了完成指定的动作,必须接受进一步处理4XX客户端错误,客户请求包含语法错误或者是不能正确执行如404无法找到,表示无法找到指定位置的资源。5XX服务端错误,服务器不能正确执行一个正确的请求二、SERVLET基础1介绍SERVLET的基本概念SERVLET、SERVLET容器、SERVLETVSCGI图示1它是由JAVA编写的、服务端的小程序。相对而言,APPLET和JAVASCRIPT是客户端小程序。2基于HTTP协议的,运行在WEB服务器内的。SERVLET和CGI都是运行在WEB服务器上,用来生成WEB页面。3没有MAIN方法。是接受来自网络的请求FORM表单,以及其他的请求,并对不同请求作出不同的响应。4由容器管理和调用。这个WEB容器可以控制SERVLET对象的生命周期,控制请求由SERVLET对象处理。5WEB服务器的辅助应用,处理特定的用户请求,并返回响应。WEB服务器,这里的服务器不是硬件概念,而是软件,常用的WEB服务器有TOMCAT,JBOSS等TOMCAT是一个用JAVA语言编写的WEB服务器,所以需要有相应的JAVA运行环境,也就是JVM,还要配置TOMCAT的具体路径。6继承JAVA的优点,与协议、平台无关2开发第一个SERVLET应用WEB应用的结构开发一个SERVLET应用的步骤1建立WEB应用目录注意细节各目录的位置、名称与包含的内容2编写JAVA代码,如HELLOWORLDJAVA把生成的CLASS文件放置到WEBROOT/WEBINF/CLASSES目录下3编写配置文件WEBXML放置到WEBROOT/WEBINF/目录下4把整个WEB应用放到CATALINA_HOME/WEBAPPS/放到TOMCAT的WEBAPPS目录下3分析SERVLET应用1SERVLET的继承体系JAVAXSERVLETSERVLET接口GENERICSERVLET抽象类HTTPSERVLET自定义类所有的SERVLET都必须实现该接口处理各种协议包括HTTP专职处理HTTP协议也可继承GENERICSERVLET2SERVLET接口;GENERICSERVLET抽象类;HTTPSERVLET类SERVLET接口位置JAVAXSERVLETSERVLET定义了特定的生命周期方法INITSERVLETCONFIGCONFIGSERVICEHTTPSERVLETREQUESTREQUEST,HTTPSERVLETRESPONSERESPONSEDESTROYGENERICSERVLETIMPLEMENTSSERVLET实现了INITSERVLETCONFIGCONFIG、DESTROY等方法;并提供了INIT方法。还实现了SERVLETCONFIG接口。由于这是抽象类,所以必须实现抽象方法SERVICEHTTPSERVLETEXTENDSGENERICSERVLET位置JAVAXSERVLETHTTPHTTPSERVLET具有父类GENERICSERVLET类似的方法和对象,是使用SERVLET编程常用的类支持HTTP的POST和GET等方法。3容器如何找到指定的SERVLET图示SERVLET有3个“名字“URL名、应用中的逻辑名、实际的名字配置文件WEBXML都把这几个名字一一对应起来了SERVLET是受容器管理的REQUEST对象、RESPONSE对象都是容器根据客户端请求而产生的。容器根据URL请求,通过DDWEBXML配置URL名,内部逻辑名,完全限定名定位具体的SERVLET。容器根据客户请求创建/分配一个线程,并调用SERVLET的SERVICE方法,把REQUEST对象、RESPONE对象作为参数传过去SERVICE方法会根据客户端请求的HTTP方法调用不同的HTTPSERVLET的方法DOGET,DOPOST,SERVLET使用RESPONSE对象把处理完的结果响应到客户端。SERVICE方法结束后,线程要么撤销,要么返回容器的线程池;REQUEST对象、RESPONSE对象都被GC回收。4使用SERVLET来发送用户输入的信息1开发用户登录的应用2如何使用FORM表单来提交数据1ACTION表单提交给服务器的哪个资源处理“LOGIN“为在WEBXML中配置的URLPATTERN或者是JSP、HTML文件等。2GETVSPOST方法的比较使用HTTPMONITORGET通过URL提交表单信息,由于受到URL长度的限制,只能传递大约10241K字节。通过HTTPMONITOR工具截获请求信息下面仅写出请求行,请求首部略GET/WELCOME/LOGINHTMLUSERNAMEZHANGSANQ05HOST127001/从请求行以下到这行,都是请求首部USERNAMEZHANGSANCHARSETUTF8“2获取数据过程中,处理中文输入乱码3种方法方法一设置字符编码来解决POST方法提交表单中文乱码问题。REQUESTSETCHARACTERENCODING“GBK“RESPONSESETCONTENTTYPE“TEXT/HTMLCHARSETUTF8“必须在第一个REQUESTGETPARAMETER“NAME“之前执行上面的语句。方法二重新生成指定编码的字符串STRINGNAMENEWSTRINGREQUESTGETPARAMETE“NAME“GETBYTES“ISO88591“方法三修改服务器的编码设置解决GET方法提交表单中文乱码问题例如TOMCAT,通过修改TOMCAT/CONF/SERVERXML加入URIENCODING“UTF8“3静态HTML页面的中文化问题6请求路径请求路径是把请求导向到一个SERVLET来响应服务。它是由几个重要的部分来组成的。通过HTTPREQUEST对象,暴露了如下信息对照应用的目录结构1上下文路径CONTEXTPATH该路径的前缀是和SERVLETCONTEXT相关的。如果CONTEXT就是WEB服务器的URL命名空间的缺省的根上下文时,那么上下文路径将会是一个空的字符串。如果上下文并不是服务器的命名空间的根,则上下文路径就以“/”开始,但不能以“/”结束。2SERVLET路径SERVLETPATH该路径就是直接与激活该请求的相应映射,它也是以“/”开头。但要注意的是,如果指定的请求是与“/”模式相匹配,则此时SERVLET路径就是一个空字符串。3路径信息PATHINFO请求路径中除了上下文路径和SERVLET路径以外的部分。当没有额外的路径时路径信息就是空的NULL,或者它会以“/”开始的字符串。在HTTPSERVLETREQUEST接口中定义如下的方法来访问请求路径的相应信息GETCONTEXTPATHGETSERVLETPATHGETPATHINFO值得注意的是,请求URI和路径的各部分之间的URL编码的不同之外,下面的等式恒成立REQUESTURICONTEXTPATHSERVLETPATHPATHINFODAY21配置开发环境如何利用IDE开发构建一个WEBPROJECT部署WEBPROJECT到TOMCAT结果是把WEBROOT下的内容打成包,发布到WEBAPPS中2在集成环境开发过程中的注意事项如果修改了JAVA文件修改了方法签名除外,无需重启,也无需重部署如果修改了HTML文件,无需重启,但需要重部署修改了WEBXML,系统会自动重部署3SERVLET的生命周期生命周期有哪几个过程4个每个过程都对应有特殊的生命周期方法装载/其实是调用GENERICSERVLET的INITCONFIG/这里的CONFIG只是方法内部的变量。如果其它方法中需调用,还得THISCONFIGCONFIG给成员变量的CONFIG赋值B其他地方包括在INIT方法中,可以使用SERVLETAPI本身的方法THISGETSERVLETCONFIG/任何方法中都可以调用,包括INITSERVLETCONFIGCONFIG方法注这也是为什么把这个知识点放在这里的原因4如何获取SERVLETCONTEXTACONFIGGETSERVLETCONTEXT/前提是CONFIG在之前已获取BSERVLETAPI提供了THISGETSERVLETCONTEXT/没有CONFIG也可以用5注意不能在SERVLET中使用THISGETSERVLETCONFIG或者THISGETSERVLETCONTEXT来初始化成员变量因为创建成员变量优先于构造方法和INIT方法;而CONFIG和CONTEXT只有调用了INIT方法之后才初始化6利用SERVLETCONTEXTLOG来写日志如THISLOG“STRING“NEWDATE7例子使用SERVLETCONTEXT来获取参数使用SERLVETCONFIG来获取SERVLET的5产生动态内容的另一个方面根据业务逻辑进行请求传递页面跳转REQUESTDISPATCHER请求分发器FORWARDREQUEST,RESPONSE/跳转到其他资源INCLUDEREQUEST,RESPONSE/包含其他资源如何获取REQUESTDISPATCHERREQUESTGETREQUESTDISPATCHERPAGESERVLETCONTEXTGETREQUESTDISPATCHERPAGE两者之间的区别后面会详细讲述6网上书店打折优惠SERLVETCONFIG来获取SERVLET的SERVLETCONTEXT来获取参数REQUESTDISPATCHER进行页面包含DAY3访问资源,SERVLET如何与数据库构建应用系统1两种访问DB的方法1直接连接DB,通过JDBCAPI2配置TOMCAT的连接池SERVERXML配置WEBXML应用引用资源INIT通过JNDIAPI来获取DBCONNECTION2种方法都需要在SERVLET的INIT方法中,把DBCONNECTION注入到SERVLET中2、用TOMCAT的JNDI服务获取数据源第一步为TOMCAT配置连接池修改TOMCAT/CONF/SERVERXML在节点中加入RESOURCE配置/WEB应用的根第二步在应用中配置资源引用此步骤可以省略修改WEBXMLJDBC/TARENA/资源引用名JAVAXSQLDATASOURCE/资源的类型CONTAINER/APPLICATIONSHAREABLE/UNSHAREABLE第三步在SERVLET的INIT方法中通过JNDI接口来获取DATASOURCECONTEXTCTXNEWINITIALCONTEXTDATASOURCEDSDATASOURCECTXLOOKUP“JAVACOMP/ENV/JDBC/TARENA“CONNECTIONCONDSGETCONNECTION3如何构建一个WEB应用系统SERVLETJDBCDB分层设计的思想表示层VIEWDAO层SERVLET层的设计废弃“为每个请求提供一个SERVLET”的做法,引入ACTION接口与参数控制DAO模式工厂模式DAOFACTORYDAY4会话管理COOKIE机制SESSION机制HTTP协议与状态保持HTTP是一个无状态协议1实现状态保持的方案1修改HTTP协议,使得它支持状态保持难做到2COOKIES通过客户端来保持状态信息COOKIE是服务器发给客户端的特殊信息COOKIE是以文本的方式保存在客户端,每次请求时都带上它3SESSION通过服务器端来保持状态信息SESSION是服务器和客户端之间的一系列的交互动作服务器为每个客户端开辟内存空间,从而保持状态信息由于需要客户端也要持有一个标识ID,因此,也要求服务器端和客户端传输该标识,标识ID可以借助COOKIE机制或者其他的途径来保存2COOKIE机制1COOKIE的基本特点COOKIE保存在客户端只能保存字符串对象,不能保存对象类型需要客户端浏览器的支持客户端可以不支持,浏览器用户可能会禁用COOKIE2采用COOKIE需要解决的问题COOKIE的创建通常是在服务器端创建的当然也可以通过JAVASCRIPT来创建服务器通过在HTTP的响应头加上特殊的指示,那么浏览器在读取这个指示后就会生成相应的COOKIE了COOKIE存放的内容业务信息“KEY“,“VALUE“过期时间域和路径浏览器是如何通过COOKIE和服务器通信通过请求与响应,COOKIE在服务器和客户端之间传递每次请求和响应都把COOKIE信息加载到响应头中;依靠COOKIE的KEY传递。3COOKIE编程1COOKIE类SERVLETAPI封装了一个类JAVAXSERVLETHTTPCOOKIE,封装了对COOKIE的操作,包括PUBLICCOOKIESTRINGNAME,STRINGVALUE/构造方法,用来创建一个COOKIEHTTPSERVLETREQUESTGETCOOKIES/从HTTP请求中可以获取COOKIESHTTPSERVLETRESPONSEADDCOOKIECOOKIE/往HTTP响应添加COOKIEPUBLICINTGETMAXAGE/获取COOKIE的过期时间值PUBLICVOIDSETMAXAGEINTEXPIRY/设置COOKIE的过期时间值2COOKIE的创建COOKIE是一个名值对KEYVALUE,而且不管是KEY还是VALUE都是字符串如COOKIEVISITNEWCOOKIE“VISIT“,“1“3COOKIE的类型过期时间会话COOKIECOOKIESETMAXAGE1/负整数保存在浏览器的内存中,也就是说关闭了浏览器,COOKIE就会丢失普通COOKIECOOKIESETMAXAGE60/正整数,单位是秒表示浏览器在1分钟内不继续访问服务器,COOKIE就会被过时失效并销毁通常保存在文件中注意COOKIESETMAXAGE0/等价于不支持COOKIE;4SESSION机制每次客户端发送请求,服务断都检查是否含有SESSIONID。如果有,则根据SESSIONID检索出SESSION并处理;如果没有,则创建一个SESSION,并绑定一个不重复的SESSIONID。1基本特点状态信息保存在服务器端。这意味着安全性更高通过类似与HASHTABLE的数据结构来保存能支持任何类型的对象SESSION中可含有多个对象2保存会话ID的技术1COOKIE这是默认的方式,在客户端与服务器端传递JSEESIONID缺点客户端可能禁用COOKIE表单隐藏字段在被传递回客户端之前,在FORM里面加入一个HIDDEN域,设置JSEESIONIDURL重写直接在URL后附加上SESSIONID的信息HTTPSERVLETRESPONSE对象中,提供了如下的方法ENCODEURLURL/URL为相对路径5SESSION编程1HTTPSESSION接口SERVLETAPI定义了接口JAVAXSERVLETHTTPHTTPSESSION,SERVLET容器必须实现它,用以跟踪状态。当浏览器与SERVLET容器建立一个HTTP会话时,容器就会通过此接口自动产生一个HTTPSESSION对象2获取SESSIONHTTPSERVLETREQUEST对象获取SESSION,返回HTTPSESSIONREQUESTGETSESSION/表示如果SESSION对象不存在,就创建一个新的会话REQUESTGETSESSIONTRUE/等价于上面这句;如果SESSION对象不存在,就创建一个新的会话REQUESTGETSESSIONFALSE/表示如果SESSION对象不存在就返回NULL,不会创建新的会话对象3SESSION存取信息SESSIONSETATTRIBUTESTRINGNAME,OBJECTO/往SESSION中保存信息OBJECTSESSIONGETATTRIBUTESTRINGNAME/从SESSION对象中根据名字获取信息4设置SESSION的有效时间PUBLICVOIDSETMAXINACTIVEINTERVALINTINTERVAL设置最大非活动时间间隔,单位秒;如果参数INTERVAL是负值,表示永不过时。零则是不支持SESSION。通过配置WEBXML来设置会话超时,单位是分钟1允许两种方式并存,但前者优先级更高5其他常用的APIHTTPSESSIONINVALIDATE/手工销毁SESSIONBOOLEANHTTPSESSIONISNEW/判断SESSION是否新建如果是TRUE,表示服务器已经创建了该SESSION,但客户端还没有加入还没有建立会话的握手HTTPSESSIONGETID/获取SESSION的ID6两种状态跟踪机制的比较COOKIESESSION保持在客户端保存在服务器端只能保持字符串对象支持各种类型对象通过过期时间值区分COOKIE的类型需要SESSIONID来维护与客户端的通信会话COOKIE负数COOKIE默认普通COOKIE正数表单隐藏字段不支持COOKIE0URL重写7REQUESTDISPATCHERFORWARDREQ,RESPVSHTTPSERVLETRESPONSESENDREDIRECT“URL“请求分发器RDFORWARDREQ,RESP只能访问内部资源。浏览器地址不变。针对同一个请求。可获取表单传递过来的信息REQGETPARAMETER“NAME“应用内部数据共享的方式REQGETATTRIBUTE“NAME“重定向RESPSENDREDIRECT“URL“可以跨网站访问资源。浏览器地址会改变。变成另外的一个请求。8相对路径与绝对路径1形式绝对路径以/开头的路径相对路径不是以/开头的路径2绝对路径运行在客户端时请求的参考点是站点站台本身;即是HTTP/LOCALHOST8080/如路径等于HTTP/LOCALHOST8080/WEBTEST/LOGIN运行在服务器时请求相对于应用的根HTTP/LOCALHOST8080/工程/WEBXML,SERVLET,JSP这些都是运行在服务器端如REQUESTDISPATCHERRDREQUESTGETREQUESTDISPATCHERURL/相对路径,也可以绝对路径REQUESTDISPATCHERRDSERVLETCONTEXTGETREQUESTDISPATCHERURL/只能绝对路径3相对路径运行在客户端时请求的参考点是应用的当前路径;即是页面所在的目录HTTP/LOCALHOST8080/工程/页面所在目录/主要用在两处一是表单中的ACTION“如路径等于HTTP/LOCALHOST8080/工程/页面当前目录/LOGIN二是在重定向中用RESPSENDREDIRECT“LOGON/ERHTML“路径等于HTTP/LOCALHOST8080/工程/页面当前目录/LOGON/ERHTML运行在服务器时都是相对于应用的当前路径;可认为是直接在当前URL后面加上相对路径如RDFORWARD“TARGET“9范围对象CONTEXTSESSIONREQUESTCONFIG对比HTTPSESSION、HTTPSERVLETREQUEST、SERVLETCONTEXT、SERVLETCONFIG的作用范围1SERVLETCONFIG在一个SERVLET实例化后,就创建了一个SERVLETCONFIG对象。主要用来读取WEBXML中配置的SERVLET初始信息,不能被其他SERVLET共享。作用范围处于同一个SERVLET中,均起作用。2HTTPSERVLETREQUEST这是由WEB容器对客户HTTP请求数据封装而成的对象,可通过它获得所有跟客户请求相关的信息。比如HTTP请求方法GETORPOST。注意REQUEST是可以跨SERVLET的。作用范围只要处于同一个请求中,均起作用。3HTTPSESSION当浏览器与SERVLET容器建立一个HTTP会话时,容器就会通过此接口自动产生一个HTTPSESSION对象。作用范围处于同一个会话中,均起作用。用JSESSIONID标识同一个会话4SERVLETCONTEXT对同一个WEB应用中的任何SERVLET,在任何时候都有效,是一个全局的对象。作用范围处于同一个WEB应用中,均起作用。不同的SESSION和请求都可用DAY5一、过滤器FILTER1WHYFILTER针对通用WEB服务、功能,透明的处理2什么是SERVLETFILTER过滤是SERVLET23版才引入的新特性。过滤器可以认为是实现HTTP请求、响应以及头信息等内容的传送的代码片断。过滤器并不能创建响应,但它可以“过滤”传给SERVLET的请求,还可以“过滤”从SERVLET发送到客户端的响应;它不仅能处理静态内容,还可以处理动态内容。换而言之,FILTER其实是一个“SERVLETCHAINING”SERVLET链。一个FILTER包括1在SERVLET被调用之前截获2在SERVLET被调用之前检查SERVLETREQUEST3根据需要修改REQUEST头和REQUEST数据4根据需要修改RESPONSE头和RESPONSE数据5在SERVLET被调用之后截获3过滤器的生命周期FILTER组件的生命周期与SERVLET的类似。过滤器有四个阶段与SERVLET类似1实例化2初始化调用INIT方法3过滤调用DOFILTER方法4销毁调用DESTROY方法4FILTER编程1定义FILTERIMPLEMENTSFILTER2配置FILTER配置对哪些资源进行过滤URLLOGGER/过滤器名COMLOGGERFILTER/具体过滤器类/初始化参数XSLTFILE/XSL/STOCKQUOTESXSLLOGGER/将过滤器应用于WEB应用中的每个WEB资源;可以只指定某个资源5FILTERCHAIN1CHAIN是如何配置,顺序当同一个应用中配置了多个FILTER时,其执行顺序是如何的呢答按WEBXML中的顺序来执行的2CHAINDOFILTERREQ,RESP调用下一个FILTER,到最后一个FILTER则正式调用TARGETSERVLET3调用过程类似于递归调用6FILTER的类型FILTER有4种类型,主要体现在中的属性REQUEST默认,客户端的直接的请求,才触发该过滤器FORWARDSERVLET调用RDFORWARDREQ,RESP时触发INCLUDESERVLET调用RDINCLUDEREQ,RESP时触发ERROR发生错误,跳转到错误页面时触发二、监听器LISTENERLISTENER是SERVLET的监听器,它可以监听客户端的请求、服务端的操作等。通过监听器,可以自动激发一些操作。如监听在线的用户数量。当增加一个SESSION时,就激发SESSIONCREATEDHTTPSESSIONEVENTSE,给在线人数加11监听器的种类一共分三大类型,有8种LISTENERA监听SERVLETCONTEXT1生命周期事件接口JAVAXSERVLETSERVLETCONTEXTLISTENER内容SERVLET上下文已经被创建,并且可以用来向其第一个请求提供服务,或者SERVLET上下文即将关闭2属性的改变接口JAVAXSERVLETSERVLETCONTEXTATTRIBUTELISTENER内容在SERVLET上下文中,增加、删除或者替换属性B监听SERVLETSESSION1生命周期事件接口JAVAXSERVLETHTTPHTTPSESSIONLISTENER内容对一个HTTPSESSION对象进行创建、失效处理或者超时处理2属性改变接口JAVAXSERVLETHTTPHTTPSESSIONATTRIBUTELISTENER内容在SERVLET会话中,增加、删除或者替换属性3会话迁移接口JAVAXSERVLETHTTPHTTPSESSIONACTIVATIONLISTENER内容HTTPSESSION被激活或者钝化4对象绑定接口JAVAXSERVLETHTTPHTTPSESSIONBINDINGLISTENER内容对HTTPSESSION中的对象进行绑定或者解除绑定C监听SERVLETREQUEST1生命周期接口JAVAXSERVLETSERVLETREQUESTLISTENER内容一个SERVLET请求开始由WEB组件处理2属性改变接口JAVAXSERVLETSERVLETREQUESTATTRIBUTELISTENER内容在SERVLETREQUEST中,增加、删除或者替换属性SERVLET环境配置JAVA_HOME/XXX/XXX/JDK路径,BIN的上一层目录CATALINA_HOME/XXXX/XXXTOMCAT的绝对路径WINDOWS中XXXXXXXTOMCAT使用在启动TOMCAT时,是运行TOMCAT的BIN目录下的STARTUPSHWINDOWS中使用STARTUPBATLINUX中要显示后台的具体信息,则用CATALINASHRUN代替STARTUPSH命令。判断TOMCAT是否启动成功,可以在浏览器的地址栏中使用HTTP/LOCALHOST8080/或HTTP/1270018080/可以访问到TOMCAT的主页就表示启动成功。要想停止TOMCAT服务器,可使用SHUTDOWNSHWINDOWS中使用SHUTDOWNBAT,如果直接关闭启动窗口,就会造成8080端口占用错误,这时可以再使用SHUTDOWNSH关闭一下服务器。SERVLET开发步骤编写SERVLET源代码,注意SERVLET的结构。编译SERVLET,需要SERVLETAPIJAR文件位于TOMCATCOMMONLIB目录下;加入CLASSPATH环境变量中部署SERVLET编写配置文件WEBXML其中包括SERVLETBURL与SERVLETNAME的映射,以及SERVLETNAME与SERVLETCLASSNAME的映射。构造WEB应用程序目录结构如下MYWEBAPP应用程序名WEBINFCLASSESLIBHTML/JSP配置文件WEBXML放在WEBINF目录下SERVLET类文件放在CLASSES目录下将整个应用程序目录拷贝到TOMCATWEBAPPS目录下使用此结构的优点一个WEB容器中可以共存多个WEB应用程序。WEB容器知道该到何处寻找装入WEB应用程序所需的类。WEBXML文件的写法IPLOGSERVLETTARENASERVLETLCIPLOGSERVLETFILENAME/GETSERVLETCONFIGGETINITPARAMETERC/IPLOGTXT2/启动服务器时就创建该SERVLET实例,必须是正数,小的数先加载IPLOGSERVLET/要和SERVLET标签中的相同/LC/IPLOG/指定SERVLET相对于应用目录的虚拟路径/XXX/XXX绝对路径,XXX相对路径绝对路径开头的“/”代表HTTP/LOCALHOST8080/测试应用在TOMCAT服务器中,访问应用下的资源可以在端口号后加上WEB应用文件夹的名字,就可以看到资源HTTP/LOCALHOST8080/应用文件夹名/URLPATTERN静态页面只能放在WEB应用的文件夹下,不能够放在WEBINF文件夹下,WEBINF文件夹中的资源是受保护的,不能够通过网络访问到。SERVLET的调用过程用户通过浏览器向WEB服务器发送请求HTTP/SERVERIPPORT/APPNAME服务器为用户定位资源静态资源/AHTML/A/BHTML这里的路径是针对WEB应用文件夹目录读文件并把内容发送到客户端。动态资源解析WEBXML定位SERVLET类的名字。装载类WEBINF/CLASSES|WEBINF/LIB/JAR创建该对象的实例SERVLETSERSERVLETCLASSFORNAME“SERVLE的类名“NEWINSTANCE/我们写的SERVLET一定要实现SERVLET接口或者继承实现了SERVLET接口的类SERSERVICEREQUEST,RESPONSE用SERVLET处理表单数据FORM元素的属性ACTION用来指定要处理FORM数据的SERVLET的URLMETHOD指定数据传送给HTTP服务器的方法解析请求GETPARAMETERNAMES可以获得一个迭代器ENUMERATION,通过这个迭代器,来获得FORM表单中参数的名字。GETPARAMETER返回表单中参数名区分大小写对应的值没有这样的参数,返回NULL没有任何值,返回空STRING多参数同名时,只取一个。GETPARAMETERVALUES返回表单中参数名区分大小写对应的字符串数组没有这样的参数,返回NULL只有一个值,返回值为单一元素组GETINIT方法实例覆盖INITSERVLETCONFIGCONF方法时,应该总是在首行调用SUPERINIT或者直接覆盖INITINIT方法接受SERVLETCONFIG作为参数,用以下方法获得参数值GETINITPARAMETER返回指定参数名称对应的值,如果参数不存在,返回NULLGETINITPARAMETERNAMES返回所有初始化参数的名字SERVICE方法每当服务器接收到对SERVLET的请求时,服务器就会产生一个新线程,并调用SERVICE。SERVICE方法检查HTTP请求类型,并相应地调用DOGET、DOPOST、DOPUT、DODELETE。被CONTAINER调用去响应SERVLETRESPONSE来自客户端的请求SERVLETREQUESTSERVLETS的多线程安全多线程占用资源少,处理速度快,提高了效率。一些编码建议对变量和方法定义适当的访问方式,例如单纯取值操作不会有多线程安全问题同步化所有访问重要数据的实例变量多线程下,如果操作的是一个变量,且兼有读写操作,就要考虑加上同步,但同步不能乱加,否则会造成死锁问题。并发需要注意的并发的环境资源处于一个并发的环境共享资源多个线程共享一个临界资源全面同步如有N个变量访问同一个资源,这N个变量都得同步。即多个锁一把钥匙,钥匙放在一个共享区域内SYCHRONIZEDTHIS粗粒度的锁。是将所有的路都加锁;SYCHRONIZEDOBJECTO1细粒度的锁。只对对象中的变量加锁。效率较前面的高,但是较难控制。读写需要互斥。SYCHRONIZEDTHISTHIS不能是基本数据类型,必须是OBJECT不锁对象的引用,而是对象的内存空间。SERVLET中需要同步的成员变量、文件、静态变量、数据库连接DESTROY方法服务器决定删除已经加载的SERVLET实例之前将调用SERVLET的DESTROY方法该方法允许SERVLET关闭数据库连接中止后台线程将COOKIE程序清单或访问计数写到磁盘以及执行其他类似的收尾工作。在SERVLET终止时处理SERVICE线程在DESTROY方法中如有服务通过一个同步化的实例方法取得当前线程数大于0,则置关闭状态为FALSE通过一个同步化的实例方法实现。然后循环等待服务线程数为0,则置关闭状态为TRUE在SERVICE方法中如见关闭状态为TRUE,便不执行具体逻辑方法,直接退出。HTTPSERVLET类的基本结构继承HTTPSERVLET实现至少一个SERVICE方法,如DOGET和DOPOSTSERVICE方法有两个参数,HTTPSERVLETREQUEST和HTTPSERVLETRESPONSEHTTPSERVLETREQUEST代表经过容器加工的用户的请求HTTPSERVLETRESPONSE代表需要容器进一步加工的对用户的响应我们写的SERVLET需要引入JAVAXSERVLET和JAVAXSERVLETHTTP两个命名空间SERVLET继承关系SERVLET主要数据结构SERVLET接口主要定义了SERVLET的生命周期方法SERVLETCONFIG接口为SERVLET提供了使用容器服务的若干重要对象和方法。SERVLETCONTEXT接口是SERVLET的上下文对象,这个对象是在服务器启动时创建的,为SERVLET提供了使用容器服务的若干重要方法。GENERICSERVLET抽象类为SERVLET提供了一般的实现包括实现了SERVLET和SERVLETCONFIG两个接口,保存了容器通过INIT方法传递给SERVLET的一个SERVLETCONFIG类型的重要对象。HTTPSERVLET抽象类为处理HTTP请求的SERVLET提供了一般实现,主要是定义和实现了若干SERVICE方法。继承关系GENERICSERVLET继承了SERVLET和SERVLETCONFIG接口;HTTPSERVLET继承了GENERICSERVLET我们写的SERVLET继承了HTTPSERVLETSERVLET访问DB一个SERVLET完成整个功能获取CLIENT端信息ENTITYV调用相应的处理方法CONTROLLER|连接数据库UTILV操作信息数据BIZMODEL返回给CLIENT端相应的结果页面VIEW将一个SERVLET按功能细分将一个完成所有功能的SERVLET分解成多个,分别完成自己的功能,即形成了MVC。MVC框架组件的各司其职MODEL,模型层封装数据,这一层一般是进行数据库访问,并且封装对象,这一层中也存放在访问数据库取出信息封装成对象的类,也就是实体类的信息,可以使用JDBC或者HIBERNATE实现这一层的功能。CTRL,控制层改变数据,改变模型的状态,用来相应请求和调用写好的相应的访问数据库的方法,这一层是用来控制请求的响应的,现在我们是使用SERVLET来实现这一层,不过一般是会用开源的MVC框架来实现这层,例如STRUTS,或者是SPRING的MVC框架。VIEW,表现层显示数据和收集数据,收集数据的一般是FORM表单,不过要保证数据的正确性要是用JAVASCRIPT验证信息,以后我们会学到的JSPJAVASERVERPAGE就是用来表现、显示数据的。SERVLET之间的怎么互相调用在上述基础上需要解决SERVLET之间的调用可以利用SERVLETCONTEXT解决每一个SERVLET都可能和上下文交互,则每个SERVLET中都应该保存一个SERVLETCONTEXT对象,去访问整个应用的上下文,步骤如下GETSERVLETCONTEXTAPPLICATIONAPPLICATIONGETREQUESTDISPATCHER“/RES/STUDENTS/LIST”DISPATCHERDISPATCHERFORWARDREQUEST,RESPONSE每个JVM中的每一个应用程序里都存在一个上下文SERVLETCONTEXT在SERVLETCONFIG的对象中SERVLETCONTEXTGETREQUESTDISPATCHERSTRINGPATH返回一个REQUESTDISPATCHER通过REQUESTDISPATCHER的FORWARD或INCLUDE方法传送请求。如何在一个SERVLET中调用另外一个SERVLETSERVLETCONTEXT类的GETREQUESTDISPATCHERSTRINGPATH方法获得一个REQUESTDISPATCHER对象,并且跳转到指定的SERVLET,GETREQUESTDISPATCHERSTRINGPATH方法中的参数就是PATH,就是指定跳转的SERVLET的URLPATTERN。REQUESTDISPATCHER类的FORWARDSERVLETREQUESTREQUEST,SERVLETRESPONSERESPONSE方法,可以把请求对象转发给其他的SERVLET。在多个SERVLET中传递信息HTTPSERVLETREQUEST对象中的方法SETATTRIBUTESTRINGNAME,OBJECTO,可以使用HTTPSERVLETREQUEST对象来携带信息,并且可以通过GETATTRIBUTESTRINGNAME方法来获得携带的信息,这两个方法类似于MAP中的存取方法,SETATTRIBUTE方法给数据加上标识,GETATTRIBUTE方法则是通过这个标识来获取数据,可以使用这一对方法的前提就是要保证是同一个请求对象HTTPSERVLETREQUEST转发请求至新的资源REQUESTDISPATCHER的二种传送请求方式FORWARD将请求从一个SERVLET传到服务器上的其他资源SERVLET、JSP、HTMLINCLUDE将静态或动态内容包含在当前SERVLET中获得REQUESTDISPATCHER的二种方式SERVLETREQUESTGETREQUESTDISPATCHER/相对路径SERVLETCONTEXTGETREQUESTDISPATCHER/绝对路径RESPONSESENDREDIRECT/SERVAPP/STATE/LOGIN/要写绝对路径,产生新的请求,FORWARDREQ,RESP/在当前路径基础上跳转两个页面之间跳转的时侯如果需要数据传递,则只能用FORWARD因为SENDREDIRECT会产生一个新的请求。SERVLET中使用数据源访问数据库在服务器中配置数据源使用ADMIN管理界面再SERVLET中使用JNDI语法获取数据源CONTEXTCONTEXTNEWINITALCONTEXTDATASOURCEDSDATASOURCECONTEXTLOOKUP“JAVACOMP/ENV/“DSNAMECONNECTIONCONDSGETCONNECTION新建一个配置文件MYAPPXML假设WEB应用程序名称为MYAPP,将XML文件的头部和一对标签写入该文件,将SERVERXML中有关数据源配置的标签内容拷贝到MYAPPXML中的标签之间。SERVERXML位于TOMCATCONF文件夹下,MYAPPXML放在TOMCATCONFCATALINALOCALHOST文件夹下。数据源配置SERVERXML会话管理为什么要使用SESSION一般来讲,从同一客户打开浏览器连接到服务再到客户关闭浏览器可称为一次会话中间浏览器可以打开多个窗口通信协议分为有状态和无状态两种。HTTP协议是一种无状态协议。一个客户向服务器发出请求然后服务器返回响应,连接就被关闭了。在服务器端不保留连接的有关信息因此当下一次连接建立时,服务器已没有以前连接的信息了,无法判断这一次连接和以前的连接是不是属于同一客户发出的。在实际应用中,客户进行一个事务性的操作可能需要对服务器进行好几次连接,这时维护前几次连接的状态就非常重要。服务器必须能够区分不同的客户,而且还要有为每一个客户存储数据的方法。SESSION实现的三种方法COOKIEURLREWRITING隐藏表单域使用JAVASERVLETAP
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 机械进出口合同范本
- 内蒙正骨健康协议书
- 养羊租地合同协议书
- 核酸转运协议书范本
- 医务人员聘任协议书
- 医疗整形医患协议书
- 山东滨州高新技术产业开发区2025年下半年招考雇员制工作人员易考易错模拟试题(共500题)试卷后附参考答案
- 山东五莲县2025年下半年招考事业单位专业技术人员易考易错模拟试题(共500题)试卷后附参考答案
- 安徽池州市园林局2025年下半年招考1名专业技术人员易考易错模拟试题(共500题)试卷后附参考答案
- 农业种植生产协议书
- 宠物直播带货案例分析-洞察及研究
- 江西铜业校招笔试题及答案
- 2025国际贸易合同协议书标准版范本
- 2025宁夏建设投资集团有限公司招聘60人笔试历年典型考点题库附带答案详解试卷2套
- 2025年《治安管理处罚法》多项选择题题库及答案
- 全国大学生职业规划大赛《网络直播与运营》专业生涯发展展示【高职(专科)】
- 试验员安全综合能力考核试卷含答案
- GB/T 18711-2025选煤用磁铁矿粉试验方法
- 2025年国考国家能源局无领导小组讨论资源分配类题目实战
- 2025秋季石油工业出版社有限公司高校毕业生招聘考试参考试题及答案解析
- 中国对外贸易中心集团笔试题库
评论
0/150
提交评论