Servlet-2.ppt_第1页
Servlet-2.ppt_第2页
Servlet-2.ppt_第3页
Servlet-2.ppt_第4页
Servlet-2.ppt_第5页
已阅读5页,还剩194页未读 继续免费阅读

下载本文档

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

文档简介

会话跟踪技术 上 课程内容 URL重写隐藏表单域 会话跟踪 会话跟踪是一种灵活 轻便的机制 它使Web上的状态编程变为可能 HTTP是一种无状态协议 每当用户发出请求时 服务器就会做出响应 客户端与服务器之间的联系是离散的 非连续的 当用户在同一网站的多个页面之间转换时 根本无法确定是否是同一个客户 会话跟踪技术就可以解决这个问题 当一个客户在多个页面间切换时 服务器会保存该用户的信息 有四种方法可以实现会话跟踪技术 URL重写隐藏表单域CookieSession URL重写 URL重写URL重写就是在客户端URL地址后加一串参数来标识会话 服务器就会根据这个标识和它存储的数据关联起来 例如 http localhost 8080 user jsp username admin在URL中以 作为标识符 后面紧跟参数名 username 然后给 username 赋值为 admin 百度 搜索引擎的URL重写 当我们在浏览器输入 时 点击回车按钮 我们看到百度的主页 如图所示 当我们在浏览器地址栏中输入 实现URL重写 URL重写在客户端浏览器不支持Cookie的情况下使用的它是客户端浏览器请求服务器时 URL地址后面加上类似于 SESSIONID 形式的参数 服务器端通过获取SESSIONID关键字来获取会话值 当然这个SESSIONID参数不是服务器端添加的 而是需要手动来实现 在程序第一次访问服务器端时 服务端并不能确认客户端浏览器是否支持Cookie 因此 当服务器第一次发出请求时 服务端会默认采用URL重写 也就是将SESSIONID写到URL地址中传递 核心代码 StringSessionId request getRequestedSessionId 当客户端发送请求后 服务器会根据提交给客户端浏览器的信息自动检查客户端是否启用了Cookie 如果启用 将不再进行URL重写 如果没有 则继续使用URL重写 通过response对象的encodeURL Stringurl 方法可以进行URL重写 encodeURL publicStringencodeURL Stringurl 对包含SessionID的URL进行编码 如果不需要编码 就直接返回这个URL Servlet引擎必须提供URL编码方法 因为在有些情况下 我们将不得不重写URL 例如 在响应对应的请求中包含一个有效的Session 但是这个Session不能被非URL的 例如Cookie 的手段来维持 所有提供给Servlet的URL都应通过这个方法运行 这样才能确保会话跟踪能够在所有浏览器中正常运行 encodeRedirectURL publicStringencodeRedirectURL Stringurl 对sendRedirect 方法使用的指定URL进行编码 如果不需要编码 就直接返回这个URL 之所以提供这个附加的编码方法 是因为在请求转发的情况下 决定是否对URL进行编码的规则和一般情况有所不同 所给的URL必须是一个绝对URL 相对URL不能被接收 会抛出一个IllegalArgumentException异常 所有提供给sendRedirect 方法的URL都应通过这个方法运行 这样才能确保会话跟踪能够在所有浏览器中正常运行 示例 下面我们结合这两种方法 做一个URL重写的例子 主要实现从一个JSP页面提交数据给Servlet Servlet接收到参数后经过URL重写并重新定位到以前的JSP页面 此时JSP接收到Servlet返回的参数并打印出来 first jsp代码如下 实现URL重写 FirstServlet java的关键代码 publicvoiddoGet HttpServletRequestrequest HttpServletResponseresponse throwsServletException IOException request setCharacterEncoding gb2312 response setContentType text html charset GBK PrintWriterout response getWriter 获得请求的URLStringurl request getHeader referer 在经过第一次请求后仍取得最初的URLif url indexOf 1 url url substring 0 url indexOf 获得提交的参数Stringtest request getParameter test 对URL进行编码并对URL进行重写Stringurl1 response encodeURL url test test 对sendRedirect 方法使用的指定URL进行编码Stringurl2 response encodeRedirectURL url1 重新定向提交请求的页面response sendRedirect url2 out close 程序编译通过后 启动服务器 在浏览器地址栏中输入JSP页面的地址 http localhost 8080 Web first jsp 点击回车按钮 在文本框中输入文本内容 如图11 7所示 点击 OK 按钮 数据提交到Servlet处理后 重新返回到JSP页面 并将自己提交的参数打印出来 注意 此时URL变为 http localhost 8080 Web first jsp test URL重写实例 如图所示 在进行URL重写操作时 URL后面可以同时跟随多个参数 但不同参数之间使用 运行more jsp页面 点击 下一个页面 链接时 链接到next jsp页面 在more jsp中 给next jsp传递了 userid username 和 password 三个参数 然后在next jsp中使用request getParameter Stringname 方法分别接收三个参数 但是这个链接受到URL长度的限制 一般浏览器URL长度限制最大为2KB 利用URL重写进行会话跟踪时 有它的优点和缺点 优点 Cookie被禁用或者根本不支持的情况下依旧能够工作 缺点 必须对所有指向你的URL重新进行编码 所有页面必须动态生成 不能对预先记录下来的URL进行访问 或者从其它网站链接进行访问 隐藏表单域 隐藏表单域首先我们来了解什么是隐藏表单域 隐藏域 以下都简称隐藏域 是用来收集或发送信息的不可见表单控件 在客户端浏览器中 用户是看不见隐藏域的 隐藏域须配合表单使用 使用方法和文本框控件没什么大的区别 当表单被提交时 隐藏域就会将信息以用户设置的名称和值发送到服务器上 服务器可以通过request getParameter Stringname 方法接收隐藏域的信息 隐藏域的格式如下 其中type hidden 定义为隐藏域 name属性定义隐藏域的名称 value属性定义隐藏域的值 在表单中 和其它控件一样 理论上是不限制隐藏域的数量的 但是隐藏域中的信息是要传给服务器的 如果隐藏域过多的话 势必会增加服务器和网络的负荷 所以合理的利用隐藏域 才能最大限度的发挥隐藏域的功能 使用隐藏表单域 隐藏域和URL重写有着共同的优点 就是它们在Cookie被禁用或者根本不支持的情况下依旧能够工作 也有它的缺点 就是所有页面必须是表单提交之后的结果 还有涉及许多冗长的处理工作 下面我们做一个最简单的隐藏域应用的实例 首先编写一个JSP页面 在JSP页面中插入一个隐藏域 并赋值为 清华IT Hide jsp代码如下 hide使用隐藏域 publicvoiddoGet HttpServletRequestrequest HttpServletResponseresponse throwsServletException IOException request setCharacterEncoding gb2312 response setContentType text html charset GBK 获得隐藏域信息Stringinfo request getParameter hid PrintWriterout response getWriter out println 接收隐藏域的信息 out println info out close publicvoiddoPost HttpServletRequestrequest HttpServletResponseresponse throwsServletException IOException doGet request response 接着在Servlet程序中接收隐藏域的信息 并打印出来 程序编译通过后 开始执行程序 我们可以看到 在JSP页面中 除了看到按钮控件外 是看不到隐藏域的 如图所示 点击 提交信息 按钮 进入Servlet处理页面 程序运行效果如图所示 动手实践 BBS系统 Servlet实现BBS 简单的聊天室 目标编写一个登录页面和一个框架页面 包含主页面 显示页面和发言页面 登录页面实现用户登录功能 框架页面实现聊天功能 程序的运行过程如下所示 1 登录聊天室 在用户名文本框中输入用户名 如 小刚 效果如图所示 2 名称输入完成后 点击 登录 按钮进入聊天室 如图所示 3 用户登录后 就可以进行聊天了 在 你要说的话 文本框中输入聊天的内容 点击 提交 按钮 就会在显示页面中看到聊天的内容了 如图所示 1 登录页面 login jsp代码如下 请输入用户名 2 聊天室的页面 我们用一个框架实现 总体框架index jsp代码如下 name mainFrame id mainFrame name bottomFrame scrolling No noresize noresize id bottomFrame 在这个总体框架中 用到了URL重写技术 如 src main jsp username 3 使用隐藏域 3 在发言页面中 用到隐藏域来保存用户名 down jsp关键代码如下 name username 你要说的话 4 显示发言的页面 4 最后 在显示发言的页面 需要用到application来实现不同用户间的数据共享 main jsp的代码如下 一个简单的聊天室 Stringgetinfo String application getAttribute info if getinfo null out println getinfo application setAttribute info getinfo info 会话跟踪技术 下 课程内容 Cookie会话跟踪技术Session会话跟踪技术 Cookie Cookie有时也用其复数形式Cookies 它是HTTP协议下的一种方法 通过该方法 服务器或脚本能够在客户端上维护状态信息 Cookie作为会话跟踪技术 主要用于以下两种用途 记录网站访问者的信息在页面中传递参数 记录网站访问者的信息 在某些网站使用用户名和密码验证登录的时 当点击 登录 按钮后 通常会弹出一个对话框 提示你是否保存用户名 其实 这就是Cookie的一个用法 对话框如图所示 点击 是 Y 按钮后 系统就会将登录信息经过加密储存到本地电脑的硬盘中 当下次再次浏览该网站时 将不再需要输入登录信息 就能登录到该网站 存放位置 在使用WindowsNT 2000 XP的操作系统中 Cookies文件的存放路径为C DocumentsandSettings 用户名 Cookies 这些Cookie文件是可以被Web浏览器读取的 它的命令格式为 用户名 网站地址 数字 txt 例如 administrator google 1 txt 这里需要大家注意的是 硬盘中的Cookie文件是属于文本文件 而不是程序 所以它并不会携带病毒 由于Cookie文件是经过加密处理的 所以在一般的用户看来只是一堆没有任何意义的数字和字母组合 只有通过服务器的CGI处理程序进行解密操作才能知道它们真正的含义 在页面中传递参数 由于浏览器不会保存当前页面中的任何变量信息 当页面被关闭时 页面上的变量信息将随之消失 除了URL重写和使用隐藏域技术外 利用Cookie同样也能实现会话跟踪技术 利用Cookie在页面中传递参数比较常见的应用就是记录网站的浏览量 由于代理服务器 缓存等技术的使用 唯一能帮助网站精确统计来访人数的方法就是为每个访问者建立一个唯一的用户ID 使用Cookie 网站可以完成以下工作 记录有多少人访问过该网站 记录在访问者中有多少新用户 多少老用户 记录一个用户多长时间访问该网站一次 操作Cookie 使用Cookie的目的就是为用户带来方便 为网站带来增值 另外 由于浏览器一般只允许存放300个Cookie 每个站点最多存放20个Cookie 每个Cookie的大小限制为4KB 因此不必担心Cookie会塞满你的硬盘 在操作Cookie之前 先要我们来了解一下它的相关属性 getComment setComment Stringpurpose 获取 设置Cookie的注释 getDomain setDomain Stringpattern 获取 设置Cookie适用的域 一般地 Cookie只返回给与发送它的服务器名称完全相同的服务器 使用这里的方法可以指示浏览器把Cookie返回给同一域内的其它服务器 注意域必须以点开始 例如 非国家类的域 如 com edu gov 必须包含两个点 国家类的域 如 edu uk 必须包含三个点 操作方法 getMaxAge setMaxAge intexpiry 获取 设置Cookie过期之前的时间 以秒计 如果不设置该值 则Cookie只在当前会话内有效 即在用户关闭浏览器之前有效 而且这些Cookie不会保存在磁盘上 getName 获取Cookie的名字 本质上 名字和值是我们始终关心的两个方面 由于HttpServletRequest的getCookies方法返回的是一个Cookie对象的数组 因此通常要用循环来访问这个数组查找特定名字 然后用getValue 检查它的值 getPath setPath Stringurl 获取 设置Cookie适用的路径 如果不指定路径 Cookie将返回给当前页面所在目录及其子目录下的所有页面 这里的方法可以用来设定一些更一般的条件 例如 someCookie setPath 此时服务器上的所有页面都可以接收到该Cookie 操作方法 getSecure setSecure booleanflag 获取 设置一个boolean值 该值表示是否Cookie只能通过加密的连接 即SSL 发送 getValue setValue Stringvalue 获取 设置Cookie的值 如前所述 名字和值实际上是我们始终关心的两个方面 不过也有一些例外情况 比如把名字作为逻辑标记 也就是说 如果名字存在 则表示true getVersion setVersion intv 获取 设置Cookie所遵从的协议版本 默认版本0 遵从原先的Netscape规范 版本1遵从RFC2109 但尚未得到广泛的支持 要注意的一些问题 1 Cookie的兼容性问题Cookie的格式有2个不同的版本 第一个版本 我们称为CookieVersion0 是最初由Netscape公司制定的 被几乎所有的浏览器支持 而较新的版本 CookieVersion1 则是根据RFC2109文档制定的 为了确保其兼容性 JAVA规定 前面所提及Cookie的操作都是针对旧版本的Cookie进行的 而新版本的Cookie目前还不被Javax servlet http Cookie包所支持 2 Cookie的限制内容Cookie的内容字符限制针对不同的Cookie版本也有所不同 在CookieVersion0中 某些特殊的字符 如 空格 方括号 圆括号 等于号 逗号 双引号 斜杠问号 符号 冒号 分号 都不能作为Cookie的内容 深入Session 1 Session的创建当服务器端程序调用 HttpServletRequest getSession true 语句时 Session就将被创建 如果JSP程序中没有显示的使用 语句关闭Session 那么JSP文件在编译时将会自动添加语句 HttpSessionsession HttpServletRequest getSession true 来创建Session 这也是JSP中隐含Session对象的来历 2 Session的存活期Session的创建和销毁是由服务器来控制的 服务器默认Session的存活期限是30分钟 也就是说 当Session被创建后 30分钟内不对Session进行任何操作 系统就会把Session中所保存的内容全部清除 当然我们可以延长Session的存活期限 譬如通过 session setMaxInactiveInterval 24 60 60 语句 就可以使Session的存活期限为一整天 深入Session 3 Session的销毁一般情况下 Session都是存储在内存中的 当服务器进程被停止或者服务器被重新启动的时候 内存中的Session也会被清空 Session通常有以下三种情况被销毁 客户端浏览器被关闭 Session超过存活期限 服务器端调用HttpSession的invalidate 方法 4 标识Session对于一个Session来说 它的SessionID就是其身份的标识 当我们将这个SessionID保存到客户端 当同一个会话的后序请求到来时都将这个SessionID存放在request的header中 也就是我们说的Cookies 这样也就可以用来验证这个request是否与之前的request是否是同一个会话了 操作Session 现在我们来做一个关于Session的测试 由任意一个JSP页面向服务器发送请求 其中Servlet程序SessionServlet java的测试代码如下 publicvoiddoGet HttpServletRequestrequest HttpServletResponseresponse throwsServletException IOException response setContentType text html charset GBK PrintWriterout response getWriter HttpSessionsession request getSession true out println 客户端的SessionID request getRequestedSessionId out println SessionID是否由Cookie提供 request isRequestedSessionIdFromCookie out println SessionID是否在请求URL中解码 request isRequestedSessionIdFromURL out println 客户端返回的SessionID是否有效 request isRequestedSessionIdValid out println SessionID是否是新创建的 session isNew out println Session的默认存活期为 session getMaxInactiveInterval 秒 out close 运行程序 测试结果如图所示 接下来我们通过Session保存用户的登录信息做一个简单的权限管理系统 用户不通过登录是无法访问下一页面的 代码如下 登录页面denglu jsp 用户名 密码 判断登录情况index jsp 登录成功 欢迎您 username 登录成功后将用户名通过Session保存起来session setAttribute username username 在下一个页面中 如果用户登录成功将会显示欢迎词 如果用户未登录 系统提示用户登录 next jsp页面程序 这里进行登录 return else out println 欢迎 username 进入本网站 接下来可以来运行程序了 为了节省篇幅 这里只给出运行next jsp的运行情况 如果在用户登录成功后进入next jsp 页面效果如图所示 如果用户并没有进行登录就进入next jsp 页面效果如图所示 到这里 四种会话跟踪技术就全部介绍完了 希望同学们经过学习后 在实际的开发中能游刃有余的运用他们 动手实践 购物车 Servlet实现购物车 购物车程序 目标使用JSP技术如何实现一个购物车系统 编写一个JSP页面和两个Servlet程序 JSP页面实现用户选择商品的功能 一个Servlet程序实现处理用户所购物品清单 另一个Servlet程序实现删除用户所选商品的功能 1 运行程序 进入购物车首页 程序显示效果如图所示 2 在复选框中选择商品后 点击 购买 按钮 进入 已选购物品 页面 如图所示 3 为了测试购物的灵活性 我们点击 继续购物 连接 然后选择 水浒传 和 三国演义 后 再次进入已购物品页面 如图所示 现在我们进行删除已购物品操作 选中 水浒传 和 三国演义 点击 删除 按钮后 将进入图所示页面 在此页面选择 返回购物车 连接 回到已购物品页面 在物品栏下也将提示你选购了多少件商品 及消费总额 如图所示 shop jsp 选择商品名价格 元 ShoppingCart java publicvoiddoPost HttpServletRequestreq HttpServletResponseres throws ServletException IOException req setCharacterEncoding gb2312 如果Session不存在 为本次会话创建此对象 HttpSessionsession req getSession true IntegeritemCount Integer session getAttribute itemCount if itemCount null itemCount newInteger 0 res setContentType text html charset gb2312 PrintWriterout res getWriter 接收传来的参数 String itemsSelected StringitemName itemsSelected req getParameterValues item if itemsSelected null for inti 0 i itemsSelected length i itemName itemsSelected i System out println itemName itemCount newInteger itemCount intValue 1 购买的条目 session setAttribute item itemCount itemName 总条目 session setAttribute itemCount itemCount out println 已选购物品 out println 继续购物 out println floatsum 0f intj 0 for inti 1 i Stringtemp value split StringgoodsName temp 0 Stringprice temp 1 floatf Float parseFloat price sum f out println goodsName disServlet java publicclassdisServletextendsHttpServlet privatestaticfinalStringCONTENT TYPE text html charset GBK publicvoiddoGet HttpServletRequestrequest HttpServletResponseresponse throwsServletException IOException request setCharacterEncoding gb2312 Stringstr request getParameterValues item response setContentType CONTENT TYPE PrintWriterout response getWriter HttpSessionsession request getSession true if str null for inti 0 i返回购物车 out println 重新购物 out close publicvoiddoPost HttpServletRequestrequest HttpServletResponseresponse throwsServletException IOException doGet request response 请求转发机制 课程内容 RequestDispatcher中forward 方法RequestDispatcher中include 方法 Servlet请求转发 在构建一个web应用时 经常要把请求转发给另一个Servlet处理 或者在响应中包含另一个Servlet的输出 在Servlet中 RequestDispatcher接口提供了一种请求转发机制 forward 方法 Servlet类使用 javax servlet RequestDispatcher 类中的forward 方法来转发它所接受收到的HTTP请求 转发目标组件将处理该请求并生成响应结果 或者将请求继续转发到另外一个组件 最初请求的ServletRequest和ServletResponse对象将被传递给转发目标组件 这使得目标组件可以访问整个请求的上下文 通过三种方法可以获得实现RequestDispatcher接口的对象 从而实现对HTTP请求的转发 为了方便下面的举例 我们先编写一个简单的Servlet 程序代码如下所示 示例 packagetest importjavax servlet importjavax servlet http importjava io importjava util publicclassExempleServletextendsHttpServlet publicvoiddoGet HttpServletRequestrequest HttpServletResponseresponse throwsServletException IOException request setCharacterEncoding gb2312 response setContentType text html charset GBK PrintWriterout response getWriter out println TheExempleServlet Stringtest String request getAttribute name if test null out println Hello Iamcomefrom test ServletContextsc getServletContext Stringothertest String sc getAttribute name if othertest null out println Hello Iamcomefrom othertest out close 在这个Servlet中 我们分别用request对象和ServletContext对象接收不同页面传来的参数 并打印出来 单独运行这个Servlet 它只是一个很简单的页面 程序运行结果如图所示 接下来 我们将用三种方法将视图转发到ExempleServlet 并向ExempleServlet传递参数 具体代码如下 1 实现请求转发的第一种方法 1 通过ServletRequest接口提供的 getRequestDispatcher Stringpath 方法实现请求转发 packagetest importjavax servlet importjavax servlet http importjava io importjava util publicclassFirstServletextendsHttpServlet publicvoiddoGet HttpServletRequestrequest HttpServletResponseresponse throwsServletException IOException response setContentType text html charset GBK request setAttribute name FirstServlet RequestDispatcherrd request getRequestDispatcher exempleservlet rd forward request response 运行程序 Servlet会将视图转发到ExempleServlet 效果如图所示 在这个实例中 Servlet容器的request对象使用当前请求的相对路径来获得RequestDispatcher对象 2 实现请求转发的第二种方法 2 通过ServletContext接口提供的getRequestDispatcher Stringpath 方法实现请求转发 getRequestDispatcher 方法使用String类型的参数描述ServletContext作用域的路径 该路径必须相对于ServletContext的根目录 并且以 开头 该方法使用路径 path 来查找Servlet 用RequestDispatcher对象包装 然后返回结果对象 如果没有基于指定路径的Servlet 则提供一个RequestDispatcher返回路径值 packagetest importjavax servlet importjavax servlet http importjava io importjava util publicclassSecondServletextendsHttpServlet publicvoiddoGet HttpServletRequestrequest HttpServletResponseresponse throwsServletException IOException response setContentType text html charset GBK ServletContextsc getServletContext sc setAttribute name SecondServlet RequestDispatcherrd sc getRequestDispatcher exempleservlet rd forward request response 运行程序 Servlet将会将视图转发到ExempleServlet 效果如图所示 3 实现请求转发的第三种方法 3 通过ServletContext接口提供的getNamedDispatche Stringname 方法实现请求转发 getNamedDispatcher 方法以String类型的变量为参数表示ServletContext已知的Servlet名称 如果找到Servlet 用RequestDispatcher对象将它包装并返回 如果没有和指定名称关联的Servlet 该方法必须返回null packagetest importjavax servlet importjavax servlet http importjava io importjava util publicclassThirdServletextendsHttpServlet publicvoiddoGet HttpServletRequestrequest HttpServletResponseresponse throwsServletException IOException response setContentType text html charset GBK ServletContextsc getServletContext sc setAttribute name ThirdServlet RequestDispatcherrd sc getNamedDispatcher exempleservlet rd forward request response 运行程序 Servlet将会将视图转发到ExempleServlet 程序运行效果如图所示 缓冲区处理 前面的示例中 在调用forward 方法之前 不能有内容已经被实际输出到了客户端 如果缓冲区中已经有了一些内容 这些内容将被从缓冲区中清除 下面举一个简单的例子说明这个问题 首先我们在Servlet中使用response getWriter 方法获得输出流 然后输出一句 HelloWorld 你好 世界 代码如下 response setContentType text html charset GBK PrintWriterout response getWriter out println HelloWorld 你好 世界 运行Servlet 如图所示 接着我们在上面的代码后加上以下代码 此处的servlet1是另外一个Servlet程序 将这些代码加入servlet2中RequestDispatcherrd request getRequestDispatcher servlet1 rd forward request response 再次运行程序 如图所示 从图片方框标记可以看到 在浏览器地址栏中的URL地址并没有发生变化 可见开始输入的 HelloWorld 你好 世界 已经从缓冲区中清除掉了 include 方法 RequestDispatcher接口的include 方法可以随时调用 include 方法的目标Servlet可以完整访问request对象 但是在使用response对象上有一些限制 它只能向response对象的ServletOutputStream或者Writer写入信息 提交响应 将内容输出到响应缓冲尾部 或者显式调用ServletResponse接口的flushBuffer 方法 它不能设置header 或者调用任何影响响应header的方法 任何那样的尝试必须都被忽略 当调用include 方法时 相当于把getRequestDispatcher Stringurl 中的URL指定的资源包含在当前页面中 示例 packagetest importjavax servlet importjavax servlet http importjava io importjava util publicclassIncludeServletextendsHttpServlet publicvoiddoGet HttpServletRequestrequest HttpServletResponseresponse throwsServletException IOException response setContentType text html charset GBK PrintWriterout response getWriter out println IamIncludeServlet out println request setAttribute name IncludeServlet RequestDispatcherrd request getRequestDispatcher exempleservlet rd include request response out close 运行程序 Servlet将会将ExempleServlet的视图包含进来 效果如图所示 动手实践 页面转发 Servlet实现页面跳转 First jsp first JS验证输入合法性functioncheck if document fo username value alert 用户名不能为空 else document fo submit ThefirstJSP 用户名 TransmitServlet java publicvoiddoGet HttpServletRequestrequest HttpServletResponseresponse throwsServletException IOException request setCharacterEncoding gb2312 response setContentType CONTENT TYPE Stringusername request getParameter username PrintWriterout response getWriter request setAttribute username username RequestDispatcherrd request getRequestDispatcher second jsp rd forward request response out close second jsp secondThesecondJSP Web监听与过滤 课程内容 Servlet上下文监听Servlet会话监听Servlet请求监听Web应用过滤器 Servlet上下文监听 在Web应用中可以开发监听程序来监听ServletContext的信息 比如监听ServletContext的创建和删除 或者对ServletContext属性的增加 删除和修改等操作进行监听 如果要开发监听ServletContext信息的程序 需要实现ServletContextListener接口和ServletContextAttributeListener接口 ServletContextListener接口 所在包 javax servlet接口声明 publicinterfaceServletContextListenerextendsjava util EventListener它包含两个方法 voidcontextDestroyed ServletContextEventsce 表示当应用程序被销毁后触发执行该方法中的代码voidcontextInitialized ServletContextEventsce 表示当应用程序在初始化时触发执行该方法中的代码 续 其中ServletContentEvent是一个ServletContext对象的事件 其类的声明如下 publicclassServletContentEventextendsjava util EventObject包含方法 ServletContextgetServletContext 方法 该方法返回事件的Servlet上下文 即产生事件的当前应用程序 ServletContextAttributeListener接口 所在包 javax servlet接口声明 publicinterfaceServletContextAttributeListenerextendsjava util EventListener它包含三个方法 voidattributeAdded ServletContextAttributeEventscab 方法表示当增加一个新的属性到Servlet的上下文中后触发该方法中的代码voidattributeRemoved ServletContextAttributeEventscab 表示当一个属性被从Servlet的上下文中删除后触发该方法中的代码voidattributeReplaced ServletContextAttributeEventscab 表示当Servlet上下文中的一个属性的值被替换后触发该方法中的代码 续 其中ServletContextAttributeEvent是Servlet上下文中的属性事件其类声明如下 publicclassServletContextAttributeEventextendsServletContextEvent包含方法 StringgetName 该方法返回产生事件的属性名称 ObjectgetValue 该方法返回产生事件的属性的值 Servlet会话监听 在Web应用中 可以开发Servlet监听程序来监听HTTP会话的相关信息 通过实现下面四种接口 可以实现相对应的HTTP会话监听功能 HttpSessionListener接口 该接口可以实现监听HTTP会话创建 销毁的信息 所在包 javax servlet接口声明 publicinterfaceHttpSessionListenerextendsjava util EventListener它包含两个方法 voidsessionCreated HttpSessionEventse 表示当一个会话被创建后触发执行该方法中的代码voidsessionDestroyed HttpSessionEventse 表示当一个会话被释放后触发执行该方法中的代码 续 其中HttpSessionEvent是会话事件类其声明如下 publicclassHttpSessionEventextendsjava util EventObject包含方法 HttpSessiongetSession 该方法返回产生事件的Session对象 HttpSessionActivationListener接口 该接口可以实现监听HTTP会话Activate Passivate情况 所在包 javax servlet接口声明 publicinterfaceHttpSessionActivationListenerextendsEventListener它包含两个方法 voidSessionDidActivate HttpSessionEventse voidSessionWillPassivate HttpSessionEventse Activate与Passivate是用于置换对象的动作 当Session对象由于资源利用或负载平衡等原因而必须暂时储存至硬盘或其它储存器上时 透过对象序列化 所作的动作称之为Passivate 而硬盘或储存器上的Session对象重新加载JVM时所作的动作称之为Activate HttpSessionAttributeListener接口 该接口可以实现监听HTTP会话中属性的设置请求 所在包 javax servlet

温馨提示

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

评论

0/150

提交评论