全部章节   >>>>


本章目录

6.1 应用 Servlet API(一)

6.1.1 Servlet 类的层次结构

6.1.2 使用 Servlet API 的原则

6.1.3 重定向与转发

6.1.4 实践练习

6.2 应用 Servlet API(二)

6.2.1 ServletConfig 接口

6.2.2 ServletContext 接口

6.2.3 实践练习

6.3 MVC(一)

6.3.1 Model 1 架构模式简介

6.3.2 Model 1 的体系结构图

6.3.3 Model1 架构模式的优缺点

6.3.4 实践练习

6.4 MVC(二)

6.4.1 Model 2 架构模式

6.4.1 Model 2 的体系结构图

6.4.1 Model2 架构模式的优缺点

6.4.1 Model 1 与 Model 2 的比较

6.4.2 MVC 的概念及优缺点

6.4.2 MVC 的优缺点

6.4.3 实践练习

总结:


6.1 应用 Servlet API(一)

6.1.1 Servlet 类的层次结构

Servlet API 中定义了一整套的接口和类,使开发人员能够很容易地开发一个 Servlet

ServletAPI接口和类的继承层次如图:

6.1.2 使用 Servlet API 的原则

开发人员编写的 Servlet,通常继承自 HttpServlet 类,然后重写其中的某些方法,使用原则如下:

  • 重写 doGet() 方法处理 Get 请求
  • 重写 doPost() 方法处理 Post 请求
  • 如果需要在 Servlet 实例化中进行初始化工作,可以重写 init() 方法
  • 如果需要在 Servlet 被释放时进行资源清理工作,可以重写 destroy() 方法

实际开发中大多数重写doGet、doPost居多

6.1.3 重定向与转发

重定向与转发,均用于实现 Web 应用程序中资源的跳转

使用时其主要区别如下:

  • 转发是继续传递、处理同一个请求,并在服务器端进行,浏览器显示旧请求 URL
  • 重定向在客户端运行,会产生新请求,经过一次重定向后,浏览器会显示新 URL,存在request中的数据重定向后无法取出
  • 因为浏览器需要发出一个新请求,所以重定向速度比转发慢
  • 转发只能在项目内部进行,重定向可以跳转到外部资源,如其他项目

示例:创建两个Servlet,第一个Servlet中存入数据到request中,分别使用转发和重定向跳转至第二个Servlet,查看数据和地址栏情况

Servlet2关键代码
PrintWriter out = response.getWriter();
// 判断请求属性中的值是否存在,存在则输出
if (request.getAttribute("name") == null) {
out.print(" 无法获取请求属性中的值 !");
} else {
// 否则输出请求属性中的值
out.print(request.getAttribute("name").toString());
}

重定向方式无法取出request中的数据

在实际开发中,两者的选择原则如下:

  • 优先选择转发,因为转发效率更高
  • 在同一个 Web 应用程序的两个请求间传递数据时,采用转发
  • 如果需要跳转到其他服务器上的资源,则必须使用重定向

6.1.4 实践练习

6.2 应用 Servlet API(二)

6.2.1 ServletConfig 接口

在 Web 容器初始化一个 Servlet 实例时,会为当前的 Servlet 准备一个唯一的 ServletConfig 实例配置对象。ServletConfig 对象能读取配置在 web.xml 文件中对应Servlet 配置的初始化参数

注意:ServletConfig只能针对当前配置的Servlet有效

 配置Servlet的时候,在web.xml中配置该servlet的初始参数值

<servlet>
<servlet-name>ConfigServlet</servlet-name>
<servlet-class>com.exam.ConfigServlet</servlet-class>
<!-- 定义第一个 servlet 初始化参数 -->
<init-param>
<!-- 参数名和参数值 -->
<param-name>uid</param-name>
<param-value>scott</param-value>
</init-param>
<init-param>
<!-- 参数名和参数值-->
<param-name>pwd</param-name>
<param-value>tiger</param-value>
</init-param>
</servlet>

每个参数由参数名和参数值组成

