基于 java ee 的 web 开发技术

103
基基 Java EE 基 Web 基基基基 苗苗苗 Tel :8355085 Email:miaoxikui@163. com QQ:250750068

Upload: elsie

Post on 17-Mar-2016

140 views

Category:

Documents


3 download

DESCRIPTION

基于 Java EE 的 Web 开发技术. 苗锡奎 Tel :8355085 Email:[email protected] QQ:250750068. 课程内容. 俯瞰 Java EE Java EE 实战 ( 结合一个小项目 ). 俯瞰 Java EE. Java EE 的整体把握 Java EE 软件的架构. Java EE 实战. Eclipse 工具的使用 MyEclipse 的使用 Dreamweaver 的使用(美工工具) Tomcat,Mysql 的使用 Java EE 软件开发的一般过程. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 基于 Java EE 的 Web 开发技术

基于 Java EE 的 Web 开发技术 苗锡奎

Tel :8355085 Email:[email protected]:250750068

Page 2: 基于 Java EE 的 Web 开发技术

课程内容俯瞰 Java EEJava EE 实战 ( 结合一个小

项目 )

Page 3: 基于 Java EE 的 Web 开发技术

俯瞰 Java EEJava EE 的整体把握Java EE 软件的架构

Page 4: 基于 Java EE 的 Web 开发技术

Java EE 实战 Eclipse 工具的使用 MyEclipse 的使用 Dreamweaver 的使用(美工工具) Tomcat,Mysql 的使用 Java EE 软件开发的一般过程

Page 5: 基于 Java EE 的 Web 开发技术

Java EE 概览 (Java 2 平台已成为历史 )

Java ME 概览Java Platform Micro Edition,Java 平台微型版。 Java SE 概览 Java Platform Standard Edition,Java 平台标准版。 Java EE 概览 ( 重点讲 )Java Platform Enterprise Edition,Java 平台企业版。Java1.0 版终于在 1996 年年初正式发表

Page 6: 基于 Java EE 的 Web 开发技术

Java EE 概览 Java EE 核心是一组技术规范与指南。 Java EE 是建立在 Java 平台上的企业级应用开发的解决方案。 Java EE 技术的基础便是 J

ava 平台,不但具有 Java SE 平台的所有功能,同时还提供了对 EJB , Servlet , JSP ,XML 等技术的全面支持。

Page 7: 基于 Java EE 的 Web 开发技术

Java EE 概览 Java EE 技术的基础就是 Java SE 。 Java EE 已经成为企业级开发的工业标准和首选平台。 其最终目标是成为一个支持企业级应用开发的体系结构,简化企业级开发,部署和管理等复杂问题。

Page 8: 基于 Java EE 的 Web 开发技术

Java EE 都包含什么? 企业应用的复杂性导致 Java EE 包含内容的复杂性。 Java EE 包括 JSP , JavaBean, JDBC , Serv

let JNDI , RMI , EJB , JMS , JavaMail ,JMX , JTA ( API ), JCA,JAF 等 13 种核心技术。

学习前 4 项技术,要学明白就够用了。你就可以称得上一个 Java EE WEB 的程序员了。 为了这个目的下面就努力学习吧!

Page 9: 基于 Java EE 的 Web 开发技术
Page 10: 基于 Java EE 的 Web 开发技术

Java EE 软件的架构2- 层体系架构3- 层体系架构N- 层体系架构Java EE 各项技术工作在哪个层上

Page 11: 基于 Java EE 的 Web 开发技术

2- 层体系架构 -- jsp+javabeans

Model1( 最简单,最原始的开发模式 ) 结合业务逻辑 (JavaBean) 和 JSP 技术来实现业务逻辑和流程控制,来完成应用开发 ( 优缺点 )

Page 12: 基于 Java EE 的 Web 开发技术

MVC -- jsp+javabeans+servlets

MVC 是 Model - View - Controller 的简写。“ Model” 代表的是应用的业务逻辑(通过 JavaBean , EJB 组件实现), “ View” 是应用的表示页面(由 JSP 页面产生),“ Controller” 是对业务流程的控制(一般是一个 Servlet ),通过这种设计模式把 ------ 应用逻辑,处理过程和显示页面分成不同的组件实现。这些组件可以进行交互和重用。 ( 优缺点 )

Page 13: 基于 Java EE 的 Web 开发技术

MVC -- jsp+javabeans+servlets

