servlet-day3-ppt.ppt_第1页
servlet-day3-ppt.ppt_第2页
servlet-day3-ppt.ppt_第3页
servlet-day3-ppt.ppt_第4页
servlet-day3-ppt.ppt_第5页
已阅读5页,还剩94页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Servlet技术,Java EE 技术架构,Day 1 大纲,Web编程模型 Http协议 Get请求和Post请求 Servlet概述 Web服务器 Servlet的配置文件 Servlet的调用过程 Servlet的接口 Web容器概述 Web容器实现,B/S编程模型,B/S编程模型 Browser(客户端) 代理客户端发送http请求 接收服务器端响应 显示html文本 客户端-服务器端通信协议:http 服务器(Server)端 处理客户端的请求 发回http响应,HTTP协议,简介 HTTP: HyperText Transfer Protocol,超文本传输协议,在RFC2616

2、中定义 是Web应用程序的基础, 是应用层协议,基于tcp/IP 版本:HTTP1.1 Http的缺省端口是80 Http特点是:无状态、无连接,HTTP协议,1. 连接到服务器,3. 发送响应,4. 关闭连接,Web 服务器,客户机,2. 发送请求,HTTP 通信的四个阶段,HTTP 举例,URL(Uniform Resource Locator,统一资源定位符):协议名+DNS名+请求的文件名 /home/index.html 浏览器向DNS服务器询问 的IP地址 DNS的回复是63 浏览器与156.106.

3、192.163上的80端口建立一个TCP连接 浏览器发送一个请求,要求获取文件/home/index.html 服务器发送文件/home/index.html(服务器的响应) TCP连接被释放 浏览器显示/home/index.html中所有的文本 浏览器取回并显示该文件中的所有图片,Http请求,浏览器代理用户发出Http请求 地址栏: 表单提交,Http请求,表单提交http请求示例:,请登录 用户名 密 相当于: http:/localhost:8080/myapp/loginValidator.jsp?UserName=tom import javax.servl

4、et.*; import javax.servlet.http.*; public class HelloWorldServlet extends HttpServlet public void doGet (HttpServletRequest req, HttpServletResponse res) res.setContentType(text/html); try PrintWriter out = res.getWriter(); out.println(); out.println(Hello World); out.println(); out.println(Hello Wo

5、rld); out.println(); out.close(); catch(IOException ioe) getServletContext().log (ioe,Error in HelloWorld); public void doPost(HttpServletRequest req, HttpServletResponse res) doGet(req, res); ,上例HelloWorldServlet继承HttpServlet HttpServlet实现了java.servlet.GenericServlet接口 HttpServlet 类是专门用于处理基于Http协议的

6、Servlet Servlet还可以处理Http以外的其他类型的请求,HttpServlet,Servlet的配置文件,Web.xml是web应用的部署描述文件, ,Servlet的配置,Servlet类在web.xml中的配置 容器通过这个配置获取Servlet的信息,从而管理Servlet对象,示例: WelcomeServlet WelcomeServlet helloWordServlet servlet.HelloWorldServlet helloWordServlet /WelcomeServlet 注意请求url与间的关系: http:/localhost:8080/myapp

7、/WelcomeServlet,Servlet的调用,在JSP页面的表单中,通过调用Servlet:,请登录 用户名 密 相当于: http:/localhost:8080/myapp/WelcomeServlet?UserName=tom public ServletContext getServletContext();,HttpServlet 类,特定于 HTTP 的 Servlet 接口实现 对于每种类型的 HTTP 请求方法,HttpServlet 类提供相应的 doXxx()方法 service方法中调用相应的doXxx()方法 程序员重写doXxx()方法 一般不重写servic

8、e方法,HttpServletRequest,该类是客户端http请求信息的抽象与封装 请求头相关信息 用户相关数据信息 请求资源 提交的数据 其它 获得session对象:request.getSession()-HttpSession 获得请求分派对象 request作用域 request. setCharacterEncoding(“gb2312”);,HttpServletRequest,获得用户相关数据信息:,示例: http:/localhost:8080/demo/login.jsp?name=tom /demo/login.jsp request.getRequesURI()

