全部章节   >>>>


本章目录

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. Gradle安装与配置

    一.Gradle安装 1.Gradle安装 (1)先安装JDK/JRE (2)Gradle下载官网 Gradle官网 (3)解压安装包到想安装到的目录.如D:\java\gradle-5.2.1 (4 ...

  2. MapStruct对象转换

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

  3. Android给页面添加横线和竖线

    竖线 <View      android:layout_width="1dip"     android:layout_height="match_parent& ...

  4. 什么是微服务,SpringBoot和SpringCloud的关系和区别

    什么是微服务? 就目前而言对于微服务业界没有一个统一的,标准的定义.但通常而言,微服务是一种架构模式或者说是一种架构风格,它提倡单一应用程序划分为一组小的服务,每个服务在其独立的自己的进程中,服务之间 ...

  5. 【C/C++】金币

    做了一下去年的题目,今年看起来就没这么难了 从上到下的可以从下到上考虑,会简单很多,dp入门 题目 金币 小招在玩一款游戏,在一个N层高的金字塔上,以金字塔顶为第一层,第i层有i个落点,每个落点有若干 ...

  6. springboot项目启动慢,怀疑jdk有问题

    项目启动慢,并且没有启动日志,开发环境和windows服务器都正常,到linux后出现问题,你觉得会是哪儿的问题? 最近收到一位同事求助,说springboot应用在客户的一台Linux机器上启动非常 ...

  7. 利用代码覆盖率提高嵌入式软件的可靠性 - VectorCAST

    简介 代码覆盖率是衡量软件测试完成情况的指标,通常基于测试过程中已检查的程序源代码比例 计算得出.代码覆盖率可以有效避免包含未测试代码的程序被发布. 代码覆盖率能不能提高软件的可靠性?答案是肯定的,代 ...

  8. 我的第一篇博客blog,笑哭

    我的第一篇博客blog Markdown学习 一级标题:#加一个空格 加 文字, 二级标题:加2个##以此类推 字体 粗体:hello world!字体前有二个星号,字体后有二个星号 斜体:hello ...

  9. linux小应用 —— 日志过滤

    先说问题,统计一个日志文件中去重之后的ip地址的个数.其实这是一个非常常见也比较简单的问题,其中我个人认为最主要的应该是匹配ip地址是这个问题的核心.剩下的就是对linux命令的熟练程度的问题了.首先 ...

  10. MQTT协议 - arduino ESP32 通过精灵一号 MQTT Broker 进行通讯的代码详解

    前言 之前研究了一段时间的 COAP 协议结果爱智那边没有测试工具,然后 arduino 也没有找到合适的库,我懒癌发作也懒得修这库,就只能非常尴尬先暂时放一放了.不过我在 爱智APP -> 设 ...