




已阅读5页,还剩115页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
JavaEE核心编程 第二部分 详解Servlet组件编程 Servlet的生命周期请求与响应Cookie 会话上下文过滤器 监听器 章节目录 章节目录 ServletAPI继承关系Servlet生命周期 Servlet Servlet的历史1995年 Java技术正式推出 1997年 Sun紧接着又推出Servlet技术2008年 Servlet的版本已经发展到了2 5版 Java的Web编程技术还包括我们后面章节要讲解的JSP JavaBean 标记库 JSTL等 Servlet技术简介 sun公司以javaServlet为基础 推出了javaServerPage JSP提供了JavaServlet的几乎所有好处 当一个客户请求一个jsp面时 jsp引擎根据jsp页面生成一个java文件 即servlet Servlet技术在J2EE平台出现前就已经出现了 在最初的网络动态服务中 公共网关接口 CGI 脚本是实现动态服务的主要的技术 但是它本身却存在着许多的缺陷 如平台相关性 缺乏可升级性等 为了克服这些缺点 JavaServlet技术作为一种以简单的方式提供动态的 面向用户的web技术而诞生了 Servlet是什么 一个Sevlet就是一个标准的服务器端应用程序 它可以执行商务逻辑 处理HTTP的请求 需要运行在服务器端需要Web容器的支持Java编写 Servlet的结构 类似的命名Applet Application let Servlet Server let 相关类javax servlet Servletjavax servlet GenericServletjavax servlet http HttpServlet Servlet处理的流程 1 客户端使用浏览器提交对Servlet的调用的Get或者Post请求2 服务器接到请求后 如果该Servlet是第一次被调用 实例化这个Servlet3 服务器调用该Servlet对象的service 方法4 Servlet产生动态的回复内容5 服务器发送回复内容给客户端的浏览器 实例01手工编写Servlet 具体步骤编写Servlet源程序建立Web应用目录结构编写web xml文件运行Servlet 编写Servlet源程序 Servlet接口 importjavax servlet Servlet importjavax servlet ServletConfig importjavax servlet ServletException importjavax servlet ServletRequest importjavax servlet ServletResponse importjava io IOException importjava io publicclassHelloWorldServletimplementsServlet privatestaticfinalStringCONTENT TYPE text html charset GBK publicvoiddestroy publicServletConfiggetServletConfig returnnull publicStringgetServletInfo returnnull publicvoidinit ServletConfigparm1 throwsServletException publicvoidservice ServletRequestparm1 ServletResponseparm2 throwsServletException IOException parm2 setContentType CONTENT TYPE PrintWriterout parm2 getWriter out println out println HelloWorldServlet out println out println 实现Servlet接口 out println HelloWorld out println out println out close web xml的配置 在web xml描述中 首先声明Servlet 指定这个Servlet的类名和名称 然后为这个Servlet创建URI映射 我们通过这个映射来访问Servlet HelloWorldServletHelloWorldServletHelloWorldServlet Hello Web xml部署 配置web xml文件 编译程序生成 class文件 然后就可以运行程序了 在浏览器地址栏中输入 http localhost 8080 work Hello 后 点击回车 程序运行效果如图所示 Servlet的生命周期 初始化构造方法init ServletConfig 方法init 方法提供服务service方法doXXX方法销毁destroy方法 Servlet的生命周期 Servlet部署在容器中 它的生命周期由容器管理 Servlet的生命周期始于将它装入Web服务器的内存时 并在终止或重新装入Servlet时结束 Servlet的生命周期可以归纳为以下几个阶段 装载Servlet 这项操作一般是动态执行的 有些服务器提供了响应的管理功能 可以在启动的时候就装载Servlet并能够初始化特定的Servlet 创建一个Servlet实例 调用Servlet的init 方法 一个客户端的请求到达服务器 创建一个请求对象 创建一个响应对象 激活Servlet的Service 方法 并传递请求和响应对象 Service 方法获得关于请求对象的信息 处理请求 访问其它资源 获得需要的信息 Service 方法使用响应对象的方法 将响应传回服务器 最终到达客户端 对于更多的客户端请求 服务器创建新的请求和响应对象 仍然激活此Servlet的Service 方法 将两个对象作为参数传递给它 当服务器不再需要Servlet或当服务器关闭时 服务器将会调用Servlet的destroy 方法来销毁Servlet TomCat功能 1 web服务器2 jsp容器3 servlet容器 Servlet Jsp网络拓扑结构 WEB服务器 Jsp Servlet容器 java jsp SQLSERVERDB2MYSQLORACEL HTTP请求 转发 操作数据库 返回结果 返回结果 返回静态页面 HTMLJavaScriptFLASH 涉及到的知识点Javabean servlet jsp ejb Struts hibernate spring JDBCJDBC ODBC 显示层 美工 逻辑层 程序员 数据层 DBA Servlet的服务流程 在上述阶段中 对外提供服务是最重要的阶段 Service 方法是真正处理业务的方法 所以也是我们最值得关心的方法 下面我们通过图表来演示Servlet是如何为客户提供服务的 如图所示 Servlet接口中的方法 Servlet接口Servlet接口是ServletAPI的主要抽象接口 它是所有Servlet必须直接或者间接实现的接口 ServletAPI中有两个类实现了Servlet接口 他们分别是GenericServlet和HttpServlet Servlet接口定义了以下的方法 init ServeltConfigConfig 方法 用于初始化Servlet getServletConfig 方法 该方法返回一个ServletConfig对象 该对象包含Servlet的初始化和启动参数 该返回对象ServletConfig与传递给init 方法的参量一致 Service 方法 该方法由Servlet容器调用以允许Servlet对请求进行响应 该方法只有在init 方法运行成功后才会被调用 getServletInfo 方法 该方法返回Servlet的信息 返回的字符串必须是纯文本 不能包含任何标记语言 如 HTML XML等等 destroy 方法 销毁Servlet 抽象类GenericServlet GenericServlet提供了对Servlet接口的具体实现 它是一个抽象类 它的service 方法是一个抽象方法 GenericServlet的派生类必须直接或者间接实现这个方法 一个Servlet可以直接扩展GenericServlet类 然而扩展一个指定协议的子类 如HttpServlet 显得更为普遍 GenericServlet类使编写Servlet变得更加容易 HttpServlet HttpServlet类是针对使用Http协议的Web服务器的Servlet类 HttpServlet类通过实现Servlet接口 提供Http协议的功能 HttpServlet的子类必须实现以下方法中的一个 doGet 方法 由服务器调用 通过Service 方法 以允许一个Servlet去处理一个GET请求 doPost 方法 由服务器调用 通过Service 方法 以允许一个Servlet去处理一个POST请求 doPut 方法 由服务器调用 通过Service 方法 以允许一个Servlet去处理一个PUT请求 doDelete 方法 由服务器调用 通过service 方法 以允许一个Servlet去处理一个DELETE请求 DELETE操作允许客户从服务器中删除一个文档或网页 init 方法和destory 方法 管理Servlet占用的资源 getServletInfo 方法 获得Servlet自身的信息 继承HttpServlet抽象类实现Servlet技术 在例1中 我们是通过Servlet接口来实现Servlet 下面我们以继承HttpServlet抽象类来实现Servlet 参考代码如下 packageservlet importjavax servlet importjavax servlet http importjava io importjava util publicclassHelloWorldServlet2extendsHttpServlet privatestaticfinalStringCONTENT TYPE text html charset GBK publicvoidinit throwsServletException publicvoiddoGet HttpServletRequestrequest HttpServletResponseresponse throwsServletException IOException response setContentType CONTENT TYPE PrintWriterout response getWriter out println out println HelloWorldServlet2 out println out println 继承HttpServlet out println HelloWorld out println 你好 世界 out println out println out close publicvoiddoPost HttpServletRequestrequest HttpServletResponseresponse throwsServletException IOException doGet request response publicvoiddestroy 继承HttpServlet抽象类实现Servlet技术 HttpServlet实现 在浏览器地址栏中里输入 http localhost 8080 work HelloWorld 后 点击回车 查看程序运行结果 程序运行结果如图所示 Servlet是多线程单实例的 Servlet只有在第一次被调用时初始化一次 该实例被存储在容器中多个客户端并发访问时 Tomcat会启动多线程 并发访问该实例如果某个Servlet需要在应用加载时即被实例化 可以通过在web xml中配置来完成 章节目录 Servlet常用接口请求与响应的接口请求转发器请求属性 ServletConfig ServletConfig接口是一个由Servlet容器使用的Servlet配置对象 在Servlet初始化时向它传递信息 ServletConfig接口有以下几个主要方法 getServletName 方法 该方法返回一个Servlet实例的名称 该名称由服务器管理员提供 getServletContext 方法 该方法返回一个ServletContext对象的引用 getInitParameter 方法 该方法返回一个由参数 Stringname 决定的初始化变量的值 如果该变量不存在 返回null getInitParameterNames 方法 该方法返回一个存储所有初始化变量的枚举函数 如果Servlet没有初始化变量 返回一个空枚举函数 例题 下面的代码描述了一个Servlet的xml文件的配置 HelloWorldservlet HelloWorldServletcharsetgb2312在 HelloWorldServlet java 中如果有getInitParameter charset 那么将返回一个 gb2312 的字符串 ServletException ServletException定义了一个通用异常类 Servlet运行错误时将抛出异常 它包含几个构造方法和一个获得异常原因的方法 ServletException常用方法有 ServletException 构建一个新的Servlet异常 ServletException Stringmessage 构建一个拥有指定信息的新的Servlet异常 ServletException Stringmessage ThrowablerootCause 构建一个新的Servlet异常 Servlet需要时抛出 包含妨碍正常操作 包括描述信息 的根异常信息 ServletException ThrowablerootCause 构建一个新的Servlet异常 Servlet需要时抛出 包含妨碍正常操作的根异常信息 getRootCause 该方法返回引起Servlet异常的原因 在创建Servlet时 常采用以下形式抛出异常 publicvoiddoGet HttpServletRequestrequest HttpServletResponseresponse throwsServletException IOException PrintWriterout response getWriter out println out println HelloWorldServlet out println out println 继承HttpServlet out println HelloWorld out println 你好 世界 out println out println out close publicvoiddoPost HttpServletRequestrequest HttpServletResponseresponse throwsServletException IOException doGet request response ServletRequest ServletRequest接口封装了客户端请求的细节 它与协议无关 并指定一个HTTP的子接口 ServletRequest主要功能有 找出客户端的主机名和IP地址 检索请求参数 取得和设置属性 取得输入 输出流 ServletRequest类的常用方法 getAttribute Stringname 返回具有指定名称的请求属性 如果不存在则返回null 属性可由Servlet引擎设置或使用setAttribute 显式加入 getAttributeName 返回请求中所有属性名的枚举 如果不存在属性 则返回一个空的枚举 getCharacteEncoding 返回请求所用的字符编码 getInputStream throwsIOException 返回与请求相关的 二进制 输入流 可以调用getInputStream 或getReader 方法 getParameter Stringname 返回指定输入参数 如果不存在 返回null getParameterName 返回请求中所有参数名的一个可能为空的枚举 getParameterValues Stringname 返回指定输入参数名的取值数组 如果取值不存在则返回null 它在参数具有多个取值的情况下十分有用 ServletRequest类的常用方法 getServerName 返回处理请求的服务器的主机名 getServerPort 返回接收主机正在侦听的端口号 getRemoteAddr 返回客户端主机的数字型IP地址 getRemoteHost 如果知道 返回客户端主机名 setAttribute Stringname Objectobj 以指定名称保存请求中指定对象的引用 removeAttribute Stringname 从请求中删除指定属性 getRequestDispatcher Stringname 返回指定源名称RequsetDispatcher对象 HttpServletRequest HttpServletRequest接口中最常用的方法就是获得请求的参数 这个请求中的参数值是客户端表单中的数据 JSP中的内建对象request就是一个HttpServletRequest实例 HttpServletRequest主要功能 读取和写入HTTP头标 取得和设置cookies 取得路径信息 标识HTTP会话 HttpServletRequest接口的常用方法 getContextPath 返回指定Servlet上下文 web应用 的URL的前缀 getCookies 返回与请求相关Cookie的一个数组 getHeader Stringname 返回指定的HTTP头标值 如果其由请求给出 则名字应对大小写不敏感 getHeaderNames 返回请求给出的所有HTTP头标名称的枚举值 getHeaders Stringname 返回请求给出的指定类型的所有HTTP头标的名称的枚举值 它对具有多取值的头标非常有用 getMethod 返回HTTP请求方法 例如GET POST等 getParameter Stringname 获得请求中名为name的参数的值 如果请求中没有这个参数 将返回null getSession booleancreate 返回当前HTTP会话 如果不存在 则创建一个新的会话 create参数为true isRequestedSessionIdValid 如果客户端返回的会话ID仍然有效 则返回true 例题 packageservlet importjavax servlet importjavax servlet http importjava io importjava util publicclassMyHttpServletRequestextendsHttpServlet privatestaticfinalStringCONTENT TYPE text html charset GBK publicvoidinit throwsServletException publicvoiddoGet HttpServletRequestrequest HttpServletResponseresponse throwsServletException IOException response setContentType CONTENT TYPE PrintWriterout response getWriter Stringpath request getContextPath Stringmethod request getMethod Stringinfo request getServerName out println path path out println method method out println server info out close publicvoiddoPost HttpServletRequestrequest HttpServletResponseresponse throwsServletException IOException doGet request response publicvoiddestroy ServletResponse ServletResponse将一个Servlet生成的结果传送到发出请求的客户端 ServletResponse操作主要是作为输出流及其内容类型和长度的包容器 它由Servlet引擎创建 ServletResponse接口常用方法有以下几种 getCharacterEncoding 返回响应程序使用字符解码的名字 除非显式设置 否则为ISO 8859 1 getLocale 返回响应使用的现场 除非用setLocale 修改 否则缺省为服务器现场 getOutputStream throwsIOException 返回用于将返回的二进制输出写入客户端的流 此方法和getWrite 方法二者只能调用其一 getWriter throwsIOException 返回用于将返回的文本输出写入客户端的一个字符写入器 此方法和getOutputStream 二者只能调用其一 isCommitted 如果状态和响应头标已经被发回客户端 则返回true 在响应被确认后发送响应头标将毫无作用 setContentType Stringtype 设置内容类型 在HTTPServlet中设置Content Type头标 setLocale Localelocale 设置响应使用现场 在HTTPServlet中 将对Content Type头标取值产生影响 HttpServletResponse HttpServletResponse代表了对客户端的Http的响应 它提供了表示状态码 状态信息和响应头标的方法 同时还负责对URL中写入一个Web页面的HTTP会话ID进行解码 JSP中的内建对象response是一个HttpServletResponse实例 HttpServletResponse接口常用方法 addCookie Cookiecookie 将一个Set Cookie头标加入到响应 setHeader Stringname Stringvalue 设置具有指定名字和取值的一个响应头标 encodeRedirectURL Stringurl 如果客户端不知道接受cookie 则向URL加入会话ID 第一种形式只encodeURL Stringurl 使用URL和一个SessionID重写这个URL sendError intstatus 设置响应状态码为指定值 可选的状态信息 HttpServleetResponse定义了一个完整的整数常量集合表示有效的状态值 sendRedirect Stringlocation 把响应发送到另一页面或者Servlet进行处理 getWriter 该方法取得PrintWriter对象 来输出字符数据 getOutputStream 该方法获得ServletOutputStream输出流 setContentType 该方法设置响应的MIME类型 setCharacterEncoding Stringcharset 设置响应的字符编码类型 下面举例演示HttpServletResponse接口的方法 publicvoiddoGet HttpServletRequestrequest HttpServletResponseresponse throwsServletException IOException StringCONTENT TYPE text html charset GBK 设置响应的MIME类型response setContentType CONTENT TYPE 获得输出流对象PrintWriterout response getWriter out println HelloWorld out println 你好 世界 out close 跳转到login jsp页面response sendRedirect login jsp ServletContext ServletContext与Servlet上下文有关 是Servlet引擎提供用来服务于Web应用的接口 Servlet上下文具有名称 它属于Web应用的名字 唯一映射到文件系统的一个目录 一个Servlet可以通过ServletConfig对象的getServletContext 方法得到Servlet上下文的引用 如果Servlet直接或间接调用子类GenericServlet 则可以使用getServletContext 方法 JSP中的application内建对象 是ServletContext接口的一个实例 它为多个应用程序保存信息 在同一个容器中 可为每个用户共享资源 Web应用中Servlet可以使用Servlet上下文得到 在调用期间保存和检索属性的功能 并与其他Servlet共享这些属性读取Web应用中文件内容和其它静态资源的功能互相发送请求的方式记录错误和信息化消息的功能 ServletContext接口的常用方法 getAttribute Stringname 返回Servlet上下文中具有指定名字的对象 或使用已指定名捆绑一个对象 从Web应用的标准观点看 这样的对象是全局对象 因为它们可以被同一Servlet在另一时刻访问 或上下文中任意其它Servlet的访问 setAttribute Stringname Objectobj 设置Servlet上下文中具有指定名字的对象 getAttributeNames 返回保存在Servlet上下文中所有属性名字的枚举 getContext Stringuripath 返回映射到另一URL的Servlet上下文 在同一服务器中URL必须是以 开头的绝对路径 getRealPath Stringpath 给定一个URI 返回文件系统中URI对应的绝对路径 如果不能进行映射 返回null getResource Stringpath 返回相对于Servlet上下文或读取URL的输入流的指定绝对路径相对应的URL 如果资源不存在则返回null getServerInfo 返回Servlet引擎的名称和版本号 log Stringmessage Throwablet 将一个消息写入Servlet注册 如果给出Throwable参数 则包含栈轨迹 removeAttribute Stringname 从Servlet上下文中删除指定属性 例题 importjava io IOException importjavax servlet ServletConfig importjavax servlet ServletContext importjavax servlet ServletException importjavax servlet ServletOutputStream importjavax servlet http HttpServlet importjavax servlet http HttpServletRequest importjavax servlet http HttpServletResponse publicclassLoggingServletextendsHttpServlet privateServletContextcontext publicvoidinit ServletConfigconfig throwsServletException super init config context getServletContext context log Inithasbeeninvoked publicvoiddoGet HttpServletRequestreq HttpServletResponseres throwsIOException ServletOutputStreamout res getOutputStream context log doGethasnowbeeninvoked res setContentType text html out println LoggingServlet out println Visitthe logsandopenthexxfiletoseethelogentries out println RequestDispatcher RequestDispatcher接口定义一个对象 该对象负责在服务器端接收来自客户端的请求并向他们发送资源 例如一个Servlet HTML文件 或者是JSP文件 Servlet容器创建RequestDispatcher对象 用来包装一个给定位置或名字的服务器资源 该接口被设计于包装Servlets 但一个Servlet容器可以创建该对象以保证任何类型的资源 RequestDispatcher接口有两个方法 forward 方法 include 方法 forward 方法 该方法提交一个请求到服务器的某个资源 如 Servlet JSP文件 或HTML文件 该方法允许一个Servlet对一个请求作初步处理 而另一个资源将产生响应 由于一个RequestDispatcher对象是通过getRequestDispatcher 方法获得 ServletRequest对象拥有自己的路径元素和变量以匹配目标资源路径 forward 方法应该在响应被提交到客户端之前被唤起 在响应主体输出被刷新之前 如果响应已经被提交 该方法抛出IllegalStateException异常 在forward 之前 响应未被提交的输出会被自动清理掉 请求和响应的两个参数必须是与传递给Servlet的service 方法相同的对象 或者是由ServletRequestWrapper ServletResponseWrapper的子类 封装的 对象 章节目录 URL重写隐藏表单域 课程目标 URL重写隐藏表单域 体验项目 想知道如何通过Web技术创建一个聊天室程序吗 编写一个登录页面和一个框架页面 包含主页面 显示页面和发言页面 登录页面实现用户登录功能 框架页面实现聊天功能 程序的运行过程如下所示 1 登录聊天室 在用户名文本框中输入用户名 如 小刚 效果如图所示 3 名称输入完成后 点击 登录 按钮进入聊天室 如图所示 3 用户登录后 就可以进行聊天了 在 你要说的话 文本框中输入聊天的内容 点击 提交 按钮 就会在显示页面中看到聊天的内容了 如图所示 前言 会话跟踪是一种灵活 轻便的机制 它使Web上的状态编程变为可能 HTTP是一种无状态协议 每当用户发出请求时 服务器就会做出响应 客户端与服务器之间的联系是离散的 非连续的 当用户在同一网站的多个页面之间转换时 根本无法确定是否是同一个客户 会话跟踪技术就可以解决这个问题 当一个客户在多个页面间切换时 服务器会保存该用户的信息 有四种方法可以实现会话跟踪技术 URL重写隐藏表单域CookieSession本章给大家介绍URL重写和隐藏表单域 Cookie和Session将在下章介绍 URL重写 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地址中传递 实现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都应通过这个方法运行 这样才能确保会话跟踪能够在所有浏览器中正常运行 例题 jsp页面 下面我们结合这两种方法 做一个URL重写的例子 主要实现从一个JSP页面提交数据给Servlet Servlet接收到参数后经过URL重写并重新定位到以前的JSP页面 此时JSP接收到Servlet返回的参数并打印出来 urlCZ jsp代码如下 实现URL重写 UrlServlet java的关键代码如下 publicvoiddoGet HttpServletRequestrequest HttpServletResponseresponse throwsServletException IOException 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重写操作时 URL后面可以同时跟随多个参数 但不同参数之间使用 运行more jsp页面 如下图所示 显示结果 点击 下一个页面 链接时 链接到next jsp页面 如图所示 在more jsp中 给next jsp传递了 userid username 和 password 三个参数 然后在next jsp中使用request getParameter Stringname 方法分别接收三个参数 但是这个链接受到URL长度的限制 一般浏览器URL长度限制最大为2KB URL 利用URL重写进行会话跟踪时 有它的优点和缺点 优点 Cookie被禁用或者根本不支持的情况下依旧能够工作 缺点 必须对所有指向你的URL重新进行编码 所有页面必须动态生成 不能对预先记录下来的URL进行访问 或者从其它网站链接进行访问 例题2 非主流网站搜索实现 Search jsp 搜索界面请输入搜索关键词 百度Google 例题2 servlet packageservlet importjavax servlet importjavax servlet http importjava io importjava util publicclassHelloWorldServlet1extendsHttpServlet privatestaticfinalStringCONTENT TYPE text html charset GBK publicvoiddoGet HttpServletRequestrequest HttpServletResponseresponse throwsServletException IOException System out println hahha request setCharacterEncoding gb2312 response setContentType CONTENT TYPE PrintWriterout response getWriter StringsearchString request getParameter searchstring if searchString null searchString length 0 reportProblem response 没有查找的关键字 return searchString URLEncoder encode searchString StringsearchEngineName request getParameter radiobutton if searchEngineName null searchEngineName length 0 reportProblem response 没有查找的选择网站 return 重新编码searchString URLEncoder encode searchString StringsearchURL searchEngineName searchString out println searchURL if searchURL null response sendRedirect searchURL else reportProblem response 无地址 out close publicvoiddoPost HttpServletRequestrequest HttpServletResponseresponse throwsServletException IOException doGet request response privatevoidreportProblem HttpServletResponseresponse Stringmessage throwsIOException response sendError response SC NOT FOUND message 隐藏表单域 了解隐藏表单域隐藏域 以下都简称隐藏域 是用来收集或发送信息的不可见表单控件 在客户端浏览器中 用户是看不见隐藏域的 隐藏域须配合表单使用 使用方法和文本框控件没什么大的区别 当表单被提交时 隐藏域就会将信息以用户设置的名称和值发送到服务器上 服务器可以通过request getParameter Stringname 方法接收隐藏域的信息 隐藏域的格式如下 其中type hidden 定义为隐藏域 name属性定义隐藏域的名称 value属性定义隐藏域的值 使用隐藏表单域 隐藏域和URL重写有着共同的优点 就是它们在Cookie被禁用或者根本不支持的情况下依旧能够工作 但是也有它的缺点 就是所有页面必须是表单提交之后的结果 还有涉及许多冗长的处理工作 下面我们做一个最简单的隐藏域应用的实例 首先编写一个JSP页面 在JSP页面中插入一个隐藏域 并赋值为 清华IT Hide jsp代码如下 hide使用隐藏域 接着在Servlet程序中接收隐藏域的信息 并打印出来 publicvoiddoGet HttpServletRequestrequest HttpServletResponseresponse throwsServletException IOException 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 程序编译通过后 开始执行程序 我们可以看到 在JSP页面中 除了看到按钮控件外 是看不到隐藏域的 如图所示 点击 提交信息 按钮 进入Servlet处理页面 程序运行效果如图所示 章节目录 Cookie会话跟踪技术H
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年湖南财盛国际贸易有限公司公开考前自测高频考点模拟试题及一套参考答案详解
- 2025年UV激光切割机项目发展计划
- Human-MOG-specifying-DNA-生命科学试剂-MCE
- HGS101-生命科学试剂-MCE
- HDAC-IN-91-生命科学试剂-MCE
- 2025年太阳能发电设备项目建议书
- 2025年福建供电服务公司招聘笔试模拟试卷及参考答案详解一套
- 2025年宁夏医科大学总医院自主公开招聘高层次工作人员模拟试卷附答案详解
- 小学保安员安全培训计划课件
- 技术服务合同的核心内容
- 2025年广西中考语文试题卷(含答案及解析)
- 《金工实训(铣工) 》课件-项目1 数控铣床VDL-600A介绍
- 透析室护理不良事件分析
- 基于SERVQUAL模型的南京老门东历史文化街区旅游服务质量评价及提升策略研究
- 老年认知功能障碍的智能康复训练系统-洞察阐释
- 2025年高考真题-物理(广西卷) 含答案
- 大模型备案-落实算法安全主体责任基本情况
- 2025年四川宜宾纸业股份有限公司招聘笔试参考题库含答案解析
- 两外安全管理制度
- 深空引力波导航-洞察及研究
- GB/T 25383-2025风能发电系统风力发电机组风轮叶片
评论
0/150
提交评论