9、http:/localhost:8080/demo/login.jsp request.getRequestURL() name=tom/获得名为”name”的参数值 request.getParameterValues(“name”);/获得同名name的一组参数值,返回类型是String,HttpServletRequest,获得用户提交数据, 姓名: 受好:听音乐 看电影 玩游戏 上网聊天 在loginAction中: request.getParameter(“name”);/获得用户输入的姓名 request.getParameterValues(“favor”);/获得用户选择的所

10、有受好,HttpServletResponse,通过HttpServletResponse设定Http响应 设置响应状态 设置响应头 响应文本 首先设置响应头 response.setContentType(text/html; charset=GBK); 获得输出对象 文本:PrintWriter out = response.getWriter(); 二进制:ServletOutputStream out = response.getOutPutStream() 构造输出内容:out.println(“”) 提交输出: out.flush() 关闭out,HttpServletRespon

11、se,构造响应示例,在doGet(doPost)方法中: response.setContentType(“text/html; charset=GBK ”);/1设置响应头 PrintWriter out = response.getWriter();/2.获得输出对象 out.println(“”);/3.构造输出 out.println( A Servlet); out.println( ); out.print( Hello World! ); out.println(, 欢迎你); out.println( ); out.println(); out.flush();/4.向容器提交

12、输出 out.close();/5.关闭输出流,HttpServletResponse,Http状态码:用于服务器将请求的状态传送给客户机 100-199: 临时状态码 200-299: 请求成功 300-399:重定向 400-499:客户端错误 500-599:服务器端错误 设置状态码的方法: setStatus(int sc) HttpServletResponse中静态变量定义Http状态码: SC_OK 200 SC_MOVED_TEMPORARILY 302 SC_NOT_FOUND 404 SC_INTERNAL_SERVER_ERROR 500,HttpServletRespo

13、nse,设置状态码 response.setStatus(int sc) 发送错误消息 response.sendError(int,String) 例 response.sendError(HttpServletResponse.SC_NOT_FOUND,”你所要查找的网页不存在!”),HttpServletResponse,设置响应头:setHeader(“name”,value); 常见响应报头 Content-Type:定义响应文档的MIME(Multipurpose Internet Mail Extension)类型,由maintype/subtype组成 有专门的方法设置该响应头

14、:setContentType 示例:(p142),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,使用servlet生成jpeg图像关键代

15、码,response.setContentType(“image/jpeg”);/1.设定响应的文档是图像 /生成JPEG图像 int width=60, height=20; BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);/2.创建BufferedImage对象 Graphics g = image.getGraphics();/3.获得图形对象 /4.使用g上的相关方法生成图形 / /5.输出图象到页面 ImageIO.write(image, JPEG, respons

16、e.getOutputStream();,HttpServletResponse,重定向 方法一: 设置状态码,如302 设置响应头:location 方法二: sendRedirect 示例,response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY); response.setHeader(Location,); response.sendRedirect();,HttpServletResponse,告诉浏览器不要缓存页面,response.setHeader(“Cache-control”,”no-cache”); respo

17、nse.setHeader(“pragma”,”no-cache”);,HttpServletResponse,页面重新刷新,response.setIntHeader(“Refresh”,10); response.setHeader(“Refresh”,” 10 ,url=”);,Web容器是Web程序运行的环境,一般由具体的服务器程序实现具体的功能 Web容器功能: 生成并管理相关对象,供Servlet使用 管理 Servlet 生命周期,提供Servlet的运行环境 充当 Web 服务器和 Servlet 之间的桥梁 将请求从 Web 服务器转发到 Servlet 将响应从 Servl

18、et 转发到 Web 服务器,Web 容器概述,IBM 的 Web Sphere Application Server BEA 的 Web Logic Sun Microsystems 的 iPlanet Application Server Sun 的 J2EE Reference Implementation Jakarta TomCat Server Jboss,Web 容器实现,Servlet基础小结,Servlet基础小结 Web.xml:部署描述文件 配置web应用,如描述了Servlet配置 容器通过它获得应用程序的配置信息 容器 管理servlet对象 调用servlet对象上