模型 (Model) 部分负责 业务逻辑 javabeans 视图 (view) 部分负责 显示界面 jsp 控制器 (controller) 负责与用户进行交互作用:接受用户的请求,调用 Model 操作数据库,选择相应的视图展现给用户 servlet Action

Page 14: 基于 Java EE 的 Web 开发技术

MVC 关系图模型( Model )封装程序内部的数据状态封装业务处理方法内部状态改变时通知视图

视图( view )显示模型中的数据接受模型的数据将用请求作传递给控制器Controller (控制器)接受用户操作调用模型的业务处理方法选择相应用户造作的视图

数据状态查询

调用模型 获取数据

选择视图

截获用户请求

Page 15: 基于 Java EE 的 Web 开发技术

3- 层体系架构 -- jsp+javabeans+servlets

Model 2

Page 16: 基于 Java EE 的 Web 开发技术

基于 Java EE 企业级 WEB 应用的体系结构 分层的思想引入到软件领域 分层的优势与劣势

数据层 DB

Web 服务器业务层表示层

Page 17: 基于 Java EE 的 Web 开发技术

N- 层体系架构 (n=4) (俯看) 21 天学通 Java EE - 人民邮电出版社 Jsp 基础教程,精通 Struts 基于 MVC 的 Java.Web 设计与开发。 最重要的是官网上的帮助文档 www.mldn.cn www.v512.com www.verycd.com www.langsin.com www.eimeihe.com www.j2eedve.com

Page 18: 基于 Java EE 的 Web 开发技术

系统的架构

浏览器视图JSP

控制器

模型

Hibernate

DB

选择实例化

请求

响应struts-config.xml

hibernate-config.xml

映射文件

第一层 第二层 第三层 第四层

Page 19: 基于 Java EE 的 Web 开发技术
Page 20: 基于 Java EE 的 Web 开发技术

目标 - 学习前 4 项技术 JDBC , JSP , JavaBean , Servlet

准备工作

Page 21: 基于 Java EE 的 Web 开发技术

容器 - 充当中间件的角色 WEB 容器:也可以叫 WEB 服务器,给处于其中的应用程序组件 (JSP , Servlet 等 ) 提供一个运行环境,我们只与容器打交道,容器管理我们写好的 jsp,servlet 等文件,我们不需要了解容器如何管理的。 tomcat 一个例子去钟表厂买个钟表,我们当需要看时间的时候只要会读数即可,钟表是如何工作的我们去关系它,是钟表这个容器自己管理自己的各个零件。

Page 22: 基于 Java EE 的 Web 开发技术

JDK

JDK(Java Development Kit , Java 开发包, Java 开发工具 ) 是一个写 Java 的 applet 和应用程序的程序开发环境。它由一个处于操作系统层之上的运行环境还有编译,调试和运行 Java语言写的 applet 和应用程序所需的工具组成。 包括了 Java 运行环境( Java Runtime Envirnment ),

Java 工具和 Java 基础的类库,不论什么 Java 应用服务器实质都是内置了某个版本的 JDK 。因此掌握 JDK 是学好 Java 的第一步。

Page 23: 基于 Java EE 的 Web 开发技术

JDK 的安装 JDK 的下载 可以到 SUN公司的官方站进行下载 .当前最新版是 jdk6 ,网址为: http://

java.sun.com/javase/downloads/index.jsp JDK 的安装 十分简单,一路下一步,直到完成安装。 配置环境变量 右键:我的电脑 >属性 >高级 > 环境变量 > 在 ( 为你自己当前使用的账户 ) “ 用户 变量”或是“系统变量”中都可以点击,新建建立三个环境变量: 1 )变量名 :path    变量值 : D:\Java\jdk1.5.0_06\bin

2 )变量名 :java_home   变量值 : D:\Java \Java\jdk1.5.0_06 3 )变量名 :classpath     变量值 : .;D:\Java\jdk1.5.0_06\lib\tools.jar;

D:\Java\jdk1.5.0 06\lib\dt.jar; D:\Java\jdk1.5.0_06\jre\lib\rt.jar;

Page 24: 基于 Java EE 的 Web 开发技术

工欲善其事 , 必先利其器 --IDE

Integrated Develop Environment- 集成开发环境 Eclipse MyEclipse (推荐 ) NetBeans( 要求机器配制高 ) JBuilder

Page 25: 基于 Java EE 的 Web 开发技术

Eclipse 的下载、安装、配置下载地址:

http://www.eclipse.org/downloads/ Eclipse 的安装 将下载的压缩包解压,然后将整个目录移动到你想要的位置。