具体Servlet中可以读取配置的参数

response.setContentType("text/html;charset=gbk");
PrintWriter out = response.getWriter();
// 获取 ServletConfig 实例
ServletConfig config = this.getServletConfig();
// 获取指定名称的初始化参数的字符串值
String uid = config.getInitParameter("uid"); //uid是配置时的参数名称
String pwd = config.getInitParameter("pwd");
out.print("servlet 初始化参数 uid 的值是:" + uid + "<br/>");
out.print("servlet 初始化参数 pwd 的值是:" + pwd + "<br/>");

6.2.2 ServletContext 接口

ServletContext可以实现多个Servlet获取相同的初始化参数值,它不属于某一个Servlet所有,而是Web 应用程序的上下文环境的参数

注意:多个Servlet都可以读取ServletContext中配置的初始化参数值

在web.xml中配置ServletContext上下文全局参数

<context-param>
<!-- 参数名和参数值 -->
<param-name>appName</param-name>
<param-value>java web 应用程序 </param-value>
</context-param> <servlet>
<servlet-name>ContextServlet</servlet-name>
<servlet-class>com.exam.ContextServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ContextServlet</servlet-name>
<url-pattern>/context</url-pattern>
</servlet-mapping>

上下文参数是全局配置,不是配置在某一个servlet内

 每个Servlet中都可以读取上下文初始化的参数

response.setContentType("text/html;charset=gbk");
PrintWriter out = response.getWriter();
// 获取 ServletContext 对象
ServletContext context = this.getServletContext();
// 获取指定名称的 Web 应用程序的上下文初始参数的字符串值
String appName = context.getInitParameter("appName");
out.print("<h1> 获取的 Web 应用程序的上下文初始参数值为:<br>" + appName + "<h1>");

6.2.3 实践练习

6.3 MVC(一)

6.3.1 Model 1 架构模式简介

JSP 的 Model 1 和 Model 2 是 SUN 公司为了更好地指导 Web 开发人员进行 JavaWeb 开发提出的两种架构模式,本质区别在于处理批量请求的位置不同

Model1 就是 JSP+JavaBean模式,其职责如下:

  • JSP:负责界面的显示、请求响应和逻辑流程处理
  • JavaBean:进行辅助,如保存从数据库中查询出来的数据等

6.3.2 Model 1 的体系结构图

Model 1 体系结构就是 JSP+JavaBean模式,其工作流程如下:

  • 首先 Web 客户端向 JSP 页面发出 request 请求
  • 在 JSP 页面取得请求所需的页面参数
  • 通过 JSP 调用业务逻辑层JavaBean的方法并返回结果
  • 在 JSP 中完成网页页面的渲染
  • 通过 JSP 向 Web 客户端返回处理结果

6.3.3 Model1 架构模式的优缺点

Model 1 是较为早期的一种JavaWeb应用模式,有着明显的优缺点

  • 优点:架构简单,比较适合小型项目的开发。基本上使用 JSP+ JavaBean就可以完成一个小型项目的开发
  • 缺点:JSP 页面有控制页面显示的代码又有与后台业务逻辑交互的 Java 代码,职责不单一,页面负担很重,影响页面运行速度;而且不方便后期的维护

6.3.4 实践练习

6.4 MVC(二)

6.4.1 Model 2 架构模式

Model2 就 是JSP+Servlet+JavaBean 模式。它吸取了两种技术各自的突出优点,其各部分职责如下

  • JSP:负责界面数据展示
  • Servlet:完成深层次的请求处理响应,逻辑控制处理
  • JavaBean:完成数据封装,业务功能实现,数据库操作等

6.4.1 Model 2 的体系结构图

Model 2体系结构就是 JSP+Servlet+JavaBean模式,其工作流程如下

  • 首先 Web 客户端向 Servlet 发出 request 请求
  • 通过 Servlet 取得请求所需的表单数据
  • Servlet 向业务逻辑层调用业务逻辑方法并返回所需的数据
  • Servlet 再重定向转到 JSP 页面,在 JSP 页面完成页面渲染
  • JSP 通过 response 向 Web 客户端返回处理结果