19、的方法 Servlet 必须实现Servlet接口 在doGet/doPost方法中 通过HttpServletRequest获取用户请求信息 完成业务功能 通过HttpServletResponse作出响应,Day 2 大纲,Servlet生命周期 ServletRequest ServletContext ServletConfig Servlet的资源访问概述 requestDispacher详解 sendRedirect详解,Servlet生命周期,容器管理Servlet 依据 web.xml 接口Servlet中三个方法 init() 、 service() 、 destroy()

20、管理 1、加载和实例化 容器启动时,且配置了: 1 容器接收到客户端请求 2、初始化 容器调用该 Servlet 对象的 init() 3、请求处理 容器调用 service() 方法 4、服务终止, 容器调用 destroy()方法,Servlet生命周期,Servlet生命周期,测试:容器启动时创建了Servlet对象(HelloWorld.java), HelloWorld servlet.HelloWorld username sa password sa 1 public void init() throws ServletException System.out.println(h

21、elloWorld Servlet init!); ,ServletRequest,ServletRequest接口定义了一个对象,该对象用于为Servlet提供客户端请求信息 Servlet容器创建一个ServletRequest对象,并将其作为参数传递给Servlet的service()方法 扩展ServletRequest的接口能够提供附加的协议相关的数据,例如,HttpServletRequest对象提供HTTP数据,ServletContext,ServletContext接口定义了一个Servlet环境对象,提供了访问Web程序背景信息 Servlet容器在启动时加载Web应用,并

22、为每个Web应用创建唯一的一个ServletContext对象,可以把该对象看做一个Web应用程序,在服务器端的共享内存 Servlet对象只在Web应用被关闭的时候才销毁,不同Web应用,ServletContext各自独立存在 在Servlet中,我们可以通过以下代码得到具体的对象,等价于 JSP 中的 application 隐式对象 ServletContext application = this.getServletContext();,ServletContext,ServletContext对象能够访问Web项目的 1、初始化参数 2、存储在ServletContext中的对象

23、 3、Web项目中的资源文件 4、日志 总结: ServletContext即Servlet容器,提供的方法可以再同一个Web应用下的所有Servlet中使用,ServletConfig,ServletConfig接口提供了让一个Servlet访问Web应用中配置信息的方法 一个ServletConfig对象只能在一个Servlet中使用 可以使用下面方法读取一个Servlet在web.xml中的初始化参数 config.getInitParameter(paramName);,Servlet的资源访问,Servlet配置信息 配置信息在web.xml中完成 配置信息抽象为接口ServletC

24、onfig 容器在 Servlet 的初始化过程中将创建 ServletConfig 对象,并传递给 Servlet,ServletConfig接口: public String getInitParameter(String); Enumeration getInitParameterNames(); public ServletContext getServletContext(); public java.lang.String getServletName();,Servlet配置信息,在程序中使用ServletConfig对象 获得ServletConfig对象:一般在init方法中

25、获取,并将之作为一个成员变量 获得Servlet初始化参数,public void init() throws ServletException / Put your code here ServletConfig sc = this.getServletConfig(); 在doGet方法或doPost方法中: String username = sc.getInitParameter(username); String password = sc.getInitParameter(password);,RequestDispatcher详解,RequestDispatcher接口,incl

26、ude(ServletRequest,ServletResponse) forward(ServletRequest,ServletResponse),RequestDispatcher,include示例,在ServletA中包含HeaderServlet与FooterServlet,在ServletA的doGet(doPost)方法中: ServletContext context = getServletContext(); RequestDispatcher rd = context. getRequestDispatcher(/servlet/HeaderServlet); /包含头

27、部 rd.include(request,response); out.println(“in servletA”); /包含尾部 RequestDispatcher rd1 = context. getRequestDispatcher(/servlet/FooterServlet); rd1.include(request,response);,RequestDispatcher,forward示例:在ServletAction中根据处理结果将请求转发至成功页面或失败页面,在ServletAction的doGet(doPost)方法中: ServletContext context = g

