《Servlet编程技术》PPT课件.ppt

上传人:za****8 文档编号:13190763 上传时间:2020-06-07 格式:PPT 页数:62 大小:1.99MB
返回 下载 相关 举报
《Servlet编程技术》PPT课件.ppt_第1页
第1页 / 共62页
《Servlet编程技术》PPT课件.ppt_第2页
第2页 / 共62页
《Servlet编程技术》PPT课件.ppt_第3页
第3页 / 共62页
点击查看更多>>
资源描述
第4章Servlet编程技术,4,内容提要,Servletse:vlit简介Servlet生命周期如何创建Servlet:新建方法、运行方法ServletAPI,什么是Servlet(1/3),Servlet例子publicclassSomeServletextendsHttpServlet/必须继承自HttpServlet/使用“request”读取和请求有关的信息(比如Cookies)和表单数据/使用“response”指定HTTP应答状态代码和应答头(比如指定内容类型,设置Cookie)publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException/使用out把应答内容发送到浏览器PrintWriterout=response.getWriter();out.println();out.Println(.);publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOExceptiondoGet(request,response);,什么是Servlet(2/3),生成的Servlet:FirstServ代码,什么是Servlet(3/3),运行Servlet,Servlet简介(1/6),Servlet是服务器端的Java小程序,用于响应客户机的请求。在默认情况下,Servlet采用一种无状态的请求-响应处理方式。Servlet代码的主要作用是为了增强Java服务器端功能。Servlet与Java类Servlet是一个标准的Java类;和一般Java类不同之处就在于Servlet可以处理HTTP请求;ServletAPI提供了大量的方法,它是用Java语言的ServletAPI来编写的特殊的Java类。,Servlet简介(2/6),需要Servlet容器把这些Java类的字节码文件(也称为二进制文件,.class文件)放到Servlet容器(比如:tomcat)的相应目录中时,它们就可以接受客户端响应了(在80,8080端口)。Servlet与JSPJSP是以另一种方式实现的Servlet,Servlet是JSP的早期版本;JSP更注重页面的表现,Servlet更注重业务逻辑的实现;JSP只能处理浏览器的请求,而Servlet则可以处理一个客户端的应用程序请求。,Servlet简介(3/6),Servlet技术规范定义了容器功能定义了Servlet接口,是容器与Servlet之间的契约程序员所写Servlet是一个Java类实现了Servlet接口在容器上运行请求的入口,实现业务系统功能获取用户输入参数完成业务功能生成输出(响应),Servlet简介(4/6),Servlet简介(5/6),基于容器/Servlet的请求与响应客户机将HTTP请求发送给Web服务器Web服务器将该请求转发给Servlet容器Servlet容器做很多事,将请求转发给ServletServlet处理该请求Servlet产生输出发送给容器Servlet容器将输出转为http响应发送给Web服务器Web服务器将http响应转发给客户机浏览器根据响应显示页面,Servlet简介(6/6),Servlet例子publicclassSomeServletextendsHttpServlet/必须继承自HttpServlet/使用“request”读取和请求有关的信息(比如Cookies)和表单数据/使用“response”指定HTTP应答状态代码和应答头(比如指定内容类型,设置Cookie)publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException/使用out把应答内容发送到浏览器PrintWriterout=response.getWriter();out.println();out.Println(.);publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOExceptiondoGet(request,response);,Servlet的生命周期(1/5),Servlet运行机制和Applet类似,Servlet是载服务器端运行的,但是Applet是在客户端运行的。Servlet是javax.servlet包中HttpServlet类的子类,由服务器完成该子类的创建和初始化。,Servlet的生命周期(2/5),Servlet的生命周期主要由3个过程组成。1、init()方法:服务器初始化Servlet。只在Servlet第一次被请求加载的时候被调用一次,完成必要的初始化工作。当有客户再请求Servlet服务时,Web服务器将启动一个新的线程,在该线程中,调用service方法相应客户的请求。该方法是HttpServlet的方法,可以在Servlet中重写这个方法。方法的描述为:,publicvoidinit(ServletConfigconfig)throwsServletException/初始化,Servlet的生命周期(3/5),Servlet的生命周期主要由3个过程组成。2、service()方法:初始化完毕,Servlet对象调用该方法相应客户的请求该方法是HttpServlet的方法,可以在Servlet中直接继承该方法或重写这个方法。方法的描述为:第一个参数是HttpServletRequest类型的对象,封装了用户的请求信息;第二个参数是HttpServletResponse类型的对象,用来响应用户的请求。和init()方法不同的是,service方法可能被多次调用,每次用户请求都导致service方法被调用执行,调用过程运行在不同的进程中,互不干扰。,publicvoidservice(HttpServletRequestrequest,HttpServletResponseresponse)throwServletException,IOException/处理请求,Servlet的生命周期(4/5),Servlet的生命周期主要由3个过程组成。3、destroy()方法:调用该方法消灭Servlet对象。该方法是HttpServlet的方法,可以在Servlet中直接继承该方法,一般不需要重写,方法的描述为:publicdestroy()当Servlet引擎终止服务时,比如关闭服务器等,destroy()方法会被执行,销毁Servlet对象。,Servlet的生命周期(5/5),容器管理Servlet依据Web.xml接口Servlet(init()destroy()service()管理创建Servlet对象,时机:容器启动时,且配置了:1第一次使用的时候调用doGetdoPostdestroy()方法,关闭容器时,长时间不使用,创建Servlet(1/5),首先创建一个Eclipse的DynamicWebProject工程,然后右击工程中的src目录,新建一个Servlet文件。,创建Servlet(2/5),工程目录组织图,创建Servlet(3/5),生成的Servlet:FirstServ代码,创建Servlet(4/5),Web.xml,创建Servlet(5/5),运行Servlet,ServletAPI(1/41),ServletAPI包含两个包:javax.servlet和javax.servlet.http包javax.servlet包中定义的类和接口是独立于协议的;javax.servlet.http中包含了具体于HTTP协议的类和接口。javax.servlet.http包中的某些类或接口继承了某些javax.servlet包中的类或接口。,表3-1ServletAPI接口,ServletAPI图示,ServletAPI(4/41),Servlet接口是Web容器和Servlet之间的合约所有Servlet都应直接或间接实现这个接口该接口定义了容器管理Servlet生命周期的方法,/Servlet初始化publicvoidinit(ServletConfigconfig)throwsServletException/响应请求,给予服务publicvoidservice(ServletRequestreq,ServletResponseres)throwsServletException,java.io.IOException/销毁类publicvoiddestroy()/获得Servlet实例本身的配置信息publicServletConfiggetServletConfig()/获得Servlet实例本身的描述信息publicjava.lang.StringgetServletInfo(),ServletAPI(5/41),GenericServlet抽象类,提供servlet接口的基本实现publicabstractclassGenericServletimplementsServlet,ServletConfig,java.io.Serializable,/Servlet初始化publicinit()/日志publicvoidlog(String)publicvoidlog(String,Throwable)/响应请求,给予服务publicabstractvoidservice(ServletRequestreq,ServletResponseres)throwsServletException,java.io.IOExceptionpublicServletConfiggetServletConfig();publicServletContextgetServletContext();,ServletAPI(6/41),HttpServlet类特定于HTTP的Servlet接口实现对于每种类型的HTTP请求方法,HttpServlet类提供相应的doXxx()方法,由service方法相应调用一般只要把具体逻辑放在doPost和doGet方法的任一个中,然后在另一个方法里调用这个方法就可以了。程序员重写doXxx()方法,一般不重写service方法,ServletConfig(1/2),Servlet配置信息:ServletConfig功能:获取在web.xml中该Servlet的配置信息容器在Servlet的初始化过程中将创建ServletConfig对象,并传递给Servlet,/得到Servlet的命名参数publicStringgetInitParameter(String);/得到Servlet的全套初始化参数EnumerationgetInitParameterNames();/得到Servlet所属的webapp的ServletContext对象publicServletContextgetServletContext();/管理配置web.xml文件或者从Servlet的类名称中得到Servlet的名称publicjava.lang.StringgetServletName();,ServletConfig示例(2/2),importjavax.servlet.ServletConfig;快捷键:Ctrl+Shift+O,ServletContext(1/2),功能:获取与该工程相关的上下文环境配置,ServletContext示例(2/2),HttpServletRequest类(1/5),该类是客户端http请求信息的抽象与封装请求头相关信息用户相关数据信息请求资源提交的数据其它获得session对象:request.getSession()-HttpSession获得请求分派对象:RequestDispatcherrequest作用域request.setCharacterEncoding(”gb2312”);,HttpServletRequest类(2/5),获得http请求头相关信息getHeader(String):获得给定名的头信息getHeaderNames:获得请求所包含的所有头名getMethod():获得请求的方法getCookies():获得cookie信息,示例(显示当前所有请求的头名及头信息):EnumerationheaderNames=request.getHeaderNames();while(headerNames.hasMoreElements()StringheaderName=(String)headerNames.nextElement();out.println(headerName+=);out.println(request.getHeader(headerName);out.println();,HttpServletRequest类(3/5),获得用户相关数据信息:,示例:http:/localhost:8080/demo/login.jsp?name=tom/demo/login.jsprequest.getRequesURI()http:/localhost:8080/demo/login.jsprequest.getRequestURL()name=tom/获得名为”name”的参数值request.getParameterValues(“name”);/获得同名name的一组参数值,返回类型是String,姓名:受好:听音乐看电影玩游戏上网聊天在loginAction中:request.getParameter(“name”);/获得用户输入的姓名request.getParameterValues(“favor”);/获得用户选择的所有受好,HttpServletRequest类(5/5),获得用户提交数据,其它相关方法getParameterMap()-MapgetParameterNames()-Enumeration获得body中的数据getReader()-BufferReader,作为字符数据getInputStream-ServletInputStream,作为二进制数据获得请求分派对象rquest.getRequestDispatcher(String)-RequestDispatcher,HttpServletResponse(1/8),通过HttpServletResponse设定Http响应设置响应状态设置响应头响应文本首先设置响应头response.setContentType(text/html;charset=GBK);获得输出对象文本:PrintWriterout=response.getWriter();二进制:ServletOutputStreamout=response.getOutPutStream()构造输出内容:out.println(“”)提交输出:out.flush()关闭out.close(),HttpServletResponse(2/8),构造响应示例,在doGet(doPost)方法中:response.setContentType(“text/html;charset=GBK”);/1设置响应头PrintWriterout=response.getWriter();/2.获得输出对象out.println(“”);/3.构造输出out.println(AServlet);out.println();out.print(HelloWorld!);out.println(,欢迎你);out.println();out.println();out.flush();/4.向容器提交输出out.close();/5.关闭输出流,HttpServletResponse(3/8),Http状态码:用于服务器将请求的状态传送给客户机100-199:临时状态码200-299:请求成功300-399:重定向400-499:客户端错误500-599:服务器端错误设置状态码的方法:setStatus(intsc)HttpServletResponse中静态变量定义Http状态码:SC_OK200SC_MOVED_TEMPORARILY302SC_NOT_FOUND404SC_INTERNAL_SERVER_ERROR500,HttpServletResponse(4/8),设置状态码response.setStatus(int.String)发送错误消息response.sendError(int,String)response.sendError(HttpServletResponse.SC_NOT_FOUND,”你所要查找的网页不存在!”),HttpServletResponse(5/8),设置响应头:setHeader(“name”,value);常见响应报头Content-Type:定义响应文档的MIME(MultipurposeInternetMailExtension)类型,由maintype/subtype组成有专门的方法设置该响应头:setContentType,response.setContentType(“text/html;charset=GBK”);/最常见形式response.setContenType(“application/vnd.ms-excel”);/excel文档response.setHeader(Content-Type,application/vnd.ms-excel;charset=GBK);response.setContenType(“image/jpeg”);/图形图像,HttpServletResponse(6/8),使用servlet生成jpeg图像关键代码,response.setContentType(“image/jpeg”);/1.设定响应的文档是图像/生成JPEG图像intwidth=60,height=20;BufferedImageimage=newBufferedImage(width,height,BufferedImage.TYPE_INT_RGB);/2.创建BufferedImage对象Graphicsg=image.getGraphics();/3.获得图形对象/4.使用g上的相关方法生成图形/5.输出图象到页面ImageIO.write(image,JPEG,response.getOutputStream();,HttpServletResponse(7/8),重定向方法一:设置状态码,如302设置响应头:location方法二:sendRedirect示例,response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);response.setHeader(Location,);response.sendRedirect();,HttpServletResponse(8/8),告诉浏览器不要缓存页面,response.setHeader(“Cache-control”,”no-cache”);response.setHeader(“pragma”,”no-cache”);,页面定时重新刷新,response.setIntHeader(“Refresh”,10);response.setHeader(“Refresh”,”10,url=”);,RequestDispatcher(1/3),RequestDispatcher接口两种方式获得RequestDispatcher对象,include(ServletRequest,ServletResponse)forward(ServletRequest,ServletResponse),RequestDispatcherdispatcher=request.getRequestDispatcher(URL);RequestDispatcherdispacher=getServletConfig().getServletContext().getRequestDispatcher(URL);,RequestDispatcher(2/3),include示例,在ServletA中包含HeaderServlet与FooterServlet,在ServletA的doGet(doPost)方法中:ServletContextcontext=getServletContext();RequestDispatcherrd=context.getRequestDispatcher(/servlet/HeaderServlet);/包含头部rd.include(request,response);out.println(“inservletA”);/包含尾部RequestDispatcherrd1=context.getRequestDispatcher(/servlet/FooterServlet);rd1.include(request,response);,RequestDispatcher(3/3),forward示例:在ServletAction中根据处理结果将请求转发至成功页面或失败页面,在ServletAction的doGet(doPost)方法中:ServletContextcontext=getServletContext();RequestDispatcherrd=null;/进行处理If(ok)rd=context.getRequestDispatcher(/success.jsp);elserd=context.getRequestDispatcher(/fail.jsp);rd.forward(request,response);,会话HttpSession(1/8),HTTP协议特点:无状态协议每个客户端请求,对服务器而言都是新的服务器不记住客户端的任何信息这样的协议适用于在web上快速获取信息,同时,HTTP协议不支持维护客户机状态在线购物特点:服务器应能识别出每个客户的不同的购物车会话:会话是在指定阶段来自同一客户的一系列的HTTP请求会话跟踪:将一个请求与会话关联的过程会话管理:对容器要求识别来自同一客户的请求维护每个客户的状态,会话HttpSession(2/8),会话应用交互式应用程序在线购物Web应用程序的个性化个性化是指应用程序能区别对待不同的客户,会话HttpSession(3/8),一般原理会话唯一标识:sessionID常用技术Cookie隐藏表单域url重写http:/localhost:8080/myapp/ServletA?sessionID=.使用session进行会话管理,会话HttpSession(4/8),通过request对象获取Session对象,HttpSessionsession=request.getSession();容器:1、Servlet通知容器,它需要Session对象;2、容器创建sessionID,它是客户这次会话的唯一标识;3、容器创建HttpSession对象,Servlet获得这个对象,会话HttpSession(5/8),会话超时阶段来自参与会话的客户机的两个连续请求之间的最长允许空闲时间称为会话超时阶段,10session.setMaxInactiveInterval(10);,会话HttpSession(6/8),会话HttpSession(7/8),Session接口,setAttribute(String,Object)getAttribute(String)getID();getMaxInactiveInterval()setMaxInactiveInterval(int)isNew()invalidate()getAttributeNames()-EnumerationremoveAttribute(Stringname),会话HttpSession(8/8),Session示例:登录,/在LoginAction中:/根据用户名与密码,查找用户是否合法if(合法)Useruser=;HttpSessionsession=request.getSession();session.setAttribute(user,user);else/让用户重新登录/在index中HttpSessionsession=request.getSession();Useruser=(User)session.getAttribute(user);if(user!=null)/用户已登录成功/转向显示用户信息页面else/转向用户登录页面,过滤器Filter(1/7),Filtering的基本思想:将jsp,servlet,html看作资源,容器用来处理这些资源,并为资源提供服务因此,可以在处理这些资源之前或之后,通过过滤器增加一些通用功能;比如:拦截请求头:安全认证,日志数据转换:加密,解密抢占特殊资源的服务:缓存而且这些过滤器可以形成一个链,过滤器Filter(2/7),将jsp,servlet,html看作资源,过滤器Filter(3/7),Filtering构成处理链,过滤器Filter(4/7),接口:javax.servlet.Filter接口:javax.servlet.FilterChain接口:javax.servlet.FilterConfig,publicvoidinit(FilterConfigconfig)throwsServletExceptionpublicvoiddoFilter(ServletRequestreq,ServletResponseres,FilterChainchain)throwsIOException,ServletExceptionpublicvoiddestroy(),publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse)throwsjava.io.IOException,ServletException,publicjava.lang.StringgetFilterName()publicServletContextgetServletContext()publicjava.lang.StringgetInitParameter(java.lang.Stringname)publicjava.util.EnumerationgetInitParameterNames(),过滤器Filter(5/7),创建filter第一步:创建一个类,实现javax.servlet.Filter接口第二步:配置web.xml文件,charencodeservlet.CharEncodingFiltercharencode/*/Filter映射:要处理哪类资源,过滤器Filter(6/7),过滤器Filter(7/7),URL模式,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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