二刷 2024年12月1日 星期天
目录
[一: JSP](#一: JSP)
[1.1 基本概念](#1.1 基本概念)
[1.2 JSP的脚本](#1.2 JSP的脚本)
[1.3 JSP的内置对象](#1.3 JSP的内置对象)
[1.4 JSP指令](#1.4 JSP指令)
[1.5 JSP注释](#1.5 JSP注释)
[二: MVC 开发模式](#二: MVC 开发模式)
[五:MAV 三层架构](#五:MAV 三层架构)
一: JSP
1.1 基本概念
- JavaServer Pages:java服务器端页面
可以理解为:一个特殊的页面,其中既可以指定定义html标签,有可以定义java代码
作用:用于简化书写
如果我们要在页面正常显示中文,我们需要在 JSP 文件头部添加以下代码:
java
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
1.2 JSP的脚本
------ JSP定义Java代码的方式
<% 代码 %>:定义的Java代码,在service1方法中。service方法中可以定义什么,该脚本就可以定义什么。
<%! 代码 %>:定义的Java代码,在jsp转换后的java类的成员位置(定义成员方法、成员变量...... )。
<%= 代码 %>:定义的Java代码,会输出在页面上,servlet类中输出语句可以定义什么,该脚本就可以定义什么。
1.3 JSP的内置对象
------ 在jsp页面中不需要获取和创建,可以直接使用的对象,一共有9个。
|-------------|---------------------|------------------------|
| 变量名 | 真实属性 | 作用 |
| pageContext | PageContext | 当前页面共享数据,还可以获取其他八个内置对象 |
| request | HttpServletRequest | 一次请求访问的多个资源(转发) |
| session | HttpSession | 一次会话的多个请求间 |
| application | ServletContext | 所有用户间共享数据 |
| response | HttpServletResponse | 响应对象 |
| page | Object | 当前页面(Servlet)的对象 this |
| out | JspWriter | 输出对象,数据输出到页面上 |
| config | ServletConfig | Servlet的配置对象 |
| exception | Throwable | 异常对象 |
其中三个:
-
request
-
response
-
out:字符输出流对象。可以将数据输出到页面上。和response.getWriter()类似
response.getWriter()和out.writer()的区别:
在tomcat服务器真正给客户端做出响应之前,会先找response缓冲区数据,再找out缓冲区数据
response.getWriter()数据输出永远再out.writer()之前。
1.4 JSP指令
作用:用于配置JSP页面,导入资源文件
格式:<%@ 指令名称 属性名1=属性值1 属性名2=属性值3 ... %>
分类:
- page : 配置JSP页面的
* 相关属性名:
import: 导包
contentType: 等同于response.setContentType(),
I. 设置响应体的mine类型以及字符集
II. 设置当前jsp页面的编码(只能是高级工具才有效,否则需要pageEncoding属性来设置当前页面的字符集)
errorPage:当页面发生异常后,会自动跳转到指定的错误页面。
isErrorPage:标识当前页面是否是错误页面,默认false,不可以使用内置对象exception
- include : 页面包含的。导入页面的资源文件
<%@include file="xxx.jsp"%>
- taglib : 导入资源
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
*prefix:前缀属性,属性值自定义
1.5 JSP注释
<%-- 注释内容--%>
(注:可以注释掉任何类型的内容)
二: MVC 开发模式
2.1. jsp演变历史:
早期只有Servlet,只能使用response输出标签数据,非常麻烦
后来有jsp,简化了Servlet的开发,如果过度使用jsp,在jsp中将会写大量的代码,会造成难以维护,难于分工协作
再后来,java的web开发,借鉴MAC开发模式,使得程序设计更加合理性
2.2. MAC:
-M: Model,模型,JavaBean类
完成具体的业务操作,如:查询数据库类,封装对象
- V: View,视图, JSP页面
展示数据
- C : Controller,控制器,Servlet类
获取用户的输入
调用模型
将数据交给视图进行展示
2.3. 优点:耦合性低,方便维护,有利于分工协作,重用性高
2.4. 缺点:使得项目架构变得复杂,对开发人员要求提高了
三:EL表达式
3.1. 概念:Expression Language 表达式语言
3.2. 作用:替换和简化jsp页面中java代码的编码
3.3. 语法:${表达式}
3.4. 注意:jsp默认支持EL表达式,但也可以进行设置成不支持
法一:设置jsp中page指令:**isELIgnored="true"**忽略当前jsp页面所有的EL表达式
法二:\${表达式}:忽略当前这个EL表达式
3.5. 使用:
- 运算符:
算术运算符:+ - * /(div) %(mod)
比较运算符:> < >= <= == !=
逻辑运算符:&&(and) ||(or) !(not)
空运算符: empty
功能: 用于判断字符串、集合、数组对象是否为null,并且长度是否为0
${empty list} --> 不为空则为false
反向判断:${not empty list} --> 为空则为false
- 获取普通键值:
语法1:${域名称.键名}
说明:从指定域中获取指定键的值
举例:在request域中存储了name=张三,即:${requestScope.name}
域名称:
pageScope --> pageContext
requestScope --> request
sessionScope --> session
applicationScope --> application(ServletContext)
- 语法2:${键名}:表示依次从最小的域中查找是否有对应的值,知道找到为止
- 获取对象的值:`${域名称.键名.属性名} `
本质上会去调用对象的getter方法
setter或getter方法,去掉set或get,再将剩余部分色首字母改为小写
setAge --> Age --> age
- 获取List集合里的值:`${域名称.键名[索引]}`
如果索引越界,在EL表达式中则会特别处理,不会报错,而是什么都不显示
获取Map集合里的值:`{域名称.键名\["key名称"\]}**\` 或 \`**{域名称.键名.key名称} `
隐式对象:EL表达式中有11个隐式表达式
pageContext: 用来获取jsp其它八个内置对象
${pageContext.request.contextPath} --> 动态获取虚拟路径
(剩下的自行了解)
四:JSTL
4.1. 概念:JavaScript Pages Tag Library JSP标准标签库
是由Apache组织提供的开源的免费的jsp标签
4.2. 作用:用于简化和替换jsp页面上的java代码
4.3. 使用步骤:
导入jstl相关的jar包
引入标签库:taglib指令 `<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> `
使用标签
4.4. 常用的JSTL标签
- if: 相当于java代码的if代码
test属性是必须属性,属性值为false,则不显示标签体内容,为true则显示
一般情况下,test属性结合EL表达式一起使用
注意:c:if标签没有else情况,想要else情况,则需另外再定义一个c:if标签
-choose: 相当于java代码的switch代码
foreach: 相当于java代码的for代码
功能:完成重复的操作;或遍历容器
属性:
begin:开始值
end:结束值
var:临时变量
step:步长
items:容器对象
varStatus:循环状态对象
index:容器中元素的索引,从0开始
count:循环次数,从1开始
4.5. JSTL案例
需求:在request域中有一个存有User对象的List集合,
需要用jstl+el技术将list集合里的数据展示到jsp页面的表格table中
五:MAV 三层架构
1.界面层(表示层):用户看的界面,用户可以通过界面上的组件和服务器进行交互
- 业务逻辑层:处理业务逻辑的
3.数据访问层:操作数据存储文件