28、etServletContext(); RequestDispatcher rd = null; /进行处理 If(ok) rd = context. getRequestDispatcher(/success.jsp); else rd = context. getRequestDispatcher(/fail.jsp); rd.forward(request,response);,Day 3 大纲,Cookie概述 Cookie使用的三个步骤 Cookie的机制 Cookie的安全问题 Session概述 Session使用的四个步骤 Session跟踪机制 Session与Cookie的

29、对比,Cookie概述,cookie 是 Web 服务器发送给客户机的一段文本信息,它存储在客户机的硬盘上,对于发送给同一服务器的后续请求,由客户机返回 服务器通过cookie的响应头将cookie发送给客户机,其形式为名称=值 客户机则以文件的形式将cookie存放在本地硬盘上,具体存储位置与浏览器相关,HTTP/1.1 200OK Set-Cookie:CustomerID=1234;domain=;path=/sales Expires=True,29-Apr-2009 07:42:12 GMT,Cookie使用的三个步骤,使用Cookie 创建cookie对象,并设置存活时间: Coo

30、kie cooker = new Cookie(“color”,”red”); Cooker.setMaxAge(30*60); 在响应中加入cookie: response.addCookie(cooker); 通过request取回cookie Cookie cookie = request.getCookies();,Cookie示例,Cookie使用示例:,示例:记录用户访问次数 Cookie c = request.getCookies(); int count = 1; if(c!=null) for(int i=0;ic.length;i+) Cookie accountCook

