JavaWeb学习笔记——JSP
文章目录
- JSP (Java Server Pages)
- JSP原理
- JSP脚本
- JSP内置对象
- response.getWriter() 和 out 的区别
- JSP指令
- JSP指令格式
- JSP指令分类
- include:导入页面的资源文件
- 属性
- page:配置JSP页面
- 属性
- taglib:导入资源
- JSP注释
- HTML注释
- JSP注释
- MVC开发模式
- EL表达式
- EL表达式语法
- EL运算符
- 算数运算符
- 比较运算符
- 逻辑运算符
- 空运算符
- EL获取域中的值
- EL取值语法
- EL获取对象值
- EL获取List中的值
- EL获取Map中的值
- JSTL
- 步骤
- 常用的JSTL标签
- ① if
- 属性
- ② choose
- 相关标签
- ③ foreach
- 属性
- 作用
- 三层架构
- 界面层(表示层 / web层)
- 业务逻辑层(service层)
- 数据访问层(操作层 / DAO层)
JSP (Java Server Pages)
JSP全称Java Server Pages(Java服务器页面),是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以<%
开头以%>
结束
JSP可以理解为一个特殊的页面,其中可以定义HTML标签和Java代码,用于简化书写
JSP原理
- 服务器解析请求消息,寻找是否存在
index.jsp
资源 - 如果寻找到
index.jsp
,会将index.jsp
转换为.java
文件 - 编译
.java
文件并生成.class
字节码文件 - 最后由字节码文件提供访问
JSP本质上是一个Servlet
JSP脚本
JSP用来定义Java代码的方式
① <% Java代码 %>:定义的Java代码在service
方法中,service方法中可以定义的内容均可以在这里定义
② <%! Java代码 %>:定义的Java代码在JSP装换的Java类中的成员
位置,可以定义成员变量,成员方法等
③ <%= Java代码 %>:定义的Java代码会输出到页面上,可以定义输出语句内的内容
JSP内置对象
在JSP页面中不需要创建获取,可以直接使用的对象
变量名 | 真实类型 | 作用 |
---|---|---|
request | HttpServletRequest | 请求对象 |
response | HttpServletResponse | 响应对象 |
out | JspWriter | 输出流对象,与response.getWriter()相似 |
pageContext | pageContext | 当前页面共享数据,还可以获取其他8个内置对象 |
session | HttpSession | 一次会话的多个请求件共享数据 |
application | ServletContext | 所有用户之间共享数据 |
page | Object | 当前页面对象 |
config | ServletConfig | Servlet的配置对象 |
exception | Throwable | 异常对象 |
response.getWriter() 和 out 的区别
<body><%response.getWriter().write("this is response");%><%out.print("this is out");%>
</body>
以上代码定义了两个JSP脚本用来输出内容到页面,正常情况下,程序应当按照顺序执行,即先执行response输出再执行out输出,输出结果也证明了这一点
如果我们将两个脚本换一下位置
<body><%out.print("this is out");%><%response.getWriter().write("this is response1");%>
</body>
这时按照正常思路,应当先执行out输出,再执行response输出,然而输出结果却依然是先执行了response输出
这是因为在tomcat服务器给客户端做出响应之前,会先从response缓冲区中寻找数据,再去out缓冲区中寻找数据,所以response.getWriter()
的输出永远在out
之前
JSP指令
用于配置JSP页面,导入资源文件
JSP指令格式
<%@ 指令名称 属性名1=属性值1 属性名2=属性值2 %>
多个属性之间用
空格
隔开
JSP指令分类
include:导入页面的资源文件
属性
· file:要导入的页面资源文件
page:配置JSP页面
属性
① contentType:等同于response.setContentType()
,可以设置响应体的MIME类型以及字符集,和当前JSP页面的编码(仅限高级IDE)
② pageEncoding:设置当前JSP页面的编码
③ buffer:设置缓冲区大小
④ import:导入包
⑤ errorPage:当前页面发生异常后会自动跳转到指定的错误页面
⑥ isErrorPage:标识当前页面是否为错误页面,默认为false
若标注当前页面为错误页面,则可以使用内置对象exception
taglib:导入资源
① prefix:自定义前缀
② uri:导入资源的位置
JSP注释
HTML注释
<!-- -->
HTML注释只能注释HTML代码片段
JSP注释
<%-- --%>
可以注释所有内容
MVC开发模式
M:Model,即模型,用来完成具体的业务操作 ——JavaBean
V:View,即视图,用来展示数据——JSP
C:Controller,即控制器,用来获取请求参数,调用模型,将数据交给视图来展示——Servlet
EL表达式
Expression Language 表达式语言,可以替换和简化JSP中Java代码的书写
EL表达式语法
${ 表达式 }
JSP中是默认支持EL表达式的,如果不希望JSP解析EL表达式,可以使用两种方法
- 设置
page
指令中的isElIgnored
为true
,设置之后JSP中的所有EL表达式都会被忽略 - 在EL表达式之前添加
\
——\${}
可以忽略单个EL表达式
EL运算符
算数运算符
运算符 | 描述 |
---|---|
+ | 加法 |
- | 减法 |
* | 乘法 |
/ (div) | 除法 |
% (mod) | 取余 |
<body>
<h4>算数运算符</h4>
${1 + 1}<br>
${2 - 1}<br>
${4 / 2}<span>等同于</span>${4 div 2}<br>
${5 % 3}<span>等同于</span>${5 mod 3}<br>
</body>
显示结果为
算数运算符
2
1
2.0等同于2.0
2等同于2
比较运算符
运算符 | 描述 |
---|---|
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
== | 等于 |
!= | 不等于 |
<body>
<h4>比较运算符</h4>
${1 > 2}<br>
${3 < 5}<br>
${3 == 3}<br>
${3 != 3}<br>
</body>
显示结果为
比较运算符
false
true
true
false
逻辑运算符
运算符 | 描述 |
---|---|
&& (and) | 与运算 |
|| (or) | 或运算 |
! (not) | 非 |
<body>
<h4>逻辑运算符</h4>
${true && false}<span>等同于</span>${true and false}<br>
${true || false}<span>等同于</span>${true or false}<br>
${!true}<span>等同于</span>${not true}<br>
</body>
显示结果为
逻辑运算符
false等同于false
true等同于true
false等同于false
空运算符
运算符 | 描述 |
---|---|
empty | 判断字符串,集合,数组的对象是否为null、长度是否为0 |
<body><%List list = new ArrayList();String str = "123";request.setAttribute("List",list);request.setAttribute("String",str);%>${empty List}${empty String}
</body>
显示结果为
true false
EL获取域中的值
EL表达式只能从域对象中获取值
EL取值语法
- ${域名称.键名} 从指定的域中获取指定键的值
域名称 | 获取值的对象 |
---|---|
pageScope | pageContext |
requestScope | request |
sessionScope | session |
applicationScope | application(ServletContext) |
<body><%// 存储数据request.setAttribute("request","msgR");session.setAttribute("session","msgS");pageContext.setAttribute("page","msgP");application.setAttribute("application","msgA");%><p>获取值</p>${requestScope.request}${sessionScope.session}${pageScope.page}${applicationScope.application}
</body>
显示结果
获取值
msgR msgS msgP msgA
- ${键名}
在这中写法下,会从最小域开始依次寻找指定键名的对应值,直到寻找到为止
<body><%// 存储数据request.setAttribute("request","msgR");session.setAttribute("msg","msgS");pageContext.setAttribute("msg","msgP");application.setAttribute("application","msgA");%><p>获取值</p>${msg}
</body>
显示结果
获取值
msgP
由于pageContext
域对象的范围要小于session
,所以当找到ageContext
中的对应值后即会输出,若希望使用session
中的对应值,则需要添加域名称
EL获取对象值
${域名称.键名.属性名}
本质上会调用对象对应属性的getter方法
示例代码
<body><%Person p = new Person();p.setName("Person");p.setAge(20);p.setSex("M");request.setAttribute("Person",p);%><p>获取对象值</p>${requestScope.Person}
</body>
若直接获取对象,则会将对象的地址值输出出来
获取对象值domain.Person@13adae1
若希望获取对象的详细值,则需要通过对象的属性
来获取
对象的属性
指的是,在getter
和setter
中,去掉get
或set
,然后将剩下的内容首字母变小写,得到的内容则为对象的属性
在示例代码中,Person类存在一个setName()
方法,以此为例
方法名 | 去掉get或set | 属性名 |
---|---|---|
setName | Name | name |
即Person类存在一个属性为name
,可以通过这个属性来获取Person的name值
${requestScope.Person.name}
输出结果为
获取对象值Person
EL获取List中的值
${域名称.键名[索引]}
<body><%List list = new ArrayList();list.add("a");list.add("b");list.add("c");request.setAttribute("List",list);%><p>获取List值</p>${requestScope.List}
</body>
若直接获取List,则会输出List的所有内容
获取List值[a, b, c]
通过添加索引可以获取List中指定的内容
${requestScope.List[0]}
获取List值a
如果出现下标越界的情况,EL表达式会直接输出空字符串而不会报错
若List中存储了一个对象,通过索引和属性也可以输出对象的具体属性值
<body><%Person p = new Person();p.setName("P");List list = new ArrayList();list.add("a");list.add("b");list.add("c");list.add(p);request.setAttribute("List",list);%><p>获取List值</p>${requestScope.List[3].name}
</body>
输出结果为
获取List值P
EL获取Map中的值
${域名称.键名.key}
${域名称.键名[“key”]}
<body><%Map map = new HashMap();map.put("name","name");map.put("age",20);request.setAttribute("Map",map);%><p>获取Map值</p>${requestScope.Map.name}${requestScope.Map["age"]}
</body>
输出结果为
获取Map值name 20
同样的,如果Map中也存放了对象,同样可以使用key和属性名来获取对象的属性值
JSTL
JavaServer Page Tag Library JSP标准标签库
由Apache提供的开源JSP标签,用于简化和替换JSP中的Java代码
步骤
- 导入JSTL jar包
- 使用
taglib
指令引入标签库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
- 使用标签
常用的JSTL标签
① if
相当于Java中的
if
语句
属性
test:必须属性,接受boolean表达式,如果表达式为true
则显示内容,为false
则不显示内容
<body><c:if test="true">显示内容</c:if><c:if test="false">不显示内容</c:if>
</body>
一般情况下,test的属性值会结合EL表达式一起使用
② choose
相当于Java中的
switch
语句
相关标签
① when :相当于case
② otherwise:相当于default
<body><%request.setAttribute("num",5);%><c:choose><c:when test="${num == 3}">3</c:when><c:otherwise>other</c:otherwise></c:choose>
</body>
输出结果为 other
③ foreach
相当于Java中的
for
语句
属性
begin:起始值
end:结束值
var:临时变量
step:步长
varStatus:循环状态对象,存在属性index
—索引,count
—循环次数
iteam:容器对象
作用
- 完成重复操作,如
for(int i = 1; i <= 5; i++){System.out.print("1");
}
JSTL实现
<body><c:forEach begin="1" end="5" var="i" step="1">1</c:forEach>
</body>
- 遍历,如
for(int i : array){System.out.print(i);
}
JSTL实现
<body><%int[] array = {1,2,3,4,5};request.setAttribute("array",array);%><c:forEach items="${array}" var="i">${i}</c:forEach>
</body>
三层架构
三层架构是一种软件设计架构,为了符合“高内聚,低耦合”思想
界面层(表示层 / web层)
用户看到的界面,用户可以通过界面上的组件和服务器进行交互,接受用户参数,封装数据,调用业务逻辑层
业务逻辑层(service层)
用来处理业务逻辑,组合DAO层中的简单方法,形成复杂功能(业务逻辑操作)
数据访问层(操作层 / DAO层)
用来操作数据,存储文件,只定义了对于数据库最基本的CRUD操作
JavaWeb学习笔记——JSP相关推荐
- javaWeb学习笔记 --- JSP
JSP jsp概述 由SUN公司提供的动态web资源的开发技术,看起来非常像html,但是可以在JSP页面中写java代码,所以JSP是一种动态web资源开发技术 JSP技术的由来 JSP的出现是为了 ...
- JavaWeb学习笔记——jsp内置对象
- Javaweb学习笔记(JSP标准标签库)
Javaweb学习笔记(JSP标准标签库) JSTL入门 安装和测试JSTL JSTL中的Core标签库 < c:out>标签 标签 标签 < c:catch>标签 标签 标签 ...
- JavaWeb学习笔记(十)--HttpServletRequest
1. HttpServletRequest简介 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中 2. Ht ...
- JavaWeb学习笔记2 —— Web服务器简介
JavaWeb学习笔记2 -- Web服务器简介 参考教程B站狂神https://www.bilibili.com/video/BV12J411M7Sj 相关技术 ASP: 微软:国内最早流行的就是A ...
- B站狂神说JavaWeb学习笔记
JavaWeb学习笔记(根据b站狂神说java编写) 1.基本概念 1.1 前言 静态Web: 提供给所有人看数据不会发生变化! HTML,CSS 动态Web: 有数据交互,登录账号密码,网站访问人数 ...
- JavaWeb学习笔记(5)-B站尚硅谷
文章目录 十四.书城项目第三阶段--优化 (1)页面jsp动态化 (2)抽取页面中相同的内容 A.登录成功的菜单 B.base.css.jQuery标签 C.每个页面的页脚 D.manager模块的菜 ...
- JavaWeb学习笔记(软件系统体系结构、Tomcat、Web应用、HTTP协议)
JavaWeb学习笔记 JavaWeb学习笔记 软件系统体系结构 常见软件系统体系结构C/S.B/S Web资源 Web服务器 Tomcat Tomcat概述 安装.启动.配置Tomcat Web应用 ...
- JavaWeb学习笔记-目录(待完成)
JavaWeb学习笔记-目录(待完成) 01-基础加强(注解+反射) 02-mysql基础 03-mysql约束 04-mysql多表事务 05-jdbc 06-jdbc连接池JDBCTemplate ...
最新文章
- docker 笔记 (6)搭建本地registry
- python爬取站长素材网页图片保存到ppt中
- 数据库路由中间件MyCat - 源代码篇(7)
- LLLYYY的数字思维
- 2018/Province_Java_A/2/星期一
- service mysqld start,Failed to start mysqld.service: Access denied
- java oracle 连接字符串函数_通过shell来比较oracle和java中的字符串使用
- ffmpeg中文开发手册_快速调用复杂命令,支持中文注释,命令行备忘工具navi两天就火了...
- 选择在何处重构(下)
- .NET根本权限管理框架源代码
- azw3 netty权威指南_小程序,巧应用(pdf+epub+mobi+txt+azw3)
- Cortex-M3 (NXP LPC1788)之WDT窗口看门狗定时器
- ASO优化教程:产品预热与应用提交aso主要优化,ASO优化
- 群晖docker创建运行spring cloud微服务
- 「JavaSE」-流程控制和方法
- Android BLE4.+ 蓝牙开发国产手机兼容性解决方案
- html布局间距,CSS Grid布局:列和间距
- html画布直线代码,图文详解如何用html5 canvas画一条直线
- system.exe,alien32.exe,ftsKetNt.7ps,SysKetNt.Sys, iexpe.exe等1
- 电池巡检微信云监控系统——在线监测、故障诊断、预警
热门文章
- The code of method _jspService(HttpServletRequest, HttpServletResponse) is exceeding the 65535 bytes
- tedu斌-MySql笔记2112-1
- 十大算法之克鲁斯卡尔算法
- java s1 s2 s3 s4_电源选项中S1,S2,S3,S4,S5
- 什么是UGC社区?#社区产品笔记
- 用一个空置U盘(大白菜)PE重装系统
- 书论80 阮元《南北书派论》
- 移动WEB开发之-REM(rem)布局
- Hadoop技术内幕:深入解析MapReduce架构设计与实现原理 (大数据技术丛书) - 电子书下载(高清版PDF格式+EPUB格式)...
- Vue.js学习-搭建一个简单的demo