Page 26: 基于 Java EE 的 Web 开发技术

MyEclipse 的下载、安装、配置MyEclipse插件是什么

– 简单而言, MyEclipse 是 Eclipse 的插件,也是一款功能强大的 Java EE集成开发环境,支持代码编写、配置、测试以及除错。 MyEclipse 是一个专门为 Eclipse 设计的商业插件和开源插件的完美集合。 MyEclipse 为 Eclipse 提供了一个大量私有和开源的 Java 工具的集合,很大程度上解决了各种开源工具的不一致和缺点问题,并大大提高了 Java 和 JSP应用开发的效率。– MyEclipse 的实际价值来自其发布的大量的可视化开发工具和实用组件。如 CCS/JS/HTML/XML 的编辑器,帮助创建 E

JB 和 Struts 项目的向导并产生项目的所有主要的组件如 Action/Session Bean/Form 等,此外还包含编辑 Hibernate配置文件和执行 SQL语句的工具。

Page 27: 基于 Java EE 的 Web 开发技术

数据库方面推荐使用 Mysql 和 Oracle 不推荐使用 sqlServer 系列

Page 28: 基于 Java EE 的 Web 开发技术

开发与运行环境 选择开源优势编码与设计工具 : Eclipse3.2.1 开源 Java EE辅助工具 MyEclipse 非开源 数据库服务器 : Mysql 5.0.21 开源 web 应用服务器 : Tomcat 6.0 开源

Page 29: 基于 Java EE 的 Web 开发技术

安装顺序 JDK TOMCAT Eclipse MyEclipse Mysql

Page 30: 基于 Java EE 的 Web 开发技术

目标之一 :JDBC 之旅 What is JDBC ?

JDBC ( Java DataBase Connectivity ,中文意为 Java 数据库连接)是在 Java 中用面向对象的方法来连接数据库的技术。

Page 31: 基于 Java EE 的 Web 开发技术

JDBC的主要类包 java.sql包,提供在 Java 中访问和处理存储于客户端数据源中数据的 API 。 javax.sql包,提供在 Java 中访问和处理存储于服务器端数据源进行的 API 。

Page 32: 基于 Java EE 的 Web 开发技术

JDBC可访问的数据源关系型数据库,如: Oracle , DB2 , SQL S

erver , My SQL , Access 等。 Excel 等。 DBase , Foxpro , Paradox 等。

Page 33: 基于 Java EE 的 Web 开发技术

JDBC的驱动程序 要想与特定的数据库产品打交道,如mysql 就必须要提供连接该数据库的驱动文件 (.jar) Mysql :mysql-connection.jar Oracle :classes12.jar

Page 34: 基于 Java EE 的 Web 开发技术

JDBC 连接数据库的方法

Java 程序连接数据库的方法实际上有下面 4 种。

Page 35: 基于 Java EE 的 Web 开发技术

JDBC 连接数据库的方法JDBC-ODBC桥和 ODBC驱动程序。本机代码和 Java驱动程序。 ( 经常使用 )JDBC 网络的纯 Java驱动程序。本机协议纯 Java驱动程序。

Page 36: 基于 Java EE 的 Web 开发技术

本机代码和驱动程序连接数据库的步骤加载要使用的数据库驱动类,该工作由 Class类的静态方法 forName 完成,它加载相应的驱动程序类,并创建该类的一个实例。如下语句: Class.forName("org.gjt.mm.mysql.Driver");

Page 37: 基于 Java EE 的 Web 开发技术

本机代码和驱动程序连接数据库的步骤 声明一个 Connection 接口的对象。如: Connection

