servlet核心技术.ppt

上传人:hyn****60 文档编号:71613802 上传时间:2023-02-03 格式:PPT 页数:74 大小:618.50KB
返回 下载 相关 举报
servlet核心技术.ppt_第1页
第1页 / 共74页
servlet核心技术.ppt_第2页
第2页 / 共74页
点击查看更多>>
资源描述

《servlet核心技术.ppt》由会员分享,可在线阅读,更多相关《servlet核心技术.ppt(74页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、Servlet核心技术 主讲:周立波1/31/20231Servlet的生命周期调调用用 service()方法方法服服务务器加器加载载 Servlet服服务务器器创创建建Servlet类类的的实实例例 调调用用 Servlet 实实例的例的init()方法方法 收到收到请请求求service()方法方法处处理理请请求求并将并将输输出出结结果返回客果返回客户户端端 Servlet 等待下一个等待下一个请请求求或由服或由服务务器卸器卸载载 Servlet 在服在服务务器器调调用用destroy()方法后被卸方法后被卸载载 1/31/20232Servlet 体系结构oServlet包含两个包:n

2、javax.servlet:称为GenericServletnjavax.servlet.http:称为HttpServlet它们之间的关系如图所示用用户户自定自定义义的的 ServletGenericServletHttpServletServlet1/31/20233Servlet 体系结构(续)oServlet必须实现 javax.servlet.Servlet 接口o通过继承javax.servlet.GenericServlet类实现跨协议的 Servleto通过继承javax.servlet.HttpServlet实现HTTP Servlet1/31/20234javax.serv

3、let包o接口nServlet 定义必须实现的方法nServletConfig 配置nServletContext 与容器通讯nServletRequest 请求nServletResponse 响应nRequestDispatcher 转发nSingleThreadModel 单线程o抽象类nGenericServlet 与协议无关的ServletnServletInputStream 二进制输入流nServletOutputStream 二进制输出流1/31/20235javax.servlet.http包o接口nHttpServletRequest HTTP请求nHttpServletR

4、esponse HTTP响应nHttpSession 会话nHttpSessionBindingListener 会话绑定监听器o类nHttpServlet 抽象类nCookienHttpSessionBindingEvent 会话绑定事件1/31/20236Java Servlet API概貌 目的目的类、接口类、接口(红字为接口红字为接口)servlet实现实现javax.servlet.Servletjavax.servlet.SingleThreadModeljavax.servlet.GenericServletjavax.servlet.http.HttpServletservle

5、t配置配置servlet异常异常javax.servlet.ServletConfigjavax.servlet.ServletExceptionjavax.servlet.UnavailableException请求和应答请求和应答javax.servlet.ServletRequestjavax.servlet.ServletResponsejavax.servlet.ServletInputStreamjavax.servlet.ServletOutputStreamjavax.servlet.http.HttpServletRequestjavax.servlet.http.HttpS

6、ervletResponse1/31/20237Java Servlet API概貌(续)会话跟踪会话跟踪javax.servlet.http.HttpSessionjavax.servlet.http.HttpSessionBindingListenerjavax.servlet.http.HttpSessionBindingEventservlet上下文上下文javax.servlet.ServletContextservlet协作协作javax.servlet.RequestDispatcher其他其他javax.servlet.http.Cookiejavax.servlet.http

7、.HttpUtils1/31/20238Servlet接口init方法方法servlet客户客户客户客户请求请求响应响应请求请求响应响应service方法方法:客户请求和响应调用该方法客户请求和响应调用该方法servlet初始化调用init方法内存内存释放内存Shut Down释放内存、关闭释放内存、关闭Web服务服务器调用器调用destroy方法方法1/31/20239Servlet接口(续)Servlet实例化调用init(ServletConfig config)方法把“配置”信息放在ServletConfig的对象中getServletConfig方法方法返回MyServletThis

8、 is first servlet!getServletInfo方法方法返回(String类型)1/31/202310GenericServlet和HttpServlet类abstract GenericServlet public abstract service(request,response)HttpServlet protected void service(request,response)public void service(request,response)protected void doGet(request,response)protected void doPost(

9、request,response)继承i我们自己编写的我们自己编写的servlet应该继承应该继承HttpServlet,一般要覆盖一般要覆盖doPost或者或者doGet方法。方法。iHttpServlet类的类的doGet方法用于接收方法用于接收Get请求,请求,doPost方法用于接收方法用于接收Post请求。请求。1/31/202311GenericServlet和HttpServlet类(续)servlet收到一个请求收到一个请求 调用调用public的的service()方法方法 把参数分别转换为把参数分别转换为HttpServletRequest和和HttpServletResp

10、onse 这个这个public的的service()方方法调用法调用protected的的service()方法方法 根据根据HTTP请求方法的类型,请求方法的类型,protected的的service()调用调用doXXX()方法之一方法之一 1/31/202312doGet方法o支持Http Get请求1/31/202313doPost方法o支持Http Post请求1/31/202314ServletConfig接口getInitParameterNames返回初始化参数名枚举返回初始化参数名枚举 getServletName返回返回servlet名字名字getInitParameter

11、返回初始化参数的值返回初始化参数的值 Admin Adminservlet email 1/31/202315ServletConfig接口(续)一个目录一个目录比如:比如:%Tomcat_Home%/webapps/sessionWeb应用程序应用程序ServletContext对象对象 相联系 getServletContext方法方法返回对应就是一个1/31/202316ServletConfig接口实例o将JDBC数据库连接放在Servlet中1/31/202317Servlet异常类oServletException类包含一个获得异常原因的方法:ngetRootCause():返回造

12、成这个ServletException的原因oUnavailableException类n该类继承于ServletException,当Servlet或Filter暂时或永久不能使用时,会抛出该异常1/31/202318属性属性值值(对象对象)setAttribute 方法方法:设置属性的值设置属性的值getAttribute 方法方法:返回属性的值返回属性的值removeAttribute方法方法:删除属性删除属性ServletRequest接口1/31/202319HttpServletRequest接口HttpServletRequest public String getQuerySt

13、ring()public Enumeration getHeaders()public Enumeration getHeaderNames()public String getMethod()继承继承interface ServletRequestpublic String getParameter(String key)public String getParameterValues(String key)public void setAttribute(String name,Object o)1/31/202320ovoid setContentType(String type)用于设

14、置响应的MIME类型,如:response.setContentType(“text/html”);oServletOutputStream getOutputStream()返回一个ServletOutputStream对象,它可以用来在响应中写入二进制数据。ojava.io.PrintWriter getWriter()返回一个PrintWriter对象,它可以用来在响应中发送字符文本,比如:PrintWriter out=response.getWriter();out.println(“.”);ServletResponse接口1/31/202321ovoid sendError(in

15、t status)比如在servlet文件中有如下代码:response.sendError(404);则当遇到该代码时,会转到一个错误页面:文件没有发现(404错误)。ovoid sendRedirect(String location)重定向到location。比如response.sendRedirect(“/abc.html”);遇到该行代码,会转到abc.html页面。HttpServletResponse接口1/31/202322HttpSession接口getCreationTime 1970-1-1 00:00:00创建时间毫秒数getId唯一标识(String型)getLas

16、tAccessedTime 1970-1-1 00:00:00 最近的访问时间毫秒数1/31/202323HttpSession 接口(续)setMaxInactiveInterval 请求请求 MAX时间请求失效isNew是新会话是新会话不是新会话不是新会话truefalse invalidate 终止会话终止会话getMaxInactiveInterval请求2请求3MAX时间请求1请求41/31/202324HttpSession接口(续)属性属性值值(对象对象)setAttribute 方法:方法:设置属性的值设置属性的值getAttribute 方法:方法:返回属性的值返回属性的值

17、getAttributeNames方法:方法:枚举属性的名字枚举属性的名字removeAttribute方法:删除属性方法:删除属性1/31/202325server.xml ServletContext接口%Tomcat_Home%webappssessionindex.htmlpage1.html在在server.xml中配置中配置最终可最终可以在浏以在浏览器中览器中查看查看上下文表示每个上下文表示每个Web应用程序的应用程序的环境,并且被当作是一个应用程环境,并且被当作是一个应用程序中所有的序中所有的servlet可以访问可以访问的共的共享库。享库。1/31/202326RequestD

18、ispatcher接口 ServletContext的getRequestDispatcher(String path)方法 与path相联系的RequestDispatcher对象 forward(ServletRequest request,ServletResponse response)path 返回调用转向1/31/202327Servlet的配置oServlet的名字、类及其它杂项o初始化参数o启动装入优先级oServlet映射o运行安全设置1/31/202328Servlet的名字、类及其它杂项o:指定Servlet的名字o:指定Servlet类o:若Servlet是一个JSP文

19、件,则指定JSP文件名o:Servlet的描述o:Servlet部署时显示的名字 1/31/202329初始化参数 1/31/202330启动装入优先级o数字 说明:指定Web应用启动时,装载Servlet的次序。当该值为正数或零,则数字越小越先装入;若该值为负数或没有设定,则在客户第一次访问这个Servlet时才装载它。1/31/202331CookiesoCookies是Netscape公司发明的,最常用的跟踪用户会话的方式。oCookies是由服务器发送给客户端的消息,保存在客户端,用来跟踪客户的状态。oCookie有3个规范:Netscape规范、RFC2019、RFC2965。oSe

20、rvlet2.4支持Netscape规范和RFC2109.oCookies以键-值得方式记录会话跟踪的内容。o服务器利用响应报头Set-Cookie来发送Cookie信息。o在Servlet规范中,用于会话跟踪的Cookie的名字必须是JSESSIONID.oCookie会造成一些隐私权和安全性方面的问题。o当用户选择禁用Cookie,那么可以利用URL重写来跟踪用户会话。1/31/202332Cookie类o主要提供如下方法:opublic Cookie(String name,String value)opublic String getComment()ovoid setComment(

21、String purpose)oString getDomain()ovoid setDomain(String pattern)oint getMaxAge()ovoid setMaxAge(int expiry)oString getName()oString getValue()ovoid setValue(String newValue)oString getPath()ovoid setPath()oboolean getSecure()ovoid setSecure(boolean flag)oint getVersion()ovoid setVersion(int v)1/31/

22、202333在开发中我们通常将cookie读取,然后加载到内存中使用,Cookie 实例:1/31/202334Filter介绍1/31/202335过滤器概述oFilter是从Servlet2.3开始新增的功能,并在Servlet2.4得到增强。o在一个Web应用中可以部署多个过滤器。o多个过滤器组成一个过滤器链。o过滤器可以直接发送响应给客户端,或者转发给另一个资源。浏览器目标过滤器1 过滤器2过滤器3 过滤器41/31/202336Filter APIojavax.servlet.Filter接口ojavax.servlet.FilterConfigojavax.servlet.Filt

23、erChainojavax.servlet.ServletRequestWrapperojavax.servlet.ServletResponseWrapperojavax.servlet.http.HttpServletRequestWrapperojavax.servlet.http.HttpServletResponseWrapper1/31/202337Filter接口o开发过滤器要实现javax.servlet.Filter接口。o定义了3个方法:opublic void init(FilterConfig config)throws ServletExceptionopublic

24、void doFilter(ServletRequest req,ServletReponse resp,FilterChain chain)throws java.io.IOException,ServletExceptiono类似于Servlet接口的service方法。操作完后可以调用chain.doFilter()将请求传给下一个过滤器,也可以使用forward()和include()、以及sendRedirect()方法将请求转向到其他资源。opublic void destroy()1/31/202338FilterConfig接口o类似于ServletConfig接口。oFilt

25、erConfig由容器实现,将其作为参数传入过滤器对象的init()方法。o有如下4种方法:opublic String getFilterName()opublic String getInitParameter(String name)opublic Enemeration getInitParameterNames()opublic ServletContext getServletContext()1/31/202339FilterChain接口o有容器实现,以参数形式传入doFilter方法。oFileChain可以调用过滤器链中的下一个过滤器。如果为最后一个,则调用目标资源。oFi

26、lterChain方法:opublic void doFilter(ServletRequest req,ServletResponse resp)throws java.io.IOException,ServletException1/31/202340Filter部署o通过和部署o例子:FilterDemo com.nastation.filter.FilterDemo hello /WEB-INF/hello.txt oSerlvet容器只为每个过滤器创建一个实例。o容器通过多线程来为多个请求服务,所以开发Filter时要注意线程安全。o如果一个Filter部署了2次,那么回建立2个相同

27、的过滤器类的实例。1/31/202341过滤器的开发oStep1:编写过滤器类SimpleFilter.javaoStep2:编写测试页面test.jspoStep3:编译和部署过滤器,把SimpleFilter.class放到WEB-INFclasses目录下oStep4:配置Web应用程序oStep5:运行Web应用程序,测试过滤器ohttp:/localhost:8080/ServletDemo/test.jsp1/31/202342过滤器的工作流程浏览器目标code1code1code2code2chain.doFilter()chain.doFilter()1/31/202343对请

28、求和响应数据进行替换的过滤器o一个项目开发一个留言板程序,运行中发现2个问题:1.用户在留言时输入HTML代码,破坏了留言板的正常显示2.用户输入了不雅的文字o希望使用过滤器来解决这2个问题。oHttpServletRequest类没有提供对信息修改的方法,我们可以使用包装类(Wrapper)。o共定义了4个包装类:1.ServletRequestWrapper2.ServletResponseWrapper3.HttpServletRequestWrapper4.HttpServletResponseWrappero包装类是装饰模式的运用。1/31/202344一个例子oStep1:编写My

29、RequestWrapper.javaoStep2:编写ByteArrayServletOutputStream.javaoStep3:编写MyResponseWrapper.javaoStep4:编写GuestbookFilter.javaoStep5:准备留言板程序 say.html,process.jsp,index.jspoStep6:配置JDBC数据源oo ooStep7:创建不雅字句与替换内容的文件oStep8:编译源文件,部署过滤器oStep9:运行Web应用程序.http:/localhost:8080/ServletDemo/say.html1/31/202345监听器的开发

30、1/31/202346HttpSessionBindingListener接口o如果一个对象实现了这个接口,那么当这个对象被绑定到Sesion中或者从Session中被删除时,Servlet容器就会通知这个对象,而这个对象在接收通知后,可以做一些初始化或者清除状态的操作。o例如:在网络购物应用中,可以让购物车对象实现HttpSessionBindingListener接口,当顾客选购商品时,Web应用程序创建购物车对象,保存在Session中。当顾客没有结帐就离开了站点,或者顾客在浏览商品介绍时,Session超时了,这个时候,Servlet容器就会通知购物车对象,它要从Session中被删除

31、了。购物车对象得到通知后,可以把顾客选购的商品保存到数据库中。当顾客再次来网站购物时,Web应用程序在将购物车绑定到Session中时,servlet容器会通知购物车,此时,购物车可以从数据库中加载先前保存到数据库中的商品信息。顾客会惊奇地发现,以前预购的商品信息仍然存在。1/31/202347HttpSessionBindingListener接口o接口有如下方法:opublic void valueBound(HttpSessionBindingEvent event)o当对象被绑定到Session中,Servlet容器会调用这个方法来通知该对象。opublic void valueUnb

32、ound(HttpSessionBindingEvent event)o当从Session中删除对象时,Servlet容器调用这个方法来通知该对象。1/31/202348在线人数统计程序o我们利用HttpSesisonBindingListener接口,编写一个在线人数统计的程序。o当一个用户登录后,显示欢迎信息,同时显示当前在线人数和用户名单。o当一个用户退出登录或者Session超时发生时,从在线用户名单中删除这个用户,同时将在线人数的总数减一。oStep1:编写login.htmloStep2:编写UserList.java,User.java,OnlineUser.java,Logou

33、tServlet.javaoStep3:编译上述4个Java源文件oStep4:部署ServletoStep5:运行在线人数统计程序ohttp:/localhost:8080/peoplecount/online/login.html1/31/202349与Session相关的监听器接口o当session被钝化或激活时,Servlet容器将通知该对象。ojavax.servlet.http.HttpSessionActivationListenero当Session中的属性列表发生改变时得到通知:ojavax.servlet.http.HttpSessionAttributeListnero在

34、Session创建后或者在Session无效前得到通知:ojavax.servlet.http.HttpSessionListener1/31/202350与上下文相关的监听器接口o在ServletContext中的属性列表发生变化时得到通知:ojavax.servlet.ServletContextAttributeListenero在ServletContext初始化或者将被销毁时得到通知。ojavax.servlet.ServletContextListener.1/31/202351与请求相关的监听器接口ojavax.servlet.ServletRequestAttributeLis

35、tenero在Servlet请求对象中的属性发生改变时得到通知。ojavax.servlet.ServletRequestListenero在请求对象初始化时或者将要被销毁时得到通知。1/31/202352JSP开发模式开发模式 oMVCMVC设计模式设计模式 oJSPJSP开发模式开发模式 o用模式一实现用户登录功能用模式一实现用户登录功能 o用模式二实现用户注册功能用模式二实现用户注册功能 1/31/202353MVC设计模式设计模式 o在开发一个软件之前,必须先设计好其架构,一个基本的架构思想是将软件分成不同的模块,问题的关键就是如何划分模块。oMVC(模型-视图-控制器)是20世纪80

36、年代为Smalltalk-80编程语言发明的一种软件设计模式,它是一种分离业务逻辑与显示界面的设计方法。oMVC的模型(Model)部分负责管理程序的业务数据,视图(View)部分负责显示界面,控制器(Controller)部分则负责与用户进行交互(接受请求和选择响应视图)。1/31/202354 MVC设计模式设计模式图1/31/202355JSP开发模式开发模式Model 1 1/31/202356JSP开发模式开发模式Model 21/31/202357用模式一实现用户登录功能用模式一实现用户登录功能效果效果 1/31/202358用模式一实现用户登录功能用模式一实现用户登录功能效果效果

37、 1/31/202359用模式一实现用户登录功能用模式一实现用户登录功能效果效果 1/31/202360用模式一实现用户登录功能用模式一实现用户登录功能架构架构 ologon.jsp为显示登录表单和处理登录请求的页面,登录成功后跳转到logonSuccess.jsp页面,登录失败时重新显示登录表单和失败的帮助信息,以便用户重新登录;如果已登录用户再次访问logon.jsp,login.jsp将请求转发给logonSuccess.jsp页面。1/31/202361用模式一实现用户登录功能用模式一实现用户登录功能架构架构 oLogonFormBean.java就是封装登录表单信息的JavaBean

38、程序,它可以对各个属性(也就是登录表单内的各个字段中所填写的数据)进行语法格式方面的校验。1/31/202362用模式一实现用户登录功能用模式一实现用户登录功能架构架构 oUserBean.java为代表用户信息的JavaBean程序,logon.jsp页面根据登录信息从DbUtil对象中检索出相应的UserBean对象,logonSuccess.jsp页面从UserBean对象中提取用户信息进行显示。1/31/202363用模式一实现用户登录功能用模式一实现用户登录功能架构架构 oDbUtil.java是用于访问数据库的辅助类,它相当于一个DAO(数据访问对象),这里用DbUtil类中封装的

39、一个HashTable对象来代替数据库,HashTable对象中的每一个元素即为一个UserBean对象。1/31/202364用模式一实现用户登录功能用模式一实现用户登录功能架构架构 ologonSuccess.jsp是用户登录成功后进入的页面,这里仅仅是显示出登录用户的信息和提供注销用户登录的功能;如果用户没有登录就直接访问logonSuccess.jsp页面,logonSuccess.jsp将请求转发给logon.jsp页面以要求用户登录。1/31/202365用模式一实现用户登录功能用模式一实现用户登录功能实践实践oUserBean中仅仅是定义了三个属性:name、password和e

40、mail。注意:要存储在Session域中或跨JVM传输的JavaBean应实现Serializable接口oDbUtil类是一个单件类,在整个Web应用程序中只能创建DbUtil类的一个实例对象,在DbUtil类内部预存储了两个用户信息来模拟数据库中的用户记录。oLogonFormBean对其中的每个属性进行基本的格式验证,如果有误则将相应的错误信息保存到一个HashTable对象中,同时也定义了供JSP页面检索错误信息的方法。动手体验:用动手体验:用JSP模式一实现用户登录功能模式一实现用户登录功能 1/31/202366用模式二实现用户注册功能用模式二实现用户注册功能架构架构 oregi

41、ster.jsp为显示用户注册表单的页面,它的注册请求提交给ControllerServlet程序处理。1/31/202367用模式二实现用户注册功能用模式二实现用户注册功能架构架构 oControllerServlet是作为控制器的Servlet程序,它负责处理注册用户信息的请求,注册成功后跳转到logonSuccess.jsp页面,注册失败时跳回到register.jsp页面重新显示注册表单和失败的帮助信息。1/31/202368用模式二实现用户注册功能用模式二实现用户注册功能架构架构 oRegisterFormBean.java是封装注册表单信息的JavaBean程序,Controlle

42、rServlet将注册表单信息绑定到RegisterFormBean对象上,然后调用RegisterFormBean对象的方法对各个属性(也就是注册表单内的各个字段中所填写的数据)进行语法格式方面的校验。1/31/202369用模式二实现用户注册功能用模式二实现用户注册功能架构架构 oUserBean.java为代表用户信息的JavaBean程序,ControllerServlet根据用户注册信息创建出一个UserBean对象后添加到DbUtil对象中,logonSuccess.jsp页面从UserBean对象中提取用户信息进行显示。1/31/202370用模式二实现用户注册功能用模式二实现用

43、户注册功能架构架构 oDbUtil.java是用于访问数据库的辅助类,它相当于一个DAO(数据访问对象),这里用DbUtil类中封装的一个HashTable对象来代替数据库,HashTable对象中的每一个元素即为一个UserBean对象。1/31/202371用模式二实现用户注册功能用模式二实现用户注册功能架构架构 ologonSuccess.jsp是用户登录成功后进入的页面,新注册成功的用户自动完成登录,直接进入logonSuccess.jsp页面。1/31/202372用模式二实现用户注册功能用模式二实现用户注册功能实践实践oControllerServlet程序的映射路径为/servlet/controller。o由于很可能出现一些无法添加新用户的情况,这些情况需要以异常的形式通知给调用程序,这个异常类被命名为DbUtilException。动手体验:用动手体验:用JSP模式二实现用户注册功能模式二实现用户注册功能多学两招:在多学两招:在MVC模式中应用模式中应用标签的标签的type属性属性 1/31/202373谢谢!1/31/202374

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com