| 百 乃 | 千 则 |岂能事事如意,但求无愧于心。 | 川 大 | 仞 刚 |把微笑留给世界,让世界因你微笑!

Slides:



Advertisements
Similar presentations
网络应用程序设计 2014 JavaBean. JavaBean 及其属性 JavaBean 就是一种 Java 的组件技术 JavaBean 是 Java 类 JavaBean 通过约定的方法名实现属性功能 简单属性 void setXxx(Type value) Type getXxx() boolean.
Advertisements

7.1 内置对象概述及分类 JSP 视频教学课程. JSP2.2 目录 1. 内置对象简介 1. 内置对象简介 2. 内置对象分类 2. 内置对象分类 3. 内置对象按功能区分 3. 内置对象按功能区分 4. 内置对象作用范围 4. 内置对象作用范围.
Java Web 开发 授课人:张鸽. 第三讲 JSP 内置对象  JSP 有以下九种内置对象,包括:  ·request ,请求对象  ·response ,响应对象  ·pageContext ,页面上下文对象  ·session ,会话对象  ·application ,应用程序对象.
LOGO 第 9 章 Java Servlet 和 JSP 编程 孙焘. 重点: servlet 编程原理 1 servlet 的基础类与编程实现 2 JSP 编程原理 3 JSP 的常用语法 4.
面向侧面的程序设计 方林博士 本文下载地址:
动态Web开发技术--JSP.
第五章 JSP内置对象 第4章学习了页面组成元素和使用方法。本章学习JSP内置对象的使用。使用JSP内置对象,可以方便操作页面,访问页面环境,实现页面内、页面间、页面与环境之间的通讯。 学习目标 熟悉主要内置对象的概念 理解主要内置对象的作用域和生命期 理解主要内置对象的作用和关系 熟悉主要内置对象的使用方法.
基于JSP搭建Web应用程序.
张孝祥IT课堂 -深入体验Java Web开发内幕
MVC Servlet与MVC设计模式.
基于解释性语言的手机跨平台架构 Sloan Yi. Qt MTK.
在PHP和MYSQL中实现完美的中文显示
移动开发的灵便迭代之道 黄凯.
Hello World 體驗實作第一個JSP程式.
第9章 过滤器和监听器技术 过滤器(Filter)和监听器(Listener)是两种特殊的Servlet技术。过滤器可以对用户的请求信息和响应信息进行过滤,常被用于权限检查和参数编码统一设置等。监听器可以用来对Web应用进行监听和控制的,增强Web应用的事件处理能力。 本章主要介绍过滤器和监听器的编程接口、基本结构、信息配置、部署和运行,最后通过案例说明过滤器和监听器的典型应用。
第四章 網頁表單與資料傳遞.
JSP程式設計 基本概論 歐陽芳泉 Fang-Chuan Ou Yang
软件设计模式与体系结构课程设计 周 宇 College of Information Science and Technology
Kvm异步缺页中断 浙江大学计算机体系结构实验室 徐浩.
AJAX基础.
数据库操作示例 import java.sql.*; //导入java.sql包 public class JDBCDemo {
专题4:JSP脚本和指令.
Java Applet 介绍.
专题一 Servlet技术 案例一简单计数器.
Arena System Technology Architecture 系统技术架构 1、Database V2(Lotus Notes)V3(Oracle8i) 2、Application Server SilverStream2.53 (Java as server side programming.
JSP自定义标签技术的分析与应用 ----Custom Tag 的分析与应用
SVN的基本概念 柳峰
崑山科技大學資訊管理系 伺服網頁程式設計 系統開發細部流程 教師:游峰碩.
第二讲 搭建Java Web开发环境 主讲人:孙娜
面向对象建模技术 软件工程系 林 琳.
第六讲 JSP中的文件操作(2) 教学目的 本讲继续讲述JSP中使用Java输入、输出流实现文件的读写操作 。 1 文件上传 2 文件下载
SOA – Experiment 3: Web Services Composition Challenge
辅导课程六.
第11章:一些著名开源软件介绍 第12章:服务安装和配置 本章教学目标: 了解当前一些应用最广泛的开源软件项目 搭建一个网站服务器
Windows网络操作系统管理 ——Windows Server 2008 R2.
第一讲 J2EE基础 博和利初级培训 —开发技能.
第11章 Android客户端与服务器交互.
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
DevDays ’99 The aim of this mission is knowledge..
任务1-3 使用Dreamweaver创建ASP网页
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
HTML 103 互動式網頁.
SOA – Experiment 2: Query Classification Web Service
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C语言程序设计 主讲教师:陆幼利.
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
Ch09 在網頁之間傳遞資訊 網頁程式設計.
JSP程序设计 第9章 Servlet简介.
第十二章 过滤器.
第四章 团队音乐会序幕: 团队协作平台的快速创建
企业应用实训教程 JSP企业级应用.
HTML 103 互動式網頁 助教:黃毓瑩.
实验七 安全FTP服务器实验 2019/4/28.
计算机网络与网页制作 Chapter 07:Dreamweaver CS5入门
项目二:HTML语言基础.
JSP实用教程 清华大学出版社 第2章 JSP运行环境和开发环境 教学目标 教学重点 教学过程 2019年5月7日.
iSIGHT 基本培训 使用 Excel的栅栏问题
第6章 PHP的数据采集.
Chapter 18 使用GRASP的对象设计示例.
GIS基本功能 数据存储 与管理 数据采集 数据处理 与编辑 空间查询 空间查询 GIS能做什么? 与分析 叠加分析 缓冲区分析 网络分析
阻塞式模型 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
基于列存储的RDF数据管理 朱敏
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
本节内容 进程 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第四章 UNIX文件系统.
创建、启动和关闭Activity 本讲大纲: 1、创建Activity 2、配置Activity 3、启动和关闭Activity
HTML表单 JSP借由标签所构成的表单区块中,取得用户在其中特定字段输入的数据內容 。 JSP 动态网页新技术.
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
表单页面 表单是用户利用浏览器对Web站点网络数据库进行查询的一种界面,用户利用表单可以输入信息或选择选项等,然后将这些信息提交给服务器进行处理。通过表单,既可以将浏览器的信息发送到Internet服务器上,同时表单也可以使用户与站点的浏览者交互或从浏览者那里收集信息。它是网页的设计者和使用者相互交流的工具。表单对象包括文本域(单行、多行、密码)、列表、菜单、复选框、单选框、按钮等。
Presentation transcript:

| 百 乃 | 千 则 |岂能事事如意,但求无愧于心。 | 川 大 | 仞 刚 |把微笑留给世界,让世界因你微笑! | 海 有 | 壁 无 |一切为了学生。 | 纳 容 | 立 欲 |为了学生一切。 | 百 乃 | 千 则 |岂能事事如意,但求无愧于心。 | 川 大 | 仞 刚 |把微笑留给世界,让世界因你微笑! 2018年11月16日

温故而知新! 2018年11月16日

第8章 JSP与JavaBean 8.1 JavaBean基础知识 8.2 编写和使用JavaBean 8.2.1 编写JavaBean组件 8.5 常见问题及解决方案 2018年11月16日

第9章 Java Servlet技术 9.1 Servlet基础知识 9.2 JSP与Servlet常见用法 9.4 常见问题及解决方案 2018年11月16日

9.1 Servlet基础知识 9.1.1 什么是Servlet 9.1.2 Servlet生命周期 9.1.3 Servlet的技术特点 9.1.4 Servlet与JSP的区别 9.1.5 Servlet在Java Web项目中的作用 9.1.6 Servlet部署 9.1.7 开发一个简单的Servlet 2018年11月16日

9.1.1 什么是Servlet Servlet是Java Web应用程序中的组件技术,是运行在服务器端的Java应用程序,实现与JSP类似的功能,Servlet本身是一个Java类,可以动态地扩展服务器的能力。 Web服务器上执行JSP文件的时候,首先JSP 容器会将其转译为Servlet文件,并自动编译解释执行。JSP中使用到的所有对象都将被转换为Servlet,然后被执行。 Servlet接收来自客户端的请求,将处理结果返回给客户端。 2018年11月16日

Servlet在服务器端处理用户信息可以完成以下任务: (1)获取客户端浏览器通过HTML表单提交的数据及相关信息。 Servlet是运行在Web服务器上的Java程序,作为来自Web浏览器或其它HTTP客户端的请求与HTTP服务器上的数据库和应用程序之间的中间层。所有的JSP文件都要事先转换为一个Servlet才能运行。 Servlet在服务器端处理用户信息可以完成以下任务: (1)获取客户端浏览器通过HTML表单提交的数据及相关信息。 (2)创建并返回对客户端的动态响应页面。 (3)访问服务端资源,如文件、数据库。 (4)为JSP页面准备动态数据,与JSP一起协作创建响应页面。 2018年11月16日

9.1 Servlet基础知识 9.1.1 什么是Servlet 9.1.2 Servlet生命周期 9.1.3 Servlet的技术特点 9.1.4 Servlet与JSP的区别 9.1.5 Servlet在Java Web项目中的作用 9.1.6 Servlet部署 9.1.7 开发一个简单的Servlet 2018年11月16日

9.1.2 Servlet生命周期 Servlet是在服务器端运行的。Servlet是javax.servlet包中HttpServlet类的子类,由服务器完成该子类的创建和初始化。Servlet的生命周期定义了一个Servlet如何被加载、初始化,以及它怎样接收请求、响应请求、提供服务。Servlet的生命周期主要由3个过程组成。 1. init()方法:服务器初始化 当首次创建Servlet时会调用init()方法,而不是每个用户请求都会调用此方法。当用户首次调用对应于Servlet的URL或再次启动服务器时,就会创建Servlet。当有客户再请求Servlet服务时,Web服务器将启动一个新的线程,在该线程中,调用service()方法响应客户的请求。 2018年11月16日

2. service()方法:初始化完毕,Servlet对象调用该方法响应客户的请求 对于每个请求,Servlet引擎都会调用此方法,并把Servlet的请求对象和响应对象传递给service()方法作为参数。方法声明如下: public void service(ServletRequest request,ServletResponse response) 其中,request对象和response对象由Servlet容器创建并传递给service()方法,service()方法会根据HTTP请求类型,调用相应的doGet()或doPost()等方法。service()方法可以被调用多次。 3. destroy()方法:调用该方法销毁Servlet对象 当Servlet被卸载时此方法被自动调用。可以用来释放Servlet占用的资源,比如数据库连接、Socket连接等。destroy()方法只会被调用一次。 2018年11月16日

9.1 Servlet基础知识 9.1.1 什么是Servlet 9.1.2 Servlet生命周期 9.1.3 Servlet的技术特点 9.1.4 Servlet与JSP的区别 9.1.5 Servlet在Java Web项目中的作用 9.1.6 Servlet部署 9.1.7 开发一个简单的Servlet 2018年11月16日

9.1.3 Servlet的技术特点 1.有效性 (有改进)在使用传统的CGI时,人们需为每一项Http请求启动新进程。如果CGI程序本身相对较短,启动进程的开销可以决定执行过程的时间。在使用Servlet时,使用“轻量” Java线程处理每一项请求,而不使用“重量”操作系统进程。在传统的CGI中,如果n项请求同时指向同一个CGI程序,则该CGI程序代码就会载入内存n次。但在使用Servlet时,可以存在n个线程,而只使用Servlet类的一个副本。 最后一点是,当CGI程序完成请求的处理工作时,就会终止程序,这样就难以缓存计算结果、保持数据库连接开放,并允许依赖于永久数据的其它优化操作。但在完成响应之后, Servlet仍然保留在内存中,因此可以直接在请求之间存储任意复杂的数据。 2018年11月16日

2.方便 Servlet包含扩展基础结构,能够自动对HTML表单数据进行分析和解码、读取和设置 Http头、处理Cookie、跟踪会话以及许多其它类似的高级功能。 2018年11月16日

3. 强大 Servlet可以支持几种功能,但利用常规的CGI却难以或无法实现这些功能。Servlet 可以直接与Web服务器对话,而常规的CGI程序则无法做到,至少在没有使用服务器专用的API的情况下无法实现这一点。例如,与Web服务器的通信更易于将相对URL转换成具体的路径名。多个Servlet之间还能共享数据,这更易于实现数据库连接共享和类似资源共享优化操作。Servlet还可以保留不同请求的信息,从而简化了类似会话跟踪和缓存早期计算结果的一些技术。 2018年11月16日

4. 可移植性 Servlet是使用Java编程语言并遵循标准的API编写的,所以几乎不进行任何更改便可以在各种服务器上运行。实际上,几乎每种主要的Web服务器都可通过插件或直接支持Servlet。如今它们已成为J2EE的一部分,因此业界对Servlet的支持逐渐变得越来越普及。 2018年11月16日

5. 安全性 2018年11月16日

6. 便宜 有许多免费可用的或者极为廉价的Web服务器适合于“个人”或小型Web站点使用。 除了Apache可免费使用之外,多数商业性质的Web服务器都相对比较昂贵,但一旦拥有了某种Web服务器,不管其成本如何,添加Servlet支持(如果原来的配置不支持Servlet)几乎无需花费额外成本。与其它许多支持CGI的服务器相比,后者要购买专用软件包,需要投入巨大的启动资金。 2018年11月16日

9.1 Servlet基础知识 9.1.1 什么是Servlet 9.1.2 Servlet生命周期 9.1.3 Servlet的技术特点 9.1.4 Servlet与JSP的区别 9.1.5 Servlet在Java Web项目中的作用 9.1.6 Servlet部署 9.1.7 开发一个简单的Servlet 2018年11月16日

9.1.4 Servlet与JSP的区别 Servlet是一种在服务器端运行的Java程序。而JSP是继Servlet后Sun公司推出的新技术,它是以Servlet为基础开发的。Servlet是JSP的早期版本,在JSP中,更加注重页面的表示,而在Servlet中则更注重业务逻辑的实现。因此,当编写的页面显示效果比较复杂时,首选是JSP。或者在开发过程中,HTML代码经常发生变化,而Java代码则相对比较固定时,可以选择JSP。而在处理业务逻辑时,首选则是Servlet。同时,JSP只能处理浏览器的请求,而Servlet则可以处理一个客户端的应用程序请求。因此,Servlet加强了Web服务器的功能。 2018年11月16日

Servlet与JSP相比有以下几点区别: (1)编程方式不同 Servlet是按照Java规范编写的Java程序,JSP是按照Web规范编写的脚本语言。 (2)编译方式不同 Servlet每次修改后需要编译后才能运行,JSP是被JSP Container编译为Servlet文件。 (3)运行速度不同 由于一个JSP页面在第一次被访问时要被编译成Servlet需要一段时间,所以客户端得到响应所需要的时间比较长。当该页面再次被访问时,它对应的.class文件已经生成,不需要再次翻译和编译,JSP引擎可以直接执行.class文件,因此JSP页面的访问速度会大为提高。总之,在运行速度上,Serlvet比JSP速度快。 2018年11月16日

9.1 Servlet基础知识 9.1.1 什么是Servlet 9.1.2 Servlet生命周期 9.1.3 Servlet的技术特点 9.1.4 Servlet与JSP的区别 9.1.5 Servlet在Java Web项目中的作用 9.1.6 Servlet部署 9.1.7 开发一个简单的Servlet 2018年11月16日

9.1.5 Servlet在Java Web项目中的作用 在浏览器访问服务器时,所有的JSP文件都会转化为Servlet文件,Servlet文件负责在服务器端处理用户的数据。这部分功能在开发服务器时已经封装成底层的功能,我们可不用关心这部分功能,除非自己在开发一个服务器时候才用到。 2018年11月16日

其中,控制器部分由Servlet完成,这也是我们实际在项目开发中用到的Servlet。 2.Servlet在MVC设计模式中应用 MVC是一种目前广泛流行的软件设计模式,早在70年代,IBM就进行了MVC设计模式的研究。近来,随着JavaEE的成熟,它成为在JavaEE平台上推荐的一种设计模型,是广大Java开发者非常感兴趣的设计模型。随着网络应用的快速增加,MVC模式对于Web应用的开发无疑是一种非常先进的设计思想,无论选择哪种语言,无论应用多复杂,它都能为理解分析应用模型提供最基本的分析方法,为构造产品提供清晰的设计框架,为软件工程提供规范的依据。MVC 设计模式是目前用得比较多的一种设计模式,被广泛应用于Web 应用程序中。Model(模型)表示业务逻辑层,View(视图)代表表示层,Controller(控制器)代表控制层。有关MVC设计模式的详细介绍请参考第1和12章。 其中,控制器部分由Servlet完成,这也是我们实际在项目开发中用到的Servlet。 2018年11月16日

3.Servlet在Web框架中的应用 在Java Web项目开发中用到的主要组件技术有JSP、Servlet、JavaBean、JDBC、XML、Tomcat等技术。为了整合Java Web组件技术提高软件开发效率,近年来推出许多基于MVC模式的Web框架技术,如,Struts,Maverick,WebWork 和Turbine 等。其中比较经典框架技术是Struts。 在Struts框架技术中,实现了MVC模式,其中已封装好核心控制器,由Servlet实现;我们还需要实现Action来完成对数据流量的控制,Action在Struts1.X版本中由Servet实现控制功能,在Struts2.X版本中Action是业务控制器,由Java类来实现。有关Servlet在Struts中的应用请参考Struts相关资料。 2018年11月16日

9.1 Servlet基础知识 9.1.1 什么是Servlet 9.1.2 Servlet生命周期 9.1.3 Servlet的技术特点 9.1.4 Servlet与JSP的区别 9.1.5 Servlet在Java Web项目中的作用 9.1.6 Servlet部署 9.1.7 开发一个简单的Servlet 2018年11月16日

9.1.6 Servlet部署 Servlet配置包含Servlet的名字、Servlet的类、初始化参数、启动装入的优先级、Servlet的映射、运行的安全设置、过滤器的名字和类以及它的初始化参数。 部署描述符文件是JavaEE程序的重要组成部分,通常位于“/WEB-INF”目录。主要功能包括如下几个方面。 (1)用于Servlet和Web应用程序的初始化。通过配置文件,可以减少初始化值的硬编码。 (2)Servlet/JSP定义。在Web应用程序中的每个Servlet和预编译的JSP文件都应在部署描述符中定义。 (3)MIME类型。可以在部署描述符中为每种内容定义MIME类型。 (4)安全。可以使用部署描述符控制对应用程序的访问。 将一个标准的部署描述符文件(web.xml)放在/WEB-INF目录下。 2018年11月16日

【例9-1】配置Servlet文件的配置文件(web.xml) <?xml version="1.0" encoding="UTF-8"?> <!--指定Servlet文件需要使用到的类库以及解析文件--> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <servlet> <!--指定servlet的名称--> <servlet-name>FirstServlet</servlet-name> <!--指定servlet编译好的.class文件的相对路径,区分大小写--> <servlet-class>ch10.FirstServlet</servlet-class> </servlet> <!--在解析到<url-pattern>中的路径请求时,由<servlet-name>指定的servlet来处理;<servlet-mapping>用于对<servlet>中指定的servlet来映射路径--> <servlet-mapping> <url-pattern>/FirstServlet</url-pattern> </servlet-mapping> <session-config> <session-timeout> 30 </session-timeout> </session-config> </web-app> 2018年11月16日

9.1 Servlet基础知识 9.1.1 什么是Servlet 9.1.2 Servlet生命周期 9.1.3 Servlet的技术特点 9.1.4 Servlet与JSP的区别 9.1.5 Servlet在Java Web项目中的作用 9.1.6 Servlet部署 9.1.7 开发一个简单的Servlet 2018年11月16日

9.1.7 开发一个简单的Servlet 2018年11月16日

2018年11月16日

2018年11月16日

【例9-2】Java Servlet应用实例(FirstServlet.java) package ch09; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; //Servlet文件继承父类HttpServlet public class FirstServlet extends HttpServlet { /*该方法是由NetBeans工具生成,工具不同该方法名称和写法不同,该方法不是必须的方法可以删除*/ protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //设置客户端的文件类型和编码方式 response.setContentType("text/html;charset=UTF-8"); //生成标准的输出对象out PrintWriter out = response.getWriter(); 2018年11月16日

out.println("<html>"); out.println("<head>"); try { out.println("<html>"); out.println("<head>"); out.println("<title>Servlet FirstServlet</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>这是我的第一个Servlet文件" + request.getContextPath () + "</h1>"); out.println("</body>"); out.println("</html>"); } finally { out.close(); } 2018年11月16日

/*使用Servlet文件时常用的两个方法之一,如果表单中请求是get,调用doGet方法执行*/ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } /*使用Servlet文件时常用的两个方法之一,如果表单中请求是post,调用doPost方法执行*/ protected void doPost(HttpServletRequest request, HttpServletResponse response) //获取Servlet版本信息,在MVC编程中可以不使用该方法,可以删除 public String getServletInfo() { return "Short description"; 2018年11月16日