conn; 并使用 DriverManager类的静态方法 getConnection建立数据库连接,该方法主要有两种重载形式:Connection getConnection(String url)Connection getConnection(String url,String user,String

password)conn = DriverManager.getConnection("jdbc:mysql://loc

alhost:3306/test", "root", "root");

Page 38: 基于 Java EE 的 Web 开发技术

java.sql 包中与数据库操作有关的接口 Connection Statement ResultSet PreparedStatement CallableStatement

Page 39: 基于 Java EE 的 Web 开发技术

设置可滚动的 ResultSet 类型 一般在创建结果集的通常使用如下方式: Statement st = conn.CreateStatement()

ResultSet rs = Statement.excuteQuery(sql);  由于这种结果集不支持滚动的读去功能所以如果获得这样一个结果集,只能使用它里面的 next() 方法,逐个的读去数据。在使用的时候非常的不便。那么怎么样才能使结果集可以支持前后滚动的效果呢? 要实现可以滚动的 ResultSet 在创建 Statement 时用如下的方法。

Page 40: 基于 Java EE 的 Web 开发技术

设置可滚动的 ResultSet 类型 Statement st = conn.createStatement(int resultSetType, int resultSetC

oncurrency)ResultSet rs = st.executeQuery(sqlStr)

其中两个参数的意义是:resultSetType 是设置 ResultSet 对象的类型可滚动,或者是不可滚动。取值如下: ResultSet.TYPE_FORWARD_ONLY 只能向前滚动 ResultSet.TYPE_SCROLL_INSENSITIVE 和 Result.TYPE_SCROLL_SENSITIVE 这两个方法都能够实现 任意的前后滚动,使用各种移动的 ResultSet 指针的方法。二者的区别在于前者对于修改不敏感,而后者对于修改敏感。resultSetConcurency 是设置 ResultSet 对象能够修改的,取值如下: ResultSet.CONCUR_READ_ONLY 设置为只读类型的参数。 ResultSet.CONCUR_UPDATABLE 设置为可修改类型的参数。所以如果只是想要可以滚动的类型的 Result 只要把 Statement如下赋值就行了。

Page 41: 基于 Java EE 的 Web 开发技术

设置可滚动的 ResultSet 类型 Statement st = conn.createStatement(Result

Set.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);ResultSet rs = st.excuteQuery(sqlStr);

这时得到的就是可滚动的 ResultSet 。 这个类型支持前后滚动取得纪录 next()、 pre

vious() ,回到第一行 first() ,移到最后一行 last() 等操作。

Page 42: 基于 Java EE 的 Web 开发技术

目标之二 :JSP 之旅目标之二 :JSP之旅

Page 43: 基于 Java EE 的 Web 开发技术

What is JSP ?— Java Server Pages

JSP 是由 Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。它是在传统的网页 HTML 文件中插入 Java 程序段 (Scriptlet) 和 JSP 标记 (tag) 。 JSP跨平台。编译后运行,运行效率高。 缺点: 开发运行环境较 ASP、 PHP 等复杂一些。

Page 44: 基于 Java EE 的 Web 开发技术

JSP 没有什么深奥的东西就是在 HTML 中嵌入 Java 代码和一些 JSP 标签构成。<<HTMLHTML>> <<HEADHEAD>> <<TITLETITLE>>JSP JSP 页面 页面 <</TITLE/TITLE>> <</HEAD/HEAD>> <<BODYBODY>> <<% --% -- 生成并显示一个从生成并显示一个从 00 ~~ 99 的字符串的字符串 %%>> <<%@ page language="java" %%@ page language="java" %>> <<%! String str="0"; %%! String str="0"; %>> <<% for (int i=1; i % for (int i=1; i <<10; i++10; i++ = = {{     str = str + i;str = str + i;     } %} %>> <<PP>> <<%= str %%= str %> > <<PP>> <</BODY/BODY>> </HTML></HTML>

Page 45: 基于 Java EE 的 Web 开发技术

JSP

JSP

脚本元素 指令元素 标准动作 html

Page 46: 基于 Java EE 的 Web 开发技术

嵌入 java 代码的标记 --- 脚本元素 <% String name=“name” ;%> <%=name%> <%! public void doSome() {System.out.println(“hello classmates”);}%> <!-- 这是注释 , 但客户端可以查看到 --> <%-- 这也是注释 , 但客户端不能查看到 --%>

Page 47: 基于 Java EE 的 Web 开发技术

JSP 指令元素

JSP 指令

page include taglib

Page 48: 基于 Java EE 的 Web 开发技术

JSP 指令元素 page 指令用于设置 JSP 页面的属性 <%@page language="java"%> <%@ page contentType="text/html; charset=gb2312"%> include 指令用于在 jsp 页面中静态包含一个文件,该文件可以是 jsp 页面, HTML 页面 . <%@include file="head.jsp"%> taglib 指令可以让 JSP 页面使用特定的标签 <%@ taglib uri ="/mytaglib.tld" prefix="mytags"%> <%@ taglib uri="http://struts.apache.org/tags-bean"

prefix="bean"%>

Page 49: 基于 Java EE 的 Web 开发技术

JSP 标准动作动作语法包括 <jsp:forward> , <jsp:include> ,

<jsp:getProperty> , <jsp:setProperty> 和 <jsp:useBean>, <jsp:plugin> 。

Page 50: 基于 Java EE 的 Web 开发技术

总结 JSP 页面的组成,即静态 HTML、脚本元素和 JSP 指令、 JSP 标准动作。 JSP 表达式包括在 <%= %> 内; Scriptlet 包含在 <

% %> 内;声明包含在 <%! %> 内 JSP 指令共有三种类型,即 page 、 include 和

taglib 。 JSP 指令包括在 <%@ 和 %> 内 page 指令用于设置 JSP 页面的属性; include 指令用于在 JSP 页面嵌入其他文件 ; taglib 指令用于在

JSP 页面中使用标签

Page 51: 基于 Java EE 的 Web 开发技术

JSP 页面元素静态内容

指 令表达式

Scriptlet

JSP 页面<% Java 代码 ;%>

<%=Java 表达式 %>

HTML静态文本以“ <%@ ” 开始,以“ %> ” 结束。比如:<%@ include file = " Filename" %>

声 明动作

<%! 函数或方法 %>

以“ <jsp: 动作名 ” 开始,以“ </jsp:动作名 > ” 结束比如: <jsp:include page=" Filename" />

注释 <!-- 这是注释 , 但客户端可以查看到 --><%-- 这也是注释 , 但客户端不能查看到 --%>

Page 52: 基于 Java EE 的 Web 开发技术

JSP 内置对象 JSP 有以下九种内置对象,包括: request ,请求对象 response ,响应对象 pageContext ,页面上下文对象 session ,会话对象 application ,应用程序对象 out ,输出对象 config ,配置对象 page ,页面对象 exception ,例外对象

Page 53: 基于 Java EE 的 Web 开发技术

内置对象

输入/输出对象 作用域通信对象 Servlet 对象 错误对象

request

response

out

session

pageContext

application

page

config

exception

Page 54: 基于 Java EE 的 Web 开发技术

内置对象 request ,请求对象 response ,响应对象 session ,会话对象 application ,应用程序对象

Page 55: 基于 Java EE 的 Web 开发技术

request 对象 表示客户端对网页的请求 实现 HttpServletRequest 接口 使用 HTTP 协议处理客户端的请求

JSP 页面

客户端

请求信息

表示并存储客户端的请求

请求

服务器

Page 56: 基于 Java EE 的 Web 开发技术

request 对象常用方法1:String getParameter(String name)

根据页面表单组件名称获取请求页面提交数2:String[ ] getParameterValues (String name)

获取页面请求中一个表单组件对应多个值时的用户的请求数据

Page 57: 基于 Java EE 的 Web 开发技术

request 对象常用方法1:request.setAttribute(key,value);

2:request.getAttribute(key,value);

Page 58: 基于 Java EE 的 Web 开发技术

response 对象常用方法 处理 JSP 生成的响应 将响应发送给客户端 实现 javax.servlet.http.HttpServletResponse 接口 使用 HTTP 协议将响应发送给客户端

JSP 页面

客户端

从服务器中检索的信息

存储信息,以在响应客户端请求时发送此信息

响应

服务器

Page 59: 基于 Java EE 的 Web 开发技术

response 对象常用方法1:void setContentType (String name) 设置作为响应生成的内容的类型和字符编码

2:void sendRedirect (String name) 发送一个响应给浏览器,指示其应请求另一个 URL

Page 60: 基于 Java EE 的 Web 开发技术

session,application 对象常用方法 session,application 对象常用方法与 request对象常用方法相同。

Page 61: 基于 Java EE 的 Web 开发技术

目标之三 :JavaBean 之旅 JavaBean 是使用 Java语言编写的组件。组件是组成一个大的系统的一部份。组件能够完成特定的功能,并且这些功能主要是共享的。 JavaBean 是一种特殊的 Java类。特殊在:通常要提供无参数的构造方法;外界不需要知道它的具体实现,通常属性是私有的,需要提供公有的对属性进行操作的方法;应该有一些业务方法。

Page 62: 基于 Java EE 的 Web 开发技术

JavaBean 是可重用组件可重用组件

可在多个应用程序中使用 可以跨平台

JavaBean 的优点

Page 63: 基于 Java EE 的 Web 开发技术

JavaBean 的存放目录 WEB-INF/classes/javabean.class JavaBean特性

– 它是一个公开的 public类– 它有一个默认的构造方法,也就是不带参数的构造方法(在实例化

JavaBean 对象时,需要调用默认的构造方法)– 它提供 setXXX ()方法和 getXXX ()方法来让外部程序设置和获取 JavaBean 的属性。

例子:一个 String 类型的 name属性对应的方法:public String getName()public void setName(String name)

符合上述条件的类就可以看成是 JavaBean 组件

Page 64: 基于 Java EE 的 Web 开发技术

在 JSP 中如何调用 JavaBean

创建对象(在 jsp 中一定要先导入 JavaBean类) <jsp:useBean id=”” class=”” scope=””/> 作用:实例化 JavaBean 的对象,或者查找到 JavaBe

an 的对象。 id属性表示创建的对象的名字, class 是 JavaBean的完整类名, scope属性指出创建的变量的作用范围。 例: <jsp:useBean id=”user” class=”javabean.User”

scope=”request”/>

Page 65: 基于 Java EE 的 Web 开发技术

scope 作用范围 scope 的作用范围有 4 个: page request session application page 表示当前页面,实际上是当前的 JSP 文件对应的 Java类的对象; request 表示一次请求,从我们发送出去请求开始到系统对我们进行相应,这之间就是一次请求。如果一次请求只涉及一个 JSP页面, page 和 request 的效果是相同的。 session ,表示会话。对于 Web 应用的每个客户端来说都对应一个对象,这个对象就是 session ,在客户端的整个访问过程中都有效。 application, 表示应用。如果把 JavaBean 对象的作用范围设置为 application ,这个应用的所有的用户在所有的界面都可以访问这个对象。

Page 66: 基于 Java EE 的 Web 开发技术

在 JSP 中如何调用 JavaBean

对属性赋值 <jsp:setProperty name=”” property=”” value

=””/> name 指出 JavaBean 对象的名字, property指出属性的名字, value 要赋的值。 例: <jsp:setProperty name=”user” property

=”username” value=”zhangsan”/>

Page 67: 基于 Java EE 的 Web 开发技术

在 JSP 中如何调用 JavaBean

嵌入 Java 代码调用方法 <% boolean b = user.check(); %> 获取 JavaBean属性 <jsp:getProperty name=”” property=””/>

Page 68: 基于 Java EE 的 Web 开发技术

设置 JavaBean 的属性<jsp:setProperty>动作和 <jsp:useBean

> 一起使用,使用 Bean 中的 setXXX()方法设置 JavaBean 的属性

Page 69: 基于 Java EE 的 Web 开发技术

设置 JavaBean 的属性 通过 http 表单的参数来值来设置 bean 的相应的属性的值,这要求表单的名字与 bean 的属性名字相同<jsp:setProperty name=”bean 的名字”

property=”*” />

Page 70: 基于 Java EE 的 Web 开发技术

取出 JavaBean 的属性<jsp:getProperty>动作和 <jsp:setPrope

rty> 一起使用来获取 JavaBean 的属性

Page 71: 基于 Java EE 的 Web 开发技术

目标之四 :Servlet 之旅 Servlet (java 服务器端程序 ) 是一个用 Java 编写的程序,此程序在服务器上运行以处理客户端请求。是按照 Servlet 规范编写的 java类。

Servlet 是 JSP 的基础。

Page 72: 基于 Java EE 的 Web 开发技术

目标之四 :Servlet 之旅

请求 客户端 响应

Servlet 运行于服务器上

Page 73: 基于 Java EE 的 Web 开发技术

Servlet 体系结构

用户自定义的 Servlet

GenericServlet(abstract)

HttpServlet(abstract)

Servlet(interface)

Page 74: 基于 Java EE 的 Web 开发技术

Servlet API

Servlet 的框架是由两个 java包组成: javax.servlet 和 javax.servlet.http

javax.servlet包中定义了所有的 servlet类都必须实现的接口和类。 javax.servlet.http包中定义了采用 HTTP协议通信的 HttpServlet类 Servlet 的框架的核心是 :javax.servlet.Servlet接口 , 所有的 Servlet都必须实现这一接口 .

Page 75: 基于 Java EE 的 Web 开发技术

javax.servlet 包 javax.servlet 包的接口ServletConfig 接口 在初始化的过程中由 Servlet 容器使用

ServletContext 接口 定义 Servlet 用于获取来自其容器的信息的方法

ServletRequest 接口 向服务器请求信息

ServletResponse 接口 响应客户端请求

Page 76: 基于 Java EE 的 Web 开发技术

javax.servlet 包 javax.servlet 包的接口

ServletInputStream 类 用于从客户端读取二进制数据

ServletOutputStream 类 用于将二进制数据发送到客户端

Page 77: 基于 Java EE 的 Web 开发技术

javax.servlet.http 包javax.servlet.http 包的接口

HttpServletRequest 接口 提供 HTTP 请求信息

HttpServletResponse 接口 提供 HTTP 响应

Page 78: 基于 Java EE 的 Web 开发技术

HTTP Servlet 基础知识HttpServlet 类提供一个抽象类以创建 HTTP Servlet

public void doGet(HttpServletRequest req,HttpServletResponse res)

doGet() 方法处理客户端作出的 GET 请求。

public void doPost(HttpServletRequest req,HttpServletResponse res)

doPost() 方法处理客户端作出的 POST 请求。

Page 79: 基于 Java EE 的 Web 开发技术

HTTP Servlet 基础知识 有两个参数 :req 和 res, 这两个类实现了 HttpServletReq

uest 接口和 HttpServletResponse 接口 HttpServletRequest 接口中封装了客户请求信息 .如客户请求方式 ,HTTP头信息,参数名 ,参数值 ,客户端正在使用的协议 , 以及发出客户请求的远程主机信息等 HttpServletResponse 接口为 Servlet 提供了返回相应结果的方法

Page 80: 基于 Java EE 的 Web 开发技术

Servlet 的生命周期 Servlet 容器创建 Servlet 的一个实例 Servlet 的生命周期就是指创建 Servlet 实例之后其存在的时间以及消失的时间。 生命周期的 3 个方法为: init()

service()

destroy()

Page 81: 基于 Java EE 的 Web 开发技术

Servlet 的生命周期 生命周期的各个阶段为:

实例化 Servlet 容器创建 Servlet 的实例

初始化 该容器调用 init() 方法

服 务 如果请求 Servlet ,则容器调用 service() 方法销毁实例之前调用 destroy() 方法销 毁

Page 82: 基于 Java EE 的 Web 开发技术

Servlet 实现: Servlet 接口

service

客户 客户

请求响应 请求

响应

service 方法:客户请求和响应调用该方法servlet实例化调用 init 方法

内存

释放内存关闭服务器释放内存、关闭Web服务器调用 destroy 方法

Page 83: 基于 Java EE 的 Web 开发技术

Servlet 实现 GenericServlet 和 HttpServlet

abstract GenericServlet

public abstract service(request,response)

HttpServlet

protected void service(request,response)public void service(request,response)protected void doGet(request,response)protected void doPost(request,response)

继承

我们自己编写的 servlet 要继承 HttpServlet ,一般要覆盖 doPost或者 doGet 方法。HttpServlet类的 doGet 方法用于接收 Get 请求, doPost 方法用于接收 Post 请求。

Page 84: 基于 Java EE 的 Web 开发技术

Servlet 实现:GenericServlet 和 HttpServlet

servlet收到一个请求

调用 public 的 service() 方法

把参数分别转换为 HttpServletRequest 和 HttpServletResponse

这个 public 的 service() 方法调用 protected 的 service() 方法

根据 HTTP 请求方法的类型, protected 的 service()调用 doXXX() 方法之一

Page 85: 基于 Java EE 的 Web 开发技术

一般重写 doXxx() 方法的原因每当服务接收到对 Servlet 的请求时,服务器就会产生一个新线程,并调用 Service 。 servi

ce 方法检查 HTTP 请求类型 (GET、 POST、PUT、 DELETE 等 ),并相应地调用 doGet、doPost、 doPut、 doDelete 等

Page 86: 基于 Java EE 的 Web 开发技术

小项目练习:用 Servlet 模拟用户登陆的功能 public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String uname = req.getParameter("uname"); String psw = req.getParameter(“userName"); String target = ""; HttpSession session = req.getSession(); if(uname.equals("jenny") && psw.equals("hi")){ session.setAttribute("result","ok"); target = "/P21_Refresh/login.jsp"; }else{ session.setAttribute("result","wrong"); target = "/P21_Refresh/login.jsp"; } resp.sendRedirect(target); }

Page 87: 基于 Java EE 的 Web 开发技术

Struts 简介

Page 88: 基于 Java EE 的 Web 开发技术

Struts 简介 Struts 是一个基于 Sun J2EE 平台的 MVC 框架,是 MVC 模式的一种实现。 Struts 继承了 MVC 的各项特性,并根据 Jav

a EE 的特点,做了相应的变化与扩展。 Struts 能充分满足应用开发的需求,简单易用,敏捷迅速,颇受关注。

Page 89: 基于 Java EE 的 Web 开发技术

Struts 的结构 业务逻辑  业务逻辑更新模型的状态,并帮助控制应用程序的流程。就 Struts 而言,业务逻辑是由 Action 类完成的。 Action 类封装了具体的处理过程,调用业务逻辑模块,并将响应提交给合适的视图组件以产生响应。

Page 90: 基于 Java EE 的 Web 开发技术

Struts 的结构View (视图) jsp 和 ActionForm  视图就是一个 JSP 文件。其中没有流程逻辑,没有业务逻辑,也没有模型信息—只有标记。标记是使 Struts 有别于其他框架(如

Velocity )的因素之一。

Page 91: 基于 Java EE 的 Web 开发技术

Struts 的结构 ActionForm 从以前我们所认识的 ActionForm 的用处来看,它似乎应该被视为应用的 Model ,然而事实上他们应当被当作应用中 controller 的一部分。 ActionForm bean 中显示了 mod

el 的属性,但它们不包含任何持续性逻辑或者业务逻辑。ActionForm 只是用来在 Model、 View之间传递 Model信息。因此 ActionForm属于 controller 中的一部分。

但是我认为把 ActionForm归到 View更合适

Page 92: 基于 Java EE 的 Web 开发技术

Struts 框架的组成 控制类的基本功能( 1 )将客户请求映射到相应的 Action 类,如果该类第一次收到请求,服务器将实例化该类。( 2 )调用 Action 实例的 exectue() 方法。( 3 ) exectue() 方法返回一个 result code—说明执行结果的 String 。 result code 并非一定对应一个将被执行的 result (如 JSP 页面、 Servlet或另一个

Action ),尽管通常如此。

Page 93: 基于 Java EE 的 Web 开发技术

Struts-快速入门我们结合实例来讲解 Struts 的应用: 下载 Struts, 将其相关 jar包引用到 Web 项目 在 web 项目的 web.xml 中配置 Action影射,将相应请求动作交给 Struts 提供的 ActionServlet类进行统一控制 在 web.xm配置所需要用到的的 Struts 标签文件 建立 ActionForm、 Action 建立视图文件 注意这里没有建立 Model 的任何信息,原因是 Struts没有明确规定model 的具体实现细节。

Page 94: 基于 Java EE 的 Web 开发技术

Struts-ActionFrom

ActionFrom 是用来传输表单数据的对象,通过配置文件可以关联到对应的 Action, 在实现 view 层与业务层之间的数据传输。 实现机制: Struts 提供了一个 org.apache.struts.action.ActionForm类,里面实现了将请求表单中的元素赋值给其具体的 实现类属性。因此自定义 ActionForm类时,只需继承该类即可。在自定义 ActionForm类时请保证其属性名称与所对应 表单名称一致。

Page 95: 基于 Java EE 的 Web 开发技术

Struts-ActionFrom

当触发 Action 时,通过配置文件匹配到对应 ActionFrom 实例,以参数形式传入。

ActionForm 的实现虽然简单,但是随着界面的增加,ActionForm类也会增加,造成代码膨胀。在 Struts1.1 以上版本提供了 ActionForm 的另一个实现类, org.apache.struts.action.DynaActionForm ,该类充当所有 ActionForm 的代理类,只需在配置 ActionFrom 时指定用该类实现即可

Page 96: 基于 Java EE 的 Web 开发技术

Struts-Action

Action充当了控制器的角色,每个请求都会触发到 Action类,我们在这里处理逻辑业务,分发数据,链接转向。 其实现机制: 在 web.xml配置影射规则,符合其影射条件的请求都会交给 org.apache.struts.action.ActionServlet类处理, 在该类中将会实现 org.apache.struts.action.Action类中的相应方法。在自定义 Action类时只需继承该类, 实现 execute方法, 即可让自定义的 Action得到触发。 execute() 方法中 ActionMapping、 ActionForm 实例通过读取配置文件获得。

Page 97: 基于 Java EE 的 Web 开发技术

实例的主要功能登陆到系统的用户才能留言,否则只能浏览登陆到系统需要注册登陆后可以留言,并且可以自己的留言编辑和删除 管理员管理功能

Page 98: 基于 Java EE 的 Web 开发技术
Page 99: 基于 Java EE 的 Web 开发技术
Page 100: 基于 Java EE 的 Web 开发技术
Page 101: 基于 Java EE 的 Web 开发技术
Page 102: 基于 Java EE 的 Web 开发技术
Page 103: 基于 Java EE 的 Web 开发技术

结束