6.4.1 Model2 架构模式的优缺点

Model 2 模式更好的结合了Model1的优缺点改进而来,其优缺点如下

  • 优点:清晰地分离了表达和内容,明确了角色的定义以及开发者与网页设计者的分工,适合大型项目的开发
  • 缺点:分层过多,不适合小型项目的开发

6.4.1 Model 1 与 Model 2 的比较

  • Model 1 在一定程序上实现了 MVC 的设计理念,即 JSP 将控制层与表示层合二为一,JavaBean 则为模型层。JSP担任的职责过于繁多,不适合大项目开发
  • Model 2 则是将控制层(Servlet)单独地划分出来了,专门负责业务流程的控制,响应页面的请求,创建所需的JavaBean 实例,并将处理后的数据再返回给 JSP
  • 层次分明,不同开发人员的职责分工明确,所以项目越复杂,使用 Model2架构模型的好处就越大

6.4.2 MVC 的概念及优缺点

MVC 全名是 Model View Controller,一种软件设计典范,用一种业务数据、逻辑、界面显示分离的方法组织代码,各部分职责如下

  • M 是指业务模型
  • V 是指用户界面
  • C 是指控制器

使用 MVC 的目的是将 M和 V 实现代码分离,从而使同一个程序可以使用不同的表现形式。C 存在的目的则是确保 M 和 V 的同步,一旦M 改变,V 应该同步更新,更好地调节 M 和 V 的搭配

6.4.2 MVC 的优缺点

MVC 模式实现了功能模块和显示模块的分离,还提高了应用系统的可维护性、可扩展性、可移植性和组件的可复用性,其表现的优缺点如下

MVC 具有以下优点:

  • 耦合性低
  • 重用性高
  • 部署快
  • 可维护性高
  • 有利于软件工程化管理

MVC 的缺点:

  • 不适合小型、中等规模的应用程序
  • 增加系统结构和实现的复杂性
  • 视图与控制器间的过于紧密的连接
  • 视图对模型数据的低效率访问

6.4.3 实践练习

总结:

  • ServletAPI中定义了一整套的接口和类,使开发人员很容易地开发一个Servlet
  • 重定向与转发都可以实现界面跳转,转发是继续传递旧的请求,而重定向则是新的请求,所以转发效率高于重定向
  • ServletConfig针对具体Servlet配置初始化参数,可以理解为私有配置
  • ServletContext针对所有Servlet配置共享初始化参数,可以理解为公共配置
  • Model 1模式主要是JSP+JavaBean,不适合大项目开发
  • Model 2模式主要是JSP+Servlet+JavaBean,层次明确,适合大项目开发
  • MVC是模型-视图-控制器的缩写,是非常经典的软件架构模式