第9章 Java Servlet技术 9.1 Servlet基础知识 9.2 JSP与Servlet常见用法 9.4 常见问题及解决方案 2018年11月16日

9.2 JSP与Servlet常见用法 9.2.1 通过Servlet获取表单中的数据及其应用实例 9.2.2 重定向与转发及其应用实例 9.2.2 重定向与转发及其应用实例 2018年11月16日

9.2.1 通过Servlet获取表单中的数据及其应用实例 本应用实例有一个paramsForm.jsp页面,页面中输入数据提交后由Servlet文件(ThreeParams.java)处理。 2018年11月16日

【例9-3】数据页面(paramsForm.jsp) <%@page contentType="text/html" pageEncoding="UTF-8"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>数据页面</title> </head> <body> <form method="post" action="/ch09/ThreeParams"> <p>数据1<input type="text" name="gr1"></p> <br> <p>数据2<input type="text" name="gr2"></p> <p>数据3<input tupe="text" name="gr3"></p> <p> <input type="submit" value="提交"> <input type="reset" value="清除"> </p> </form> </body> </html> 2018年11月16日

2018年11月16日

【例9-4】读取表单参数的Servlet文件(ThreeParams.java) package ch09; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ThreeParams extends HttpServlet { protected void processRequest(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<body>"); out.println(request.getParameter("gr1") +"<br>"); out.println(request.getParameter("gr2") +"<br>"); out.println(request.getParameter("gr3") +"<br>"); out.println("</body>"); out.println("</html>"); out.close(); } 2018年11月16日

throws ServletException, IOException { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) 2018年11月16日

【例9-5】Servlet的配置文件(web.xml) <?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns=http://java.sun.com/xml/ns/javaee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <servlet> <servlet-name>ThreeParams</servlet-name> <servlet-class>ch09.ThreeParams</servlet-class> </servlet> <servlet-mapping> <url-pattern>/ThreeParams</url-pattern> </servlet-mapping> <session-config> <session-timeout> 30 </session-timeout> </session-config> </web-app> 2018年11月16日

2018年11月16日

2018年11月16日

9.2 JSP与Servlet常见用法 9.2.1 通过Servlet获取表单中的数据及其应用实例 9.2.2 重定向与转发及其应用实例 9.2.2 重定向与转发及其应用实例 2018年11月16日

9.2.2 重定向与转发及其应用实例 重定向的功能是将用户从当前页面或者Servlet定向到另外一个JSP页面或者Servlet;转发的功能是将用户对当前JSP页面或者Servlet对象的请求转发给另外一个JSP页面或者Servlet对象。在Servlet类中使用HttpServletResponse类的重定向方法sendRedirect(),以及RequestDispatcher类的转发方法forward()。 尽管HttpServletResponse的sendRedirect()方法和RequestDispatcher的forward()方法都可以让浏览器获得另外一个URL所指向的资源,但两者的内部运行机制有着很大的区别。下面是HttpServletResponse的sendRedirect()方法实现的重定向与RequestDispatcher的forward()方法实现的转发的比较: 2018年11月16日

RequestDispatcher的forward()方法只能将请求转发给同一个Web应用中的组件;而HttpServletResponse的sendRedirect()方法不仅可以重定向到当前应用程序中的其它资源,还可以重定向到同一个站点上的其它应用程序中的资源,甚至是使用绝对URL重定向到其它站点的资源。如果传递给HttpServletResponse的sendRedirect()方法的相对URL以“/”开头,它是相对于整个Web站点的根目录;如果创建RequestDispatcher对象时指定的相对URL以“/”开头,它是相对于当前WEB应用程序的根目录。 调用HttpServletResponse的sendRedirect()方法重定向的访问过程结束后,浏览器地址栏中显示的URL会发生改变,由初始的URL地址变成重定向的目标URL;而调用RequestDispatcher的forward()方法的请求转发过程结束后,浏览器地址栏保持初始的URL地址不变。 2018年11月16日

HttpServletResponse的sendRedirect()方法对浏览器的请求直接作出响应,响应的结果就是告诉浏览器去重新发出对另外一个URL的访问请求,这个过程好比有个绰号叫“浏览器”的人写信找张三借钱,张三回信说没有钱,让“浏览器”去找李四借,并将李四现在的通信地址告诉给了“浏览器”。于是,“浏览器”又按张三提供通信地址给李四写信借钱,李四收到信后就把钱汇给了“浏览器”。可见,“浏览器”一共发出了两封信和收到了两次回复,“浏览器”也知道他借到的钱出自李四之手。RequestDispatcher的forward()方法在服务器端内部将请求转发给另外一个资源,浏览器只知道发出了请求并得到了响应结果,并不知道在服务器程序内部发生了转发行为。这个过程好比绰号叫“浏览器”的人写信找张三借钱,张三没有钱,于是张三找李四借了一些钱,甚至还可以加上自己的一些钱,然后再将这些钱汇给了“浏览器”。可见,“浏览器”只发出了一封信和收到了一次回复,他只知道从张三那里借到了钱,并不知道有一部分钱出自李四之手。 2018年11月16日

RequestDispatcher的forward()方法的调用者与被调用者之间共享相同的request对象和response对象,它们属于同一个访问请求和响应过程;而HttpServletResponse的sendRedirect()方法调用者与被调用者使用各自的request对象和response对象,它们属于两个独立的访问请求和响应过程。对于同一个Web应用程序的内部资源之间的跳转,特别是跳转之前要对请求进行一些前期预处理,并要使用HttpServletResponse的setAttribute()方法传递预处理结果,那就应该使用RequestDispatcher的forward()方法。不同Web应用程序之间的重定向,特别是要重定向到另外一个Web站点上的资源的情况,都应该使用HttpServletResponse的sendRedirect()方法。 无论是RequestDispatcher的forward()方法,还是HttpServletResponse的sendRedirect()方法,在调用它们之前,都不能有内容已经被实际输出到了客户端。如果缓冲区中已经有了一些内容,这些内容将被从缓冲区中清除。 2018年11月16日

本实例有一个JSP页面和两个Servlet文件,主要功能是求一个实数的平方值。在sendForward 本实例有一个JSP页面和两个Servlet文件,主要功能是求一个实数的平方值。在sendForward.jsp页面上用户可以在其表单中输入一个实数,并提交给名为Verify(Verify.java)的Servlet对象。如果用户的输入不符合要求或者输入的实数大于6000或者小于-6000,那么就重新将用户请求定向到sendForward.jsp页面。如果用户的输入符合要求Verify就将用户对sendForward.jsp页面的请求转发到名字为ShowMessage(ShowMessage.java)的Servlet对象,该Servlet文件计算实数的平方。另外需要配置Servlet文件。 2018年11月16日

【例9-6】数据输入页面(sendForward.jsp) <%@page contentType="text/html" pageEncoding="UTF-8"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>数据输入页面</title> </head> <body> <form action="Verify" method="post"> 请输入一个实数:<input type="text" name="number"> <input Type="submit" value="确定"> </form> </body> </html> 2018年11月16日

2018年11月16日

【例9-7】输入数据判断的Servlet类(Verify.java) package ch09; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class Verify extends HttpServlet { public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{ String number=request.getParameter("number"); 2018年11月16日

double n=Double.parseDouble(number); if(n>6000||n<-6000) try{ //作用是把字符串转换为Double double n=Double.parseDouble(number); if(n>6000||n<-6000) //重定向到sendForward.jsp response.sendRedirect("sendForward.jsp"); else{ RequestDispatcher dispatcher= request.getRequestDispatcher("ShowMessage"); dispatcher.forward(request,response); //转发到另一个servlet文件 } catch(NumberFormatException e){ response.sendRedirect("sendForward.jsp"); //重定向到sendForward.jsp public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{ doPost(request,response); 2018年11月16日

【例9-8】求平方运算的Servlet类(ShowMessage.java) package ch09; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ShowMessage extends HttpServlet { public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{ 2018年11月16日

response.setContentType("text/html;charset=GB2312"); PrintWriter out=response.getWriter(); String number=request.getParameter("number"); //获取客户提交的信息 double n=Double.parseDouble(number); out.println(number+"的平方:"+(n*n)); } public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{ doPost(request,response); 2018年11月16日

2018年11月16日

第9章 Java Servlet技术 9.1 Servlet基础知识 9.2 JSP与Servlet常见用法 9.4 常见问题及解决方案 2018年11月16日

9.3 基于JSP+Servlet留言系统的应用实例 早期的Java Web开发使用Servlet来开发Web应用程序,但是Servlet开发Web应用程序效率低。为了提高Web项目开发效率,Sun公司推出JSP技术,JSP开发Web项目的效率比较高,但是运行速度没有Servlet快。目前,Java Web应用程序是由JSP开发,部署到服务器上,在运行JSP文件时,JSP文件首先转化Servlet文件,然后所有数据处理都是由Servlet完成。 Servlet主要用于MVC设计模式中控制器部分或者框架(Struts等)中控制器部分。有关Servlet作为控制器部分,将在第10章基于MVC实训中介绍。本例并没有严格按照MVC设计模式,其中本例的Servlet文件是对数据的处理并有一部分控制功能。 本例实现留言板功能,页面如图9-9所示。 2018年11月16日

2018年11月16日

【例9-9】留言板页面(messageBoard.jsp) <%@page contentType="text/html" pageEncoding="UTF-8"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>留言板页面</title> </head> <body background="image/f.jpg" > <form action="AddMessageServlet" method="post"> 留 言 者:<input type="text" name="author" size="30"> <br> 留言标题:<input type="text" name="title" size="30"> 留言内容:<textarea name="content" rows="8" cols="30"></textarea> <p> <input type="submit" value="提交"> <input type="reset" value="重置"> <a href="showMessage.jsp">查看留言</a> </form> </body> </html> 2018年11月16日

【例9-10】留言板信息处理Servlet文件(AddMessageServlet.java) package ch09; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; public class AddMessageServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response); } 2018年11月16日

String(request.getParameter("author").getBytes("ISO-8859-1"),"UTF-8"); protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String author=new String(request.getParameter("author").getBytes("ISO-8859-1"),"UTF-8"); String title=new String(request.getParameter("title").getBytes("ISO-8859-1"),"UTF-8"); String content=new String(request.getParameter("content").getBytes("ISO-8859-1"),"UTF-8"); //获取当前时间并格式化时间为指定格式 SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String today=format.format(new Date()); MessageBean mm=new MessageBean(); mm.setAuthor(author); mm.setTitle(title); mm.setContent(content); mm.setTime(today); 2018年11月16日

HttpSession session=request.getSession(); //通过session对象获取应用上下文 ServletContext scx=session.getServletContext(); //获取存储在应用上下文中的集合对象 ArrayList wordlist=(ArrayList)scx.getAttribute("wordlist"); if(wordlist==null) wordlist=new ArrayList(); //将封装了信息的值JavaBean存储到集合对象中 wordlist.add(mm); //将集合对象保存到应用上下文中 scx.setAttribute("wordlist",wordlist); response.sendRedirect("showMessage.jsp"); } 2018年11月16日

AddMessageServlet. java中需要一个JavaBean保存messageBoard AddMessageServlet.java中需要一个JavaBean保存messageBoard.jsp文件提交的数据,该JavaBean代码如【例9-11】。另外AddMessageServlet.java处理数据后由showMessage.jsp文件来显示留言信息,showMessage.jsp代码如【例9-12】。 2018年11月16日

【例9-11】用于保存messageBoard.jsp文件中数据的Bean(MessageBean.java) package ch09; public class MessageBean { private String author; private String title; private String content; private String time; public MessageBean(){ } public String getAuthor() { return author; public void setAuthor(String author) { this.author = author; 2018年11月16日

public String getTitle() { return title; } public void setTitle(String title) { this.title = title; public String getContent() { return content; public void setContent(String content) { this.content = content; public String getTime() { return time; public void setTime(String time) { this.time = time; 2018年11月16日

【例9-12】显示留言信息页面(showMessage.jsp) <%@page import="ch09.MessageBean"%> <%@page import="java.util.ArrayList"%> <%@page contentType="text/html" pageEncoding="UTF-8"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>显示留言内容</title> </head> <body background="image/f.jpg"> <% ArrayList wordlist=(ArrayList)application.getAttribute("wordlist"); if(wordlist==null||wordlist.size()==0) out.print("没有留言可显示!"); else{ for(int i=wordlist.size()-1;i>=0;i--){ MessageBean mm=(MessageBean)wordlist.get(i); %> 2018年11月16日

留 言 者:<%=mm.getAuthor() %> <p>留言时间:<%=mm.getTime() %></p> <p>留言标题:<%=mm.getTitle() %></p> <p> 留言内容: <textarea rows="8" cols="30" readonly> <%=mm.getContent()%> </textarea> </p> <a href="messageBoard.jsp">我要留言</a> <hr width="90%"> <% } %> </body> </html> 2018年11月16日

【例9-13】配置Servlet的配置文件(web.xml) … <servlet> <servlet-name>AddMessageServlet</servlet-name> <servlet-class>ch09.AddMessageServlet</servlet-class> </servlet> <servlet-mapping> <url-pattern>/AddMessageServlet</url-pattern> </servlet-mapping> 2018年11月16日

2018年11月16日

总结与回顾! 2018年11月16日

第9章 Java Servlet技术 9.1 Servlet基础知识 9.1.1 什么是Servlet 9.1.2 Servlet生命周期 9.1.4 Servlet与JSP的区别 9.1.5 Servlet在Java Web项目中的作用 9.1.6 Servlet部署 9.1.7 开发一个简单的Servlet 9.2 JSP与Servlet常见用法 9.2.1 通过Servlet获取表单中的数据及其应用实例 9.2.2 重定向与转发及其应用实例 9.3 基于JSP+Servlet留言系统的应用实例 9.4 常见问题及解决方案 2018年11月16日

请复习已学知识! 预习后面章节的内容 并完成第10章项目的 功能! 2018年11月16日