目录
一、JSP 概述
JSP 概念
JSP 是一种动态页面技术,主要目的是将表示逻辑从 Servlet 中分离出来。
JSP 组成
一个 JSP 页面由两部分组成:静态部分(如HTML、CSS等)和动态部分(如 JSP 指令、JSP 脚本元素和变量等)。
JSP 执行过程
- 客户端发出 request 请求
- JSP Container 将 JSP 转译成 Servlet 的源代码
- 将产生的 Servlet 源代码经过编译后,加载到内存执行
- 把结果 Response (响应)至客户端
在执行 JSP 网页时,通常分为两个时期:转译时期 和 请求时期。
- 转译时期:JSP 网页转译成 Servlet 类
- 请求时期:Servlet 类执行后,响应结果至客户端
其中,系统在转译期间做了两件事情:将 JSP 网页转译为 Servlet 源代码 *.java(转译);将 Servlet 源代码 *.java 编译成字节码文件 *.class(编译)。
二、JSP 脚本元素、指令
JSP 脚本元素
JSP 脚本元素就是嵌入在 JSP 页面中的 Java 程序,这些 Java 程序将出现在由当前 JSP 页面生成的 Servlet 中。按照不同的嵌入方式和不同的作用,脚本元素可分为 3 种:表达式、Scriptlet、声明。
- 表达式:计算 Java 表达式的值,格式为**<%= Java 表达式 %>**
- Scriptlet:在 JSP 页面中嵌入一段有效的 Java 程序段,可以是变量的声明、方法的调用,格式为**<% Java 代码 %>**
- 声明:在 JSP 页面中声明 Java 方法或变量等,用于定义 JSP 代表的 Servlet 类的成员变量和方法,格式为**<%! Java 代码 %>**
JSP 指令
JSP 指令相当于在编译期间的命令,用来设置整个 JSP 页面相关的属性。在 JSP 页面转 Servlet 类过程中起作用,影响由 JSP 页面生成的 Servlet 类的整体结构。主要包含三种指令:page指令,include指令,taglib指令。格式为:<%@ 指令名称 属性1=“属性名称” …… %>
- page 指令:页面指令,对整个页面有效与代码本身位置无关,通常写在最前面。该指令用来定义整个 JSP 页面的一些属性和这些属性的值,除了 import 属性外,其他属性只能在指令中出现一次。格式为**<%@ page 属性1=“属性1的值” %>**
- include 指令:用于在 JSP 页面中静态的插入一个文件,被插入的文件可以是 JSP,HTML,文本文件或者一段 Java 代码。使用了 include 指令的 JSP 页面在转换为 Java 文件时,将被插入的文件在当前 JSP 页面该指令的位置做一个整体的插入,合并成一个新的 JSP 页面,然后将这个 JSP 页面转译成 Java 文件。格式为**<%@ include file=“文件名”%>**。善用include指令可提高代码重用性
- include 指令称为静态包含(在编译之前做了处理),即先将要包含的文件信息嵌入相应的 JSP 页面,再统一转换成一个 Servlet 类。
- include 指令不能传参数。
- include 被包含的页面与包含页面访问的是同一个 request 内嵌对象。
- taglib 指令:在 JSP 页面中,将标签描述文件(tld 文件)引入该页面中,设置前缀,并利用标签的前缀去使用标签描述符文件(tld 文件)中的标签。tld 文件是一个符合规范的 XML 文件,它描述一个或者更多标签和它们的属性,将这个文件放置在 WEB-INF 目录中,放置该文件的目的是指定关于标签处理程序的类名和标签允许的属性,可以提供标签库中类和 JSP 中对标签引用的映射关系。格式为**<%@ taglib uri=“标签描述符文件” prefix=“前缀名” %>**
三、JSP 隐式对象
JSP 隐式对象就是 JSP 容器提供的不用声明就可以在 JSP 页面的 Java 程序块和表达式部分直接使用的对象,也成为 JSP 内置对象。
JSP 隐式对象是 Web 容器加载的一组类的实例,它不想一般的 Java 对象那样用 ”new“ 来获取实例,而是直接在 JSP 页面的 Java 程序片和表达式部分使用。
JSP 可以使用 Java 定义的隐式对象来访问网页的动态内容。
JSP 隐式对象(九个)
输入/输出对象(三个)
-
request:接收客户端发送来的请求信息,客户端的请求信息被封装在 request 对象中,通过 request 才能了解到客户的需求,然后做出响应。
-
response:对客户端的请求进行回应,将 Web 服务器处理后的结果发回给客户端。
-
out:输出流,用于向客户端输出数据。
作用域通信对象(三个)
-
对象名称 作用范围 周期 session 某个用户 开始于某用户访问应用程序,终止于用户关闭浏览器 application 整个应用程序 开始于应用程序服务器启动,终止于服务器的停止 pageContext 某个页面内 开始于页面的调用,终止于页面的关闭 request 一个 request 请求范围 开始于一个 request 请求,终止于请求结束 公共方法有:setAttribute 与 getAttribute
-
session:基于会话,不同的用户拥有不同的会话。同一用户共享 session 对象定义的所有属性。通常用来保存用户的信息,以便于服务器跟踪每个用户的操作状态。
-
application:代表 Web 应用本身,整个 Web 应用共享一个 application 对象,主要用于在多个 JSP 页面或者 Servlet 之间共享变量,负责提供应用程序在服务器中运行时的一些全局信息。
-
PageContext:JSP 页面本身的上下文,作用范围是在同一页面使用它可以访问页面作用域中定义的所有隐式对象。其自身也是一个域对象,可以用来保存数据,并可以通过它操作另外三个域(request、session、servletContext)。
Servlet 对象(两个)
- page:页面实例的引用,可以被看作是整个 JSP 页面的代表,this 的同义词,使用 page 可以访问 Servlet 类中的所有变量和方法。
- config:代表了存储在编译 JSP 页面的过程中创建的 Servlet 信息,提供了检索 Servlet 初始化参数的方法。
错误对象(一个)
- exception:错误对象,表示在执行代码过程中引发的异常。
四、JSP 标准动作
JavaBean 组件
JavaBean 概念
JavaBean 是软件项目中一种可以重复使用的组件。JavaBean 基于 Java 语言,实际上是一种 Java 类,通过封装属性和方法成为具有某种功能或者处理某个业务的对象,简称 Bean。通过 JSP 页面调用 JavaBean,可以将大量的 Java 代码从 JSP 页面中分离出来,使业务处理和页面展示得以分离,提高页面的可维护性。
JavaBean 特点
- 可以实现代码的重复利用
- 易编写、易维护、易使用
- 可以在任何安装了 Java 运行环境的平台上使用,而不需要重新编译
JavaBean 编写
编写 JavaBean 就是编写一个 Java 类,这个类创建的一个对象称作 Bean。一般遵循一下规则:
- 类中访问属性的方法都必须是 public 的,一般属性是 private 的
- 一般使用 getXxx() 和 setXxx() 来获取与修改属性
- boolean 类型的成员变量可以使用 “is” 来代替 “get”
- 必须提供无参的构造方法
JSP 标准动作
JSP 标准动作又称为 JSP 动作元素(Action Elements),是 JSP 的内置标记,由 JSP 容器实现,运行时就自动具有这些动能。JSP 动作可以直接在 JSP 页面使用,每个标准动作能实现一定的功能。
动作为请求处理阶段提供信息。JSP 动作遵循 XML 元素的语法,有一个包含元素名的开始标签,可以有属性、可选的内容、与开始标签匹配的结束标签等。
JSP 2.0 定义了 20 个标准的动作元素,暂且学习其中最常用的 7 个标准动作。
-
<jsp:forward page=“转发到的页面 url” />
- 实现页面的请求转发:将客户端所发的请求从一个 JSP 页面转发到另一个 JSP 页面。转发的过程中,客户端浏览器上显示的内容会变,但是请求不变,就是浏览器的URL地址不变。
-
<jsp:param name=“参数名” value=“参数值” />
- 用于实现参数的传递,该动作以键值对的形式为其他动作提供附加的参数信息。不能单独使用,需要作为其他动作(forward、include、plugin)的子动作出现。传递的参数会被封装在 request 请求中。
-
<jsp:include page=“包含文件URL地址” flush=“true | false” />
- 用于包含静态和动态的文件到当前页面中。涉及到动态包含,与 include 指令在处理细节上有很大不同。
-
<jsp:useBean id=“名称” class=“带有包名的类名” scope=“所存储的域范围” />
- 用于在指定的域范围内查找指定的 JavaBean 对象,如果找到,则直接返回该 JavaBean 对象的引用;如果未找到,则实例化一个新的 JavaBean 对象并将它以指定的名称存储到指定的域范围中。
-
<jsp:getProperty name=“JavaBean实例对象的名称” property=“JavaBean实例对象的属性名” />
- 用于读取 JavaBean 对象的属性,但是必须要 JavaBean 类中提供公有的 get 方法。
-
<jsp:setProperty name=“” property=“” value=“{string|<%=expression%>}” param=“parameterName” />
- 用于设置 JavaBean 对象的属性,但是必须要 JavaBean 类中提供公有的 set 方法。
-
<jsp:plugin type=“bean|applet” code=“classFileName” height=“displayPixels” width=“displayPixels” jreversion=“JREVersionNumber” > <jsp:fallback> text message for user </jsp:fallback> </jsp:plugin>
- 允许在页面中使用普通的 HTML 标记 <applet……></applet> 让客户下载运行一个 Java applet 程序。
五、JSP 表达式语言
EL 表达式(Expression Language)
EL 概念
通常用来简化数据的访问操作,可用来代替传统的基于 “<%= %>” 形式的 Java 表达式等,提供更清晰的视图层实现,使业务逻辑处理层和视图层尽可能的低耦合。
EL 语法
语法结构非常简单,${expression},expression 可以包含常量、操作符、变量(对象引用)、函数调用。
- 常量说明:Boolean、Integer、Floating Point、String、null
- 操作符:算术型、逻辑型、关系型、空、条件型
- 隐式对象:pageContext、pageScope、requestScope、sessionScope、applicationScope、param、paramValues、header、headerValues、cookie、initParam
EL 运算符
提供 “.” 和 “[]” 两种运算符来存取数据,其中动态取值用方括号,有特殊字符用方括号。
EL 常见应用
- 获取数据
- 执行运算
- 获取 Web 开发常用对象
- 调用 Java 方法,但需要同时满足以下两点才能被 EL 调用:
- 只能是 Java 类的静态方法
- 这个 Java 类的静态方法需要另外在自定义的 TLD 文件中描述
六、JSP 中使用数据库
JDBC 目的
设计出一种通用的数据库访问接口,使 Java 程序员使用 JDBC 可以连接任何提供了 JDBC 驱动程序的数据库系统。这样就使程序员无需过多的了解特定数据库的特点,大大简化和加快了开发速度。也就是俗称的 “加一层”,这样的方式在解决计算机领域的问题中非常常见。
JDBC 用途
- 数据库建立连接
- 发送 SQL 语句
- 处理结果
JDBC 操作步骤
- 加载数据库驱动
- 建立数据库连接
- 创建用于向数据库发送 SQL 语句的 Statement 对象,并执行 SQL 语句
- 处理查询结果
- 释放数据库资源
JDBC 事务处理
事务指逻辑上的一组操作,组成这组操作的各个单元,或者全部成功,或者全部不成功
- Connection.setAutoCommit(false):关闭默认的自动提交,相当于启动事务
- Connection.rollback():回滚事务
- Connection.commit():提交事务
七、JSTL 概述
JSTL 不建议使用,目前的开发模式都是前后端分离了,所以这部分就了解了解即可。
JSTL 概念
JSTL 全称为 JavaServer Pages Standard Tag Library,是一个实现 Web 应用程序中常见的通用功能的定制标记库集,这些功能包括迭代,条件判断、数据管理格式化、XML 操作以及数据库访问。这些标记库可以实现大量服务端 Java 应用程序常用的基本功能。
JSTL 作用:在应用程序服务器之间提供了一致的接口,最大程度提高了 Web 应用在各应用服务器之间的移植。简化了 JSP 和 Web 应用程序的开发。
JSTL 标签库的组成
- jar 包:标签库的功能实现部分,由 Java 实现
- tld 文件:tld 是 taglib library description 的缩写,用来描述标签库,内容为标签库中所有标签的定义,包括标签名、功能类以及各种属性
JSTL 标签库的分类
- 核心标签库:前置名称为 c
- I18N 格式标签库:前置名称为 fmt
- SQL 标签库:前置名称为 sql
- XML 标签库:前置名称为 xml
- 函数标签库:前置名称为 fn
八、Servlet 概述
要掌握 JSP 就必须了解其底层技术 Java Servlet,Servlet 是一种可以扩展 Web 服务器功能的 Java 类,可以用于生成动态的网页。Servlet 运行在 Servlet 容器中,负责 Servlet 的加载与卸载。Web 服务器将 http 请求传给 Servlet,并将 Servlet 生成的内容传给客户端。常见的 Servlet 容器有 Tomcat、Jetty、Resin等。
Servlet 是一个标准的 Java 类,它符合 Java 类的一般规则,和一般的 Java 类的不同之处在于 Servlet 可以处理 HTTP 请求。它使用 Java 语言中的 Servlet API 来编写的特殊的类。
Servlet 的实现步骤
实现一个 Servlet 主要包括两个步骤:
- 编写 Servlet 类。
- 配置 web.xml 文件。
Servlet 的生命周期
-
init() 方法:Servlet 的生命周期中只执行一次 init() 方法,是在服务器装入 Servlet 时执行的。
-
service() 方法:Servlet 的核心,每当一个客户端请求一个 HttpServlet 对象,该对象的 service() 方法就被调用。默认的服务功能是调用与 http 请求方法相应的 do 功能。
-
destroy() 方法:当关掉服务器或在指定的时间间隔过后调用 destroy() 方法。
-
具体过程:
-
实例化:Servlet 容器创建 Servlet 实例
-
初始化:容器调用 init() 方法
-
服务:客户端请求 Servlet 时,容器调用 service() 方法
-
销毁:结束服务时,调用 destroy() 方法
-
不可用:销毁实例后等待回收
-
九、Servlet API
HTTPServlet
HTTPServlet 类是一个重要的 Servlet API,是一个抽象类,用来创建 HTTP Servlet 的具体对象。
代码结构:
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class Servlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doGet(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
Web 服务器处理 HTTP 请求的基本流程如下:
- 当用户发出 HTTP 请求,Web 服务器接收到对某个 Servlet 请求,形成 HttpServletRequest 对象。
- 当 Servlet 容器接收到 Http 请求后,将会调用 Servlet 的 service() 方法。
- service() 方法会解析 HTTP 请求的内容,由此判断其 HTTP 请求为何种形式。
- 根据客户端的 HTTP 请求形式,service() 方法就会调用 doGet() 方法,Web 服务器把 servlet 的处理结果形成 HttpServletResponse 对象,响应用户的请求。
HTTP 请求方式
基本的 HTTP 请求形式 | Servlet 内相应的方法 | 方法说明 |
---|---|---|
GET | doGet() | 调用服务器的资源,并将其作为响应返回给客户端 |
POST | doPost() | 它用于把客户端的数据传给服务端 |
PUT | doPut() | 调用和 doPost 相似,并且它允许客户端把真正的文件存放在服务器上,而不仅仅是传送数据 |
HEAD | doHead() | 它用于处理客户端的 Head 调用,并且返回一个 response 。当客户端只需要响应的 header 时,它就发出一个 Header 请求。这种情况下,客户端往往关心响应的长度和响应的 MIME 类型 |
DELETE | doDelete() | 它允许客户端删除服务器端的文件或者 Web 页面。它的使用非常少 |
OPTIONS | doOptions() | 它用于处理客户端的 Options 调用,通过这个调用,客户端可以获得此 Servlet 支持的方法 |
TRACE | doTrace() | 返回 Trace 请求中的所有头部信息 |
Servlet API
在这里有很多方法,就不详细介绍了。
Servlet API 由两个软件包组成:javax.servlet 包和 javax.servlet.http 包。
javax.servlet 包中的主要接口包括
-
ServletConfig 接口:在初始化的过程中由 Servlet 容器使用
-
ServletContext 接口:定义 Servlet 用于获取来自其容器的信息的方法
-
ServletRequest 接口:向服务器请求信息
-
ServletResponse 接口:响应客户端请求
javax.servlet 包中的主要类包括
- ServletInputStream 类:用于从客户端读取二进制数据
- ServletOutputStream 类:用于将二进制数据发送到客户端
- ServletException 类:用于异常处理的类
- UnavailableException 类:当 servlet 或 filter不能用时,处理异常的类
javax.servlet.http 包中的主要接口包括
- HttpServletRequest 接口:提供 HTTP 请求信息
- HttpServletResponse 接口:提供 HTTP 响应
- HttpSession 接口:代表服务器与浏览器的一次会话过程
javax.servlet.http 包中的主要类为
- cookie 类:封装了存储在用户本地终端上的数据
ServletConfig 接口
ServletConfig 是一个由 Servlet 容器使用的 servlet 配置对象,用于在 servlet 初始化时向它传递信息。
当 Servlet 配置了初始化参数后,Web 容器在创建 Servlet 实例对象时,会自动将这些初始化参数封装到 ServletConfig 对象中,并在调用 servlet 的 init 方法时,将 ServletConfig 对象传递给 servlet。开发者通过 ServletConfig 对象就可以获得当前的 servlet 的初始化参数信息。
该对象的各个方法请大家自行了解。
ServletContext 接口
Web 容器在启动时,它会为每个 Web 应用程序都创建一个对应的 ServletContext 对象,该对象代表了当前 Web 应用程序对象。
ServletContext 对象是在 Web 应用程序装载时初始化的。
在 ServletConfig 对象中维护了 ServletContext 对象的引用,可以通过 ServletConfig.getServletContext
方法来获得 ServletContext 对象。
一个 Web 应用中的所有 Servlet 共享同一个 ServletContext 对象,因此,Servlet 对象之间可以通过 ServletContext 对象来实现通信。ServletContext 对象通常也被称之为 context 域对象。
该对象的各个方法请大家自行了解。
ServletRequest 接口
ServletRequest 接口代表 Servlet 的请求,是一个高层的接口。
ServletResponse 接口
ServletResponse 接口代表了 Servlet 的响应,是一个高层的接口。
Servlet 异常
ServletException 类包含一个获得异常原因的方法:public Throwable getRootCause()
,返回造成这个 ServletException 的原因。
UnavailableException 类,该类继承自 ServletException,当 Servlet 或 Filter 暂时或者永久不能使用时,会抛出该异常。
该对象的各个方法请大家自行了解。
HttpServletRequest 接口
HttpServletRequest 对象代表客户端的请求,当客户端通过 HTTP 协议访问服务器时,HTTP 请求中的所有信息都封装在这个对象中,开发人员通过该对象的方法,可以获得客户的这些信息。
通过 HttpServletRequest 对象进行的常用操作分为:获取客户机信息、获取客户机请求头信息、获取请求参数、利用请求域传递对象等。
该对象的各个方法请大家自行了解。
HttpServletResponse 接口
HttpServletResponse 对象提供服务器对客户端的 Http 响应,这个对象中封装了向客户端发送数据、发送响应头、发送响应状态码的方法。
该对象的各个方法请大家自行了解。
Web资源重定向
请求转发和响应转发的区别:
请求转发:服务器行为,request.getRequestDispatcher().forward(request, response);
是一次请求,转发后请求对象会保存,地址栏的 URL 地址不会改变(服务器内部转发,所有客户端看不到地址栏的改变)。
请求重定向:客户端行为,esponse.sendRedirect()
从本质上讲,等同于两次请求,前一次的请求对象不会保持,地址栏的 URL 地址会变。
cookie 技术
cookie 是一小段文本信息,伴随着用户请求和页面在 Web 服务器和浏览器之间传递。cookie 包含每次用户访问站点时 Web 应用程序都可以读取的信息。
项目中经常用到服务器在客户端保存用户的信息,如用户名、密码等就是 cookie。这些信息数据量并不大,服务器端在需要时从客户端读取。
cookie 作用
- 保存用户名、密码,在一定时间内不用重新登录。
- 记录用户访问网站的喜好,例如有无背景音乐、网页的背景色等。
- 网站的个性化,例如定制网站的服务、内容。
cookie 结构:名字与值,键值对形式,数据类型都是 String。
cookie 与 session 区别
编号 | 比较点 | cookie | session |
---|---|---|---|
1 | 存在的位置 | 保存在客户端 | 保存在服务端 |
2 | 安全性 | cookie 的安全性弱 | session 的安全性强 |
3 | 网络传输量 | cookie 通过网络在客户端与服务器传输 | session 保存在服务器端,不需要传输 |
4 | 生命周期 | cookie 生命周期是累计的 | session 是间隔的 |
十、Servlet 过滤器
Servlet 过滤器概念
在 JSP 开发中,经常会用到一些通用的操作,如编码的过滤、用户登录状态的判断、Web 应用的日志处理等。这些操作频繁的出现在业务需求中,造成 servlet 程序代码的大量复用。使用过滤器可以很好的解决这个问题。
过滤器作用:过滤器可以对浏览器向 JSP、Servlet、HTML 等 Web 资源发出的请求,以及服务器回应给浏览器的内容进行过滤。整个过滤过程可以拦截浏览器发出的请求和服务器回应给浏览器的内容。拦截之后,用户可以查看拦截内容,并且可以对拦截内容进行提取或者修改。
过滤器基本原理
Servlet 过滤器能够在 Servlet 程序(JSP 页面)被调用之前检查 request 对象,修改请求头和请求内容,在 Servlet 程序(JSP页面)被调用后,检查 response 对象,修改响应头和响应内容。
Servlet 过滤器的实现需要 servlet 的 Filter 接口支持,其实质仍然是由 Web 服务器管理的一个组件。过滤器常被称为 Filter。
Servlet 过滤器是声明式的,通过在 web.xml 文件中声明,允许添加或删除过滤器,无需修改程序源代码。
过滤链可以使得信息根据不同的拦截需求多次过滤。
Servlet 过滤器可以过滤所有 URL 访问,也可以被指定与特定的 URL 关联,只有当客户请求访问该特定的 URL 时,才会触发过滤器。
过滤器实现步骤
- 实现 Filter 接口
- 在 web.xml 文件中配置过滤器
- 在 WebRoot 目录下创建 filterDemo01.jsp 页面
- 访问该 JSP 页面
在 JSP 的页面显示之前,过滤器的 doFilter 方法就被执行了,而过滤器的 init 方法是在 Web 服务器(tomcat)启动的过程中被执行。
过滤器生命周期
周期阶段 | 自动调用的方法 | 方法介绍 | 细节特点 |
---|---|---|---|
对象实例化 | init 方法 | 初始化过滤器的参数信息 | 在 Web 服务器启动过程中,实例化就会完成 |
执行过滤方法 | doFilter 方法 | 执行具体的过滤业务 | 多个过滤器串联使用时,按照 xml 配置文件中的配置顺序,依次传递顺序 |
对象销毁 | destroy 方法 | 销毁过滤器对象,节约内存 | 在重新部署或关闭 Web 服务器时,完成对象销毁 |
通过 Servlet 过滤器可以实现的功能
- 处理中文乱码
- 验证用户访问权限
- ……
十一、MVC 开发模式
MVC 概述
MVC 全称是 Model View Controller,即模型 视图 控制器的缩写,MVC 是一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。
-
模型:数据模型,提供要展示的数据。
-
视图:向控制器提交所需的数据,并负责进行模型展示,一般是客户见到的用户界面。
-
控制器:接收用户请求,委托给模型进行处理,处理完毕后把返回的模型数据返回给视图,由视图进行展示,相当于一个调度员。
在 MVC 模式下,视图、控制器和模型之间是松耦合的结构,更加有利于系统的维护和扩展。
JSP 开发的两种模型
Model1
JSP + JavaBean
JSP 既负责处理用户请求,又负责显示数据,是视图层和控制器的组合。
JavaBean 用于封装业务数据,即模型层。
这种实现模式主要实现了页面显示与业务逻辑的分离,但是当业务逻辑复杂时,JSP 编写也将复杂,不推荐使用。
Model2
JSP + Servlet + JavaBean
模型(Model):一个或多个 JavaBean 对象,用于存储数据和处理数据。JavaBean 主要提供简单的 setXxx 方法和 getXxx 方法,在这些方法中不涉及对数据的具体处理细节,增加数据模型的通用性。
视图(View):一个或多个 JSP 页面,其作用是为模型提供数据和显示数据。JSP 页面主要使用 HTML 标记和 JavaBean 标记来显示数据,对数据的逻辑操作由控制器负责。
控制器(Controller):一个或多个 Servlet 对象,根据视图提交的请求进行数据处理操作,并将结果存储到 JavaBean 中,Servlet 使用转发或重定向的方式请求视图中的某个 JSP 页面显示数据。
如果我的博客对你有用的话,请给一个一键三连吧!