Java Web程序设计笔记 • 【第6章 Servlet技术进阶】的更多相关文章

  1. Java Web程序设计笔记 • 【目录】

    章节 内容 实践练习 Java Web程序设计作业目录(作业笔记) 第1章 Java Web程序设计笔记 • [第1章 Web应用程序] 第2章 Java Web程序设计笔记 • [第2章 JSP基础 ...

  2. Java Web程序设计笔记 • 【第5章 Servlet技术】

    全部章节   >>>> 本章目录 5.1 Servlet 技术介绍 5.1.1 为什么需要Servlet 5.1.1 Servlet 简介 5.1.2 Java Web 处理流 ...

  3. Java Web程序设计笔记 • 【第1章 Web应用程序】

    全部章节   >>>> 本章目录 1.1 Web 应用程序 1.1.1 Web 应用程序概述 1.1.2 Web 应用程序的工作原理 1.1.3 实践练习 1.2 HTTP协议 ...

  4. Java Web程序设计笔记 • 【第4章 JavaBean和JSP标准动作】

    全部章节   >>>> 本章目录 4.1 JavaBean 4.1.1 JavaBean 概述 4.1.2 JavaBean的重要性 4.1.3 JavaBean的特点 4.1 ...

  5. Java Web程序设计笔记 • 【第3章 JSP内置对象】

    全部章节   >>>> 本章目录 3.1 JSP 内置对象简介 3.1.1 JSP 内置对象概述 3.1.2 JSP 表单处理 3.1.2 request对象 3.1.2 开发 ...

  6. Java Web程序设计笔记 • 【第9章 EL表达式】

    全部章节   >>>> 本章目录 9.1 EL 表达式基础 9.1.1 EL 表达式简介 9.1.2 EL 表达式的定义 9.1.3 使用 EL 访问变量 9.1.4 使用 E ...

  7. Java Web程序设计笔记 • 【第8章 会话跟踪技术进阶】

    全部章节   >>>> 本章目录 8.1 Session机制 8.1.1 Session 简介 8.1.2 创建 HttpSession 实例 8.1.3 HttpSesiso ...

  8. Java Web程序设计笔记 • 【第7章 会话跟踪技术】

    全部章节   >>>> 本章目录 7.1 会话跟踪技术概述 7.1.1 为什么需要会话跟踪 7.1.2 会话的状态和跟踪 7.1.3 会话跟踪技术 7.1.4 会话跟踪工作流程 ...

  9. Java Web程序设计笔记 • 【第2章 JSP基础】

    全部章节   >>>> 本章目录 2.1 JSP 简介 2.1.1 JSP 概述 2.1.2 开发第一个 JSP 页面 2.1.3 JSP 处理流程 2.1.4 实践练习 2. ...

随机推荐

  1. [PE]结构分析与代码实现

    PE结构浅析 知识导向: 程序最开始是存放在磁盘上的,运行程序首先需要申请4GB的内存,将程序从磁盘copy到内存,但不是直接复制,而是进行拉伸处理. 这也就是为什么会有一个文件中地址和一个Virtu ...

  2. TCP中的TIME_WAIT状态

    TIME_WAIT的存在有两大理由 1.可靠地实现TCP全双工连接的终止 2.允许老的可重复分节在网络中消失. 对于理由1,我们知道TCP结束需要四次挥手,若最后一次的客户端的挥手ACK丢失(假设是客 ...

  3. 转 序列化Serializable和Parcelable的区别详解

    什么是序列化,为什么要进行序列化 答:对象要进行传输(如:activity 与activity间 ,网络间 进程间等等).存储到本地就必须进行序列化 . 这种可传输的状态就是序列化. 怎么序列化??两 ...

  4. MapStruct对象转换

    第一次看到 MapStruct 的时候, 我个人非常的开心.因为其跟我内心里面的想法不谋而合. 1 MapStruct 是什么? 1.1 JavaBean 的困扰 对于代码中 JavaBean之间的转 ...

  5. 哪里可以下载支付宝demo或者sdk

    http://club.alipay.com/read-htm-tid-9976972.html 这里有所有的demo和sdk包括移动产品的demo.在他的论坛里面呢 真心恶心啊.不放到主页.

  6. spring jdbc 配置数据源连接数据库

    概述 在XML配置数据源,并将数据源注册到JDBC模板 JDBC模板关联业务增删改查 在XML配置数据源 <?xml version="1.0" encoding=" ...

  7. 用oracle中的Row_Number实现分页

    Row_Number实现分页   1:首先是 select ROW_NUMBER() over(order by id asc) as 'rowNumber', * from table1 生成带序号 ...

  8. JS 的三种定义变量 var let const

    Let 只在 let 命令所在的代码块内有效,在外就会报错 Let 是块级作用域,函数内部使用let定义后,对函数外部无影响 Let/const 不存在变量提升,使用前一定要声明后,在使用,否则会报错 ...

  9. lucene的索引查询

    package com.hope.lucene;import org.apache.lucene.document.Document;import org.apache.lucene.document ...

  10. MyBatis中关于大于,小于写法

    第一种写法(1): 原符号 < <= > >= & ' " 替换符号 < <= > >= & &apos; " ...