31、ie = ci; if(accountCookie.getName().equals(accountCount) count = Integer.parseInt(accountCookie.getValue()+1; break; response.addCookie(new Cookie(accountCount,String.valueOf(count);,Cookie的机制,Cookie是在Servlet代码中手动创建,并在响应对象中发送给浏览器 浏览器会将Cookie的key/value保持在某目录下的文本文件内,下次请求同一个页面的时候,就发送该Cookie给服务器。 Cookie

32、包含在请求和响应对象的头信息中,Cookie的安全问题,有人认为Cookie是不安全的,理由如下: 识别不准确 用户登陆信息保存在本机的文本文件中,会暴露用户隐私信息(如用户名、计算机名、浏览器、曾经访问的网站等) 用户可以通过浏览器中设置,禁用Cookie,使在后台Servlet中的Cookie相关的代码失效,Session概述,HTTP 协议特点:无状态协议 每个客户端请求,对服务器而言都是新的 服务器不记住客户端的任何信息 这样的协议适用于在web上快速获取信息,同时,HTTP协议不支持维护客户机状态 在线购物特点:服务器应能识别出每个客户的不同的购物车 会话: 会话是在指定阶段来自同一

33、客户的一系列的HTTP请求 会话跟踪:将一个请求与会话关联的过程 会话管理:对容器要求 识别来自同一客户的请求 维护每个客户的状态,一般原理 会话唯一标识:sessionID 常用技术 Cookie 隐藏表单域 url重写 http:/localhost:8080/myapp/ServletA?sessionID=. 使用session进行会话管理,会话管理技术,Session使用的四个步骤,获得 获取属性 设置属性 销毁,获得Session对象,通过request对象获取Session对象,HttpSession session = request.getSession(); 容器: 1、S

34、ervlet通知容器,它需要Session对象; 2、容器创建sessionID,它是客户这次会话的唯一标识; 3、容器创建HttpSession对象,Servlet获得这个对象,Session跟踪机制,通过request对象获取Session对象,HttpSession session = request.getSession(); 容器: 1、Servlet通知容器,它需要Session对象; 2、容器创建sessionID,它是客户这次会话的唯一标识; 3、容器创建HttpSession对象,Servlet获得这个对象,会话超时阶段,定义:来自参与会话的客户机的两个连续请求之间的最长允许

35、空闲时间称为会话超时阶段, 10 session.setMaxInactiveInterval(10);,HttpSession 接口,Session接口,setAttribute(String, Object)/往session中保存数据 getAttribute(String) /得到保存在session 中的数据 getID(); /得到 Session id getMaxInactiveInterval() /得到 session 对象有效时间 setMaxInactiveInterval(int) /设置 session 对象有效时间 isNew() /判定一个 session 是否

36、是新的 session 对象 invalidate() /禁用session removeAttribute(String name) /删除保存在session中的数据,Session示例,登录 Index Servlet及LoginAction Servlet,/在LoginAction中: /根据用户名与密码,查找用户是否合法 if(合法) User user = ; HttpSession session = request.getSession(); session.setAttribute(“user”,user); else /让用户重新登录 /在index中 HttpSessi

37、on session = request.getSession(); User user = (User) session.getAttribute(“user”); if( user != null) /用户已登录成功 /转向显示用户信息页面 else /转向用户登录页面 ,Session与Cookie的对比,Session和Cookie都可以在可控的时间内,保存用户提交的数据 Cookie在客户端保存数据,不安全 Session在服务器端保存数据,不受客户端影响 在Cookie中保存的数据量有限,不超过4kb。Session没有限制 建议多使用 Session,总结,会话跟踪是Web处理的

38、重要组成 可以使用四种方法,分别是:Cookie、隐藏表单域、URL重写、Session跟踪 Cookie由于安全性不高,要慎重使用 Session在使用的时候,保存数据注意不要重名,取出数据,要注意类型转换,Day 4 大纲,过滤器(Filter)概述 Filter的基本思想 Filter的配置 Filter开发的步骤 监听器概述 ServletContext监听器详解 HttpSession监听器详解 ServletRequest监听器详解 监听器的作用 监听器的开发步骤,Filtering概述,Filtering是Servlet2.3以上版本的特性 主要内容: Filtering的基本思

39、想 Filtering API Filtering的实现,基本思想,Filtering的基本思想: 将jsp,servlet,html看作资源,容器用来处理这些资源,并为资源提供服务 因此,可以在处理这些资源之前或之后,通过过滤器增加一些通用功能;比如: 拦截请求头:安全认证,日志 数据转换:加密,解密 抢占特殊资源的服务:缓存 而且这些过滤器可以形成一个链,基本思想,将jsp,servlet,html看作资源,基本思想,Filtering构成处理链,filtering API,接口:javax.servlet.Filter 接口:javax.servlet.FilterChain 接口:ja

40、vax.servlet.FilterConfig,filtering API,Filter接口,public void init(FilterConfig config)throws ServletException public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException public void destroy(),filtering API,FilterChain接口,public void doFilter(Se

41、rvletRequest request, ServletResponse response) throws java.io.IOException, ServletException,FilterConfig,public java.lang.String getFilterName() public ServletContext getServletContext() public java.lang.String getInitParameter(java.lang.Stringname) public java.util.Enumeration getInitParameterName

42、s(),filtering API,创建filter 第一步:创建一个类,实现javax.servlet.Filter接口 第二步:配置web.xml文件,filtering API,Filtering配置,Web.xml中文件的配置 Filter定义:名字, Filter类 Filter映射:要处理哪类资源, charencode servlet.CharEncodingFilter charencode /* ,Filtering示例,CharEncodingFilter,public class CharEncodingFilter implements Filter private F

43、ilterConfig filterConfig; public void init(FilterConfig filterConfig) throws ServletException this.filterConfig = filterConfig; public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException,ServletException System.out.println(in filter); request.s

44、etCharacterEncoding(gb2312); response.setCharacterEncoding(gb2312); response.setLocale(Locale.SIMPLIFIED_CHINESE); filterChain.doFilter(request, response); System.out.println(in filter); public void destroy() this.filterConfig = null; ,Filtering示例,URL模式,Filtering工作时序图,client,HelloFilter,CharRespnseW

45、rapper,resources,1.get,2. New wrapper,3. doFilter,4. service,5. toString,6. html,事件模型,事件:java.util.EventObject getSource()-Object 事件侦听程序: (标志)接口:java.util.EventListener 实现listener接口 事件源: 注册侦听程序 触发事件侦听程序 生成事件对象 调用已注册的侦听程序,处理事件,HttpSessionListener,事件(类):HttpSessionEvent getSession 侦听器(接口):HttpSessionListener sessionCreated(HttpSessionEventse) sessionDestroyed(HttpSessionEventse),HttpSessionListener,示例 实现接口HttpSessionListener 注册侦听,在web

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论