全部章节   >>>>


本章目录

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. Linux的小知识

    1. top 命令可以在Linux下查看任务管理器和当前进程使用资源情况. 2. Ctrl+c 即可退出,然后使用 kill+进程号 命令可杀死指定进程 3.在Linux的 /etc/rc.local ...

  2. 100个Shell脚本——【脚本1】打印形状

    [脚本1]打印形状 一.脚本 打印等腰三角形.直角三角形.倒直角三角形.菱形 #!/bin/bash #等腰三角形 read -p "Please input the length:&quo ...

  3. java打jar包和运行jar包的两种方式

    java打jar包和运行jar包的两种方式更详细的打包方式请参考https://www.cnblogs.com/mq0036/p/8566427.html 一.java类不依赖第三方jar包以简单的一 ...

  4. MyBatis Collection小记—— 关联查询、递归查询、多字段关联

    经常会用到mybatis的Collection标签来做级联查询或递归查询,现通过一个伪例来简单的说明一下使用中的关键点: 首先先列出三个表,给出一个场景: 1,角色表 t_role( id,name ...

  5. mybatis-插件开发

    在Executor.StatementHandler.parameterHandler.resultSetHandler创建的时候都有一步这样的操作xxxHandler=interceptorChai ...

  6. 【C/C++】n皇后问题/全排列/递归/回溯/算法笔记4.3

    按常规,先说一下我自己的理解. 递归中的return常用来作为递归终止的条件,但是对于返回数值的情况,要搞明白它是怎么返回的.递归的方式就是自己调用自己,而在有返回值的函数中,上一层的函数还没执行完就 ...

  7. Redis操作命令合集

    目录 一.客户端命令 二.sql命令 一.客户端命令 #读取配置文件启动 redis-server redis.conf #关闭 Redis,Redis服务器将断开与客户端链接,产生持久化文件,平滑关 ...

  8. iterator 前++ 后++区别

    for(iterator it = begin(); it != end(); ++it)  此处的 begin()<==>this->begin()       或者for(ite ...

  9. 解决pwn题目加载指定libc版本的问题

    因为本地和远程的libc版本不同,pwn题目调试起来会有影响,所以来记录一下用patchelf和glibc-all-in-one来解决这个问题过程. 下载工具 下载patchelfgit clone ...

  10. 0RAYS元旦招新赛

    一共有4道pwn题,题目不算难,但是挺考验调试能力的. pie 一个main函数就四次溢出... 第一次leak canary,第二次leak libc,第三次直接覆盖返回地址为one_gadgets ...