




已阅读5页,还剩48页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第六讲Servlet开发 湖南文理学院计算机学院王蓉 内容回顾 WebLogicServer下的JDBC开发实例JDBC高级话题批量更新PreparedStatement结果集JTAJTA主要接口 本讲教学 教学内容 第十章JavaServlet技术教学目标 6 1Web应用程序6 2Servlet的概念6 3Servlet的生命周期6 4Servlet的工作方式6 5Servlet的编程接口6 6Servlet与客户端的交互教学重点 Servlet的生命周期 Servlet与客户端的交互教学难点 Servlet与客户端的交互的不同方式 6 1Web应用程序 Web应用程序是一个JavaServlet和Jsp的集合 其中还包括其他的辅助类和类库 像Html XHtml或者XML文档那样的静态资源 图像等等 HTML文件图像ServletJSP页面JavaBeanJar文件Applet标签文件标签库描述符文件部署描述器 6 1 1Web应用程序的结构 Web容器 是Web应用程序的基本运行环境和框架 Web应用程序 对应一个目录 或者网站 包括html servlet applet jsp 图片等 6 1 1Web应用程序的结构 WEB INF index html test jsp lib classes jar HelloServlet class web xml 显示页面 第三方jar文件 java编译后的 class文件 程序配置文件 必须的 Web应用程序典型目录结构 WEB INF文件夹中的内容无法对外发布 6 1 2Web应用程序开发过程 设计目录结构编写Web应用程序代码编写部署描述符编译代码将Web应用程序打包部署Web应用程序执行Web应用程序 6 1 3Web应用程序的部署 Web应用程序打包后成 War文件自动部署WebLogic域为开发模式时 可以直接将Web应用程序复制到 域目录 autodeploy目录下 手工部署WebLogic域为生产模式时 需要通过管理控制台进行手工部署 6 2Servlet的概念 什么是Servlet在Web服务器端加载并运行的Java小程序 能够接收Web客户端的请求 并能对Web客户端进行响应 通常是通过HTTP协议进行工作 请求 响应 Servlet运行于服务器端 6 2Servlet的概念 特点 Servlet容器负责Servlet和用户的通信以及调用Servlet的方法 Servlet和用户的通信采用请求 响应模式 以线程形式处理用户请求 创建并返回基于客户请求的动态HTML页面 可与其它服务器资源 如数据库或基于Java的应用程序 进行通信 6 2Servlet的概念 一个Servlet在同一时刻只有一个实例 并且它在Sevlet的使用期间将一直保留 客户A 客户B 线程B 线程A Web容器 Servlet实例 Web服务器 客户机与Servlet间没有直接的交互 以Web服务器为中介 6 2Servlet的概念 与传统Java应用程序相比较不是从命令行启动 而是由包含JVM的Web服务器进行加载 6 2Servlet的概念 Servlet与Applet相比较 相似之处 1 它们不是独立的应用程序 没有main 方法 2 它们不是由用户调用 而是由另外一个应用程序 容器 调用 3 它们都有一个生存周期 包含init 和destroy 方法 不同之处 1 Applet运行在客户端 具有丰富的图形界面 2 Servlet运行在服务器端 没有图形界面 6 2Servlet的概念 Servlet的优点 vsCGI和类CGI开发语言 功能强大与客户端交互 直接与服务器交互 与不同的应用程序交换数据 使得与数据库的连接变得十分容易 跨平台性好开发难度低执行效率高性能优化Servlet是开发服务器端应用程序的一个很好选择 Servlet与JSP结合使用 能提供更强大的服务器端功能 6 3Servlet的生命周期 Servlet的生命周期开始于被装载到Servlet容器中 结束于被终止或重新装入时 加载Servlet初始化阶段服务阶段终止阶段 6 3Servlet的生命周期 注意 并不是为每个请求创建一个Servlet对象 而是根据请求创建不同的HttpServletRequest和HttpServletResponse的对象 然后再调用Servlet的service方法 所有请求共享相同的Servlet 初始化阶段 Servlet加载之后 调用构造方法进行实例化 然后调用init方法进行初始化 终止阶段在服务器关闭的时候 或者不再需要Servlet的时候 系统Servlet的destroy 方法来释放资源 6 3Servlet的生命周期 加载Servlet当服务器第一次启动的时候或者第一次访问Servlet的时候 Web容器加载Servlet 在下列情形下Servlet容器装入Servlet在Servlet容器启动后 客户首次向Servlet发出请求 Servlet容器启动时 Servlet的类文件被修改后 重新加载 6 3Servlet的生命周期 服务阶段如果容器接收到对此Servlet的请求时 容器则创建HttpServletRequest 请求信息 和HttpServletResponse 响应信息 的对象 然后把这两个对象作为参数调用Servlet的service 方法 如果请求方式是get调用doGet 方法 如果请求方式是post则调用doPost 方法 方法执行完 这次请求就结束了 等待新的请求 6 3Servlet的生命周期 GET方法用于检索信息 如文档 图表或数据库请求结果 请求的页面可以被设置为书签和使用电子邮件发送请求信息作为查询字符串发送 POST方法用于发送敏感信息 如信用卡号 或要保存到数据库中的信息请求的页面不能设置为书签或不能通过电子邮件发送发送的数据没有大小限制 6 3Servlet的生命周期 可以把方法写在doGet 方法中 在doPost 方法中调用执行 这样 无论你提交的是post还是get方法都可以执行 publicvoiddoPost HttpServletRequestrequest HttpServletResponseresponse throwsIOException ServletException doGet request response 调用doGet 方法 另外 HttpServlet处理客户端请求方式还有doPut doDelete doTrace doHead doOptions 但使用的比较少 6 4Servlet的工作方式 Servlet工作方式 HTTP请求 容器 请求 响应 1 2 Servlet实例 Servlet 通过URL找到 执行 service 请求 响应 3 4 doGet 请求 响应 5 响应 6 6 4Servlet的工作方式 Servlet基本工作流程客户机将请求发送到服务器 服务器上的Web容器实例化 装入 ServletWeb容器将请求信息发送到Servlet Servlet创建一个响应 并将其返回到Web容器 Web容器将响应发回客户机 服务器关闭或Servlet空闲时间超过一定限度时 调用destroy 方法退出 WebClient ServletContainer HttpServletRequest HttpServletResponse HttpServlet 1 sendHTTPrequest 2 parseHTTPrequest 3 newInstance 4 newInstance 5 callservicemethod 7 getrequestinformation 7 outputresponseinformation 8 sendHTTPresponse Servlet容器响应Web客户请求的时序图 6 5Servlet的编程接口 Servlet框架核心是javax servlet Servlet接口 所有的Servlet都必须实现该接口 与Servlet实现相关与Servlet配置相关与Servlet异常相关与请求和响应有关会话跟踪Servlet上下文Servlet协作过滤器其他类 6 5 1与Servlet实现相关 在定义Servlet时要继承的类或实现的接口Servlet接口GenericServlet类HttpServlet类用户开发自己的Servlet类时 必须扩展两个类中的一个 service方法为抽象的方法 该方法的声明形式为 publicabstractvoidservice ServletRequestreq ServletResponseres throwsservletException IOException 6 5 1与Servlet实现相关 如果Servlet类扩充HttpServlet类 通常不用实现service 方法 因为HttpServlet类已经实现了service方法 该方法的声明形式为 protectedvoidservice HttpServletRequestreq HttpServletResponseres throwsservletException IOExceptionHttpServlet的service方法首先从HttpServletRequest对象中获取HTTP请求方式的信息 然后再根据请求的方式调用相应的方法 例如 如果请求的方式为GET 那么调用doGet 方法 如果请求的方式为POST 那么调用doPost 方法 6 5 2开发一个简单的Servlet实例 创建Servlet组件过程程序员需要编写Servlet并将其部署到相应的容器中 建立一个 eb应用程序 建立Web应用程序的目录结构编写Servlet组件编译 Servlet是Java类 需要进行编译才能使用 放在classes目录下 定义web xml部署执行 如何访问Servlet HelloServletedu j2ee HelloServletHelloServlet HelloServlet 两个名称必须相同 为了方便使用Servlet 取个别名 完整的包名 类名 访问Servlet的URL 在web xml文件中配置Servlet web xml文件常见错误 servlet mapping中的name与servlet name中的name不一致添加多个mapping映射 Helloservlety2javaee sg ch02 HelloServletHelloServlet HelloServlet 请指出哪里有错误 servlet name不一致 HelloServlety2javaee sg ch02 HelloServletHelloServlet HelloServletHelloServlet HelloServlet2 多余的mapping 请指出哪里有错误 6 5 2开发一个Servlet实例 编写Servlet程序可以直接实现interface 但因为目前大多数Servlet是针对HTTP协议的Web服务器 所以通过从HttpServlet继承来编写Servlet程序 根据请求方式是GET还是POST 覆盖doGet doPost方法之一或全部 创建用户自己的Httpservlet 通常涉及以下4个步骤扩展Httpservlet抽象类 覆盖Httpservlet抽象类的部分方法 获取HTTP请求信息 生成HTTP响应结果 6 5 2开发一个Servlet实例 import publicclassFirstServletextendsHttpServlet privatestaticfinalStringCONTENT TYPE text html charset gb2312 publicvoiddoGet HttpServletRequestrequest HttpServletResponseresponse throwsIOException ServletException response setContentType CONTENT TYPE PrintWriterout response getWriter out println out println 第一个Servlet测试程序 out println out println 第一个Servlet测试程序 out println publicvoiddoPost HttpServletRequestrequest HttpServletResponseresponse throwsServletException IOException doGet request response 覆盖部分方法 扩展HttpServlet 获取HTTP请求信息生成HTTP响应结果 6 6Servlet与客户端的交互 Servlet能够通过request对象获取客户端的请求信息 并能够访问session中的信息 还能对cookie进行操作 此外 Servlet可以通过response对客户端进行响应 并能够把请求转发给其他的文件处理 6 6 1通过request对象获取请求信息 HttpServletRequest是一个接口 能够为HttpServlet提供请求信息 通常由服务器根据请求信息他创建该接口的对象 然后把该对象作为参数调用service方法 获得请求中参数值 getParameter java lang Stringname getParameterValues java lang Stringname 前者获取单值表单元素的值后者用于获取多值表单元素的值 例如复选框 6 6 1通过request对象获取请求信息 ProcesstheHTTPGetrequestpublicvoiddoGet HttpServletRequestrequest HttpServletResponseresponse throwsServletException IOException StringvName request getParameter name if vName null vName out println Theservlethasreceivedaparam TheNameis vName out close 6 6 1通过request对象获取请求信息 1 HTTP协议有什么特点 无状态2 什么是无状态 访问 访问 我刚刚被访问了两次 但是我不知道 是一个人访问了两次 还是两个人各访问一次 HTTP协议不记录用户的信息 6 6 1通过request对象获取请求信息 HTTP协议HTML HypertextMarkupLanguage 即超文本标记语言 是一种无状态的协议 客户端每次打开一个Web页面 它就会与服务器建立一个新的连接 发送一个新的请求到服务器 服务器处理客户端的请求 返回响应到客户端 并关闭与客户端建立的连接 当客户端发起新的请求 那么它重新与服务器建立连接 因此服务器并不记录关于客户的任何信息 对Session进行操作 3 如何显示张三和李四分别访问某一网页多少次 请求 请求 响应 响应 张三 李四 为了区分用户 需要为不同用户作登记 6 6 2对Session进行操作 购买2个商品 张三 李四 4 在线购物系统中如何对用户进行区分 购买3个商品 一共购买了5个商品 钱应该从谁的帐户上扣呢 6 6 2对Session进行操作 5 购物系统需求描述 查看所有商品 选择商品放入购物车 继续购物 结账 满载而归 6 6 2对Session进行操作 Web程序能不能像银行卡号那样 根据卡号锁定一个用户呢 请求 响应 响应的时候 由服务器给我分配一个唯一ID号 这样就能区别不同的用户了 再次请求的时候 我带着ID号 告诉服务器 我是谁 如何标识用户 6 6 2对Session进行操作 HttpSession对象服务器为每个会话创建一个HttpSession对象每个会话对象都有一个唯一的ID把用户的数据保存在相应的HttpSession对象内 第一次请求 响应 服务器创建一个HttpSession对象并把该对象的ID返回给用户 同时 服务器在内存中开辟一空间 用来保存该对象数据 把ID发送给客户端 第二次请求把ID一起发送给服务器 根据ID号服务器寻找内存中相应的数据 6 6 2对Session进行操作 请求1 请求2 请求n 什么是会话当前浏览器与服务器间多次的请求 响应关系 被称作一个会话会话能够在多个页面之间共享信息 6 6 2对Session进行操作 publicHttpSessiongetSession publicHttpSessiongetSession booleanvalue 会话的创建使用HttpServletRequest的getSession 方法创建会话 语法如下 会话的使用使用HttpSession接口的方法 进行保存数据 取出数据 publicvoidsetAttribute Stringparam Objectvalue publicObjectgetAttribute Stringparam 获取session对象的方法 getSession getSession booleanbool getSession true true false 返回与当前关联的会话 如果没有就创建后将其返回 返回与当前关联的会话 如果没有返回null 使用时 将其转换成原来数据类型 6 6 2对Session进行操作 session对象的存在周期session的创建浏览器访问服务器时 服务器为每个浏览器创建不同的session对象session的关闭调用session invalidate 方法 使session对象失效访问时间间隔大于非活动时间间隔 session对象失效关闭浏览器时 session对象失效 请求 在内存开辟空间保存数据信息 清空内存内当前浏览器相关数据信息 6 6 2对Session进行操作 publicvoiddoGet HttpServletRequestrequest HttpServletResponseresponse throwsServletException IOException HttpSessionsession request getSession true Objectcount session getAttribute COUNTER intcounter 0 if count null counter 1 将第一次计数存入sessionsession setAttribute COUNTER newInteger 1 else counter Integer count intValue counter 计数加一 将计数存入sessionsession setAttribute COUNTER newInteger counter 取出session对象内存储的值 把数据存储在session对象内 记录不同用户的访问次数 获得session对象 6 6 2对Session进行操作 在登录页面用户已录入用户名 现编写一个Servlet接收该数据 并把用户名值保存在HttpSession对象内 publicvoiddoGet HttpServletRequestrequest HttpServletResponseresponse throwsServletException IOException StringuserName request getParameter userName HttpSessionsession request getSession if userName null 6 6 3通过response对象对用户进行响应 HttpServletRequest是一个接口 主要定义的是与响应相关的方法 设置响应内容的MIME类型response setContentType CONTENT TYPE 创建输出流对象PrintWriterout response
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年事业单位工勤技能-湖南-湖南护理员三级(高级工)历年参考题库含答案解析
- 2025年事业单位工勤技能-湖南-湖南家禽饲养员四级(中级工)历年参考题库含答案解析
- 2025年事业单位工勤技能-湖北-湖北房管员一级(高级技师)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-湖北-湖北土建施工人员一级(高级技师)历年参考题库含答案解析
- 2025年事业单位工勤技能-湖北-湖北农机驾驶维修工三级(高级工)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-海南-海南中式面点师二级(技师)历年参考题库含答案解析
- 2025年事业单位工勤技能-浙江-浙江热力运行工四级(中级工)历年参考题库含答案解析(5套)
- 2025年事业单位工勤技能-河南-河南水工监测工四级(中级工)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-江西-江西房管员一级(高级技师)历年参考题库含答案解析(5套)
- 2025年事业单位工勤技能-广西-广西计算机文字录入处理员四级(中级工)历年参考题库含答案解析
- 火灾应急预案组织架构图
- 山东省济宁市第十五中学2023-2024学年(五四学制)六年级上学期第一次月考语文试题
- 北京马拉松赛事运作及战略定位研究
- DB6105T 180-2022 大豆种子田间检验技术规程
- 惠州卫生职业技术学院辅导员考试题库
- 试用期转正审批表及考核表实用文档
- 2023年爱粮节粮知识竞赛试题
- 印尼劳动法中文版
- 内科大查房课件综合医院抑郁诊疗-包头
- GB/T 9573-2013橡胶和塑料软管及软管组合件软管尺寸和软管组合件长度测量方法
- GB/T 3622-1999钛及钛合金带、箔材
评论
0/150
提交评论