servlet基础知识

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

Servlet基础知识笔记4.servlet小结(1)servlet基础1)什么是servlet?sun公司制订的一种用来扩展web服务器功能的组件规范。(1)用来扩展web服务器功能:web服务器(比如apache)只能够处理静态资源的请求,不能够处理动态资源的请求。注:静态资源指的是需要事先将html文件,写好并存放到web服务器上。(2)组件规范1)什么是组件?符合一定规范,实现部分功能,并且需要部署到相应的容器里面才能运行的软件模块。2)什么是容器?符合一定规范,提供组件的运行环境的程序。servlet是一个组件,需要部署到servlet容器里面才能运行。2)如何写一个servlet?step1,写一个java类,实现Servlet接口或者继承HttpServlet抽象类。step2,编译step3,打包,创建一个具有如下结构的文件夹appname(应用名)WEB-INFclasses(放class文件)lib(可选,放jar文件)web.xml(描述文件url-pattern)step4,部署将step3创建好的文件夹拷贝到容器。注:可以使用jar命令将step3创建好的文件夹压缩成一个以.war为后缀的文件然后再拷贝。step5,访问,启动容器之后,打开浏览器,输入)servlet是如何运行的?比如,在浏览器地址栏输入浏览器依据ip,port建立连接。step2,浏览器将相关的数据打包(请求数据包)发送给servlet容器。step3,容器解析请求数据包,并且将解析之后的数据添加到request对象,同时,还会创建一个response对象。step4,容器创建servlet对象,并调用该对象的service方法(会将request和response对象作为参数传递过来)。注:可以利用request提供的方法来获得请求数据包中的数据(比如请求参数),并且可以将处理结果放到response。step5,容器从response获取处理结果并打包(响应数据包),然后发送给浏览器。step6,浏览器解析响应数据包,生成相应的页面。4)http协议(了解)由w3c制订的一种网络应用层协议,规定了浏览器与web服务器之间如何通信以及相应的数据包的结构。1)如何通信?step1,建立连接step2,发送请求step3,发送响应step4,关闭连接2)特点一次请求,一次连接。即如果浏览器要发送新的请求,需要重新建立新的连接。3)优点web服务器可以利用有限的连接为尽可能多的请求服务。(2)servlet核心1)如何获得请求参数值?1)get请求a.哪一些情况下,浏览器会发送get请求?a1.点击链接a2.直接输入请求地址a3.表单默认提交方式b.特点b1.将请求参数添加到请求资源路径的后面,所以,只能提交少量的数据。b2.将请求参数显示在浏览器地址栏,不安全(比如路由器会记录包含了请求参数的地址)。2)post请求a.哪一些情况下,浏览器会发送post请求?设置表单的提交方式为post。b.特点b1.将请求参数添加到实体内容里面,可以提交大量的数据。b2.不会将请求参数显示在浏览器地址栏,相对安全。注意,不管什么请求方式,都不会对请求参数加密,所以,对于敏感数据,一定要加密处理。2)表单包含有中文参数,如何处理?(1)乱码问题产生的原因表单提交的时候,浏览器会对中文参数值进行编码,而服务器端,默认会使用iso-8859-1来解码。注:会使用打开该表单所有的页面时的字符集来编码。(2)解决方式step1,浏览器端,使用指定的字符集来编码。metahttp-equiv=content-typecontent=text/html;charset=utf-8step2,服务器端,使用对应的字符集来解码。方式一request.setCharacterEncoding(utf-8);注:只针对post请求有效。方式二uname=newString(uname.getBytes(iso-8859-1),utf-8);3)servlet输出中文,如何处理?(1)乱码问题产生的原因out.println方法在默认情况下,会使用iso-8859-1来编码。(2)解决方式response.setContentType(text/html;charset=utf-8);这行代码的作用:作用1:设置content-type消息头的值。作用2:out.println方法会使用指定的字符集来编码。4)容器如何处理请求资源路径?比如,在浏览器地址栏输入浏览器会将/web04-3/abc.html作为请求资源路径发送给容器。step1,容器依据/web04-3(应用名)找到应用所在的文件夹。step2,容器默认认为访问的是一个servlet,所以,容器会去查找web.xml文件,找到匹配的servlet。1)精确匹配即要求url-pattern/abc.html/url-pattern2)通配符匹配即使用*匹配零个或者多个字符。比如url-pattern/*/url-pattern3)后缀匹配即使用*.开头,后接多个字符。比如url-pattern*.do/url-pattern表示匹配所有以.do结尾的请求。step3,如果找不到匹配的servlet,则容器会查找相应的文件5)如何将多个servlet合并成一个?step1,使用后缀匹配,比如servlet-mappingservlet-nameActionServlet/servlet-nameurl-pattern*.do/url-pattern/servlet-mappingstep2,分析请求资源路径,依据分析的结果来选择相应的分支来处理。Stringrequest.getRequestURI();6)转发与重定向重定向:服务器通知浏览器向一个新的地址发送请求服务器通知浏览器向一个新的地址发送请求。转发:一个web组件将未完成的处理交给另外一个web组件继续做。1.比较转发与重定向(1)能否共享request转发可以,重定向不行。注:当容器收到请求之后,会立即创建request和response,当容器发送响应之后,会立即销毁这两个对象。(2)浏览器地址栏地址有无变化转发不变,重定向会变。(3)目的地有无限制转发有限制(同一个应用),重定向不限。7)servlet的生命周期(1)什么是servlet的生命周期?容器如何创建servlet对象,如何对其进行初始化处理,如何调用该对象来处理请求,以及如何销毁该对象的整个过程。(2)分成哪几个阶段?1)实例化a.什么是实例化?容器创建servlet对象b.什么时候实例化?b1.容器收到请求之后。b2.容器启动之后,事先创建好。需要配置load-on-startup参数。注意,容器在默认情况下,对于某个类型的servlet,只会创建一个实例。2)初始化a.什么是初始化?容器调用servlet对象的init(ServletConfigconfig)方法。b.init方法只会执行一次。c.GenricServlet的init方法将容器传递过来的ServletConfig保存下来,并且提供了一个方法(getServletConfig)来获得该对象。注:可以通过overrideinit()方法来实现自己的初始化处理逻辑。d.初始化参数step1,配置init-paramparam-namecompany/param-nameparam-value中信证券/param-value/init-paramstep2,读取ServletConfig提供的getInitParameter方法。3)就绪a.什么是就绪容器调用servlet对象的service方法处理请求。b.HttpServlet的service方法依据请求类型(get/post)调用对应的doGet/doPost方法。注:可以通过overridedoGet/doPost或者overrideservice方法来实现请求处理逻辑。4)销毁a.什么是销毁?容器在删除servlet对象之前,会先调用该对象的destroy方法。b.该方法只会执行一次。(3)相关的几个类与接口1)Servlet接口a.init(ServletConfigconfig)b.service()c.destroy()2)GenericServlet抽象类实现了Servlet接口中的部分方法(init,destory)3)HttpServlet抽象类继承了GenericServlet,实现了service方法8)servlet的线程安全问题:(1)为什么说servlet会有线程安全问题?1)容器在默认情况下,对于某个类型的servlet,只会创建一个实例。2)容器收到一个请求就会启动一个线程来处理,就有可能多个线程同时访问同一个servlet实例。比如,这些线程要修改servlet的属性,就有可能发生线程安全问题。(2)如何解决1)使用synchonrized对具有线程安全问题的代码块加锁。注:加锁会影响性能。2)实现SingleThreadModel接口(不建议使用)容器会为每一个线程单独创建一个对应的servlet实例。9)servlet上下文(ServletContext)1)什么是servlet上下文?容器启动之后,会为每一个web应用创建唯一的一个符合ServletContext接口要求的对象。该对象有两个特点:a.唯一性,即一个web应用对应一个上下文。b.持久性,只要容器不关闭,应用没有被卸载,则上下文会一直存在。2)如何获得servlet上下文?GenericServletServletConfigHttpSessionFilterConfig都提供了getServletContext方法来获得servlet上下文。3)作用作用1:绑订数据setAttributegetAttributeremoveAttribute注:生存时间requestsessionservlet上下文,在满足使用条件的情况下,应该优先使用生命周期短的。作用2:访问全局的初始化参数step1,配置context-paramparam-namecompany/param-nameparam-value达内/param-value/context-paramstep2,读取ServletContext提供的getInitParameter方法。(3)状态管理1)什么是状态管理?将客户端与服务器之间多次交互当做一个整体来看待,并且将多次交互中涉及的数据保存下来,提供给后续的交互进行数据的管理即状态管理。2)Cookie一小段文本信息随着请求和响应,在客户端和服务器端之间来回传递。根据设定的时间来决定该段文本在客户端保存时长的这种工作模式叫做Cookie。(1)创建CookieCookiec=newCookie(Stringname,Stringvalue);response.addCookie(c);(2)查询CookieCookie[]request.getCookies();(3)Cookie存在的问题5)编码问题cookie只能存放合法的ascii字符。如果要保存中文,可以将中文转换成合法的ascii字符串的形式。URLEncoder.encode()URLDecoder.decode()注:添加cookie时,建议对所有字符都统一使用encode方法进行编码。6)生存时间问题a.默认情况下,浏览器会把cookie保存在内存里面,只要浏览器不关闭,cookie就会一直存在(浏览器关闭,则cookie就会被删除)。b.可以调用cookie.setM

1 / 13
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功