Java Web程序设计笔记 • 【第6章 Servlet技术进阶】
全部章节 >>>>
本章目录
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技术进阶】的更多相关文章
- Java Web程序设计笔记 • 【目录】
章节 内容 实践练习 Java Web程序设计作业目录(作业笔记) 第1章 Java Web程序设计笔记 • [第1章 Web应用程序] 第2章 Java Web程序设计笔记 • [第2章 JSP基础 ...
- Java Web程序设计笔记 • 【第5章 Servlet技术】
全部章节 >>>> 本章目录 5.1 Servlet 技术介绍 5.1.1 为什么需要Servlet 5.1.1 Servlet 简介 5.1.2 Java Web 处理流 ...
- Java Web程序设计笔记 • 【第1章 Web应用程序】
全部章节 >>>> 本章目录 1.1 Web 应用程序 1.1.1 Web 应用程序概述 1.1.2 Web 应用程序的工作原理 1.1.3 实践练习 1.2 HTTP协议 ...
- Java Web程序设计笔记 • 【第4章 JavaBean和JSP标准动作】
全部章节 >>>> 本章目录 4.1 JavaBean 4.1.1 JavaBean 概述 4.1.2 JavaBean的重要性 4.1.3 JavaBean的特点 4.1 ...
- Java Web程序设计笔记 • 【第3章 JSP内置对象】
全部章节 >>>> 本章目录 3.1 JSP 内置对象简介 3.1.1 JSP 内置对象概述 3.1.2 JSP 表单处理 3.1.2 request对象 3.1.2 开发 ...
- Java Web程序设计笔记 • 【第9章 EL表达式】
全部章节 >>>> 本章目录 9.1 EL 表达式基础 9.1.1 EL 表达式简介 9.1.2 EL 表达式的定义 9.1.3 使用 EL 访问变量 9.1.4 使用 E ...
- Java Web程序设计笔记 • 【第8章 会话跟踪技术进阶】
全部章节 >>>> 本章目录 8.1 Session机制 8.1.1 Session 简介 8.1.2 创建 HttpSession 实例 8.1.3 HttpSesiso ...
- Java Web程序设计笔记 • 【第7章 会话跟踪技术】
全部章节 >>>> 本章目录 7.1 会话跟踪技术概述 7.1.1 为什么需要会话跟踪 7.1.2 会话的状态和跟踪 7.1.3 会话跟踪技术 7.1.4 会话跟踪工作流程 ...
- Java Web程序设计笔记 • 【第2章 JSP基础】
全部章节 >>>> 本章目录 2.1 JSP 简介 2.1.1 JSP 概述 2.1.2 开发第一个 JSP 页面 2.1.3 JSP 处理流程 2.1.4 实践练习 2. ...
随机推荐
- react动态添加样式:style和className
react开发过程中,经常会需要动态向元素内添加样式style或className,那么应该如何动态添加呢??? 一.react向元素内,动态添加style 例如:有一个DIV元素, 需要动态添加一个 ...
- tomcat启动和停止脚本
#!/bin/bash JDK_HOME=/apps/jdk1.7.0_79 CATALINA_HOME=/apps/tomcat export JDK_HOME CATALINA_HOME sour ...
- 集合类——Map集合、Properties属性文件操作
1.Map集合 Collection集合的特点是每次进行单个对象的保存,若要对一对对象来进行保存就只能用Map集合来保存.即Map集合中一次可以保存两个对象,且这两个对象的关系是key = value ...
- 技术预演blog
canal整合springboot实现mysql数据实时同步到redis spring+mysql集成canal springboot整合canal监控mysql数据库 SpringBoot cana ...
- Actuator监控器
一.简介 Actuator(激励者;执行器)是Spring Boot提供的一个可挺拔模块,用于对工程进行监控.其通过不同的监控终端实现不同的监控功能.其功能与Dubbo的监控中心类似,不同的是,Dub ...
- 【Linux】【Services】【Disks】zfs
1. 简介: 据说zfs有去除重复数据的功能,无良人士继续要求吧samba共享盘使用的centos7上自带的xfs改成zfs,并且开启去重功能.samba配置见 http://www.cnblogs. ...
- 【Services】【Web】【Nginx】静态下载页面的安装与配置
1. 拓扑 F5有自动探活机制,如果一台机器宕机,请求会转发到另外一台,省去了IPVS漂移的麻烦 F5使用轮询算法,向两台服务器转发请求,实现了负载均衡 2. 版本: 2.1 服务器版本:RHEL7. ...
- springmvc中拦截器的定义和配置
package com.hope.interceptor;import org.springframework.lang.Nullable;import org.springframework.web ...
- jQuery全局进行方法扩展
<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>01 ...
- 【Linux】【RedHat】下载 安装 注册
RedHat 下载 安装 注册 记录 因为找入口太麻烦了,所以写了篇博文记录下来大致入口@萌狼蓝天 注册 点击进入注册地址(https://www.redhat.com/wapps/ugc/regis ...