JSP
- JSP(JavaServer Pages):由Sun Microsystems公司主导创建的一种动态网页技术标准。
指令:
- 格式:
<%@ 指令名称 属性名1=属性值1 属性名2=属性值2 ... %>
- 作用:配置JSP页面,导入资源文件。
- 分类:
- include:页面包含,主要用于导入页面的资源文件。
<%@include file="top.jsp"%>
- page:配置JSP页面。
- contentType:等同于response.setContentType()
- 配置响应体的mime类型以及字符集。
- 配置当前JSP页面的编码(只有使用高级的集成编译器才能生效,否则需要设置pageEncoding属性设置当前页面的字符集)。
- import:导包
- errorPage:当前页面发生异常之后会自动跳转到指定的错误页面。
- isErrorPage:标识当前展示是否为错误页面。
- true:是,可以使用内置对象exception。
- false:否,默认值。不可以使用内置对象exception。
3.taglib:导入资源
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
- prefix:前缀,自定义。
注释:
- JSP注释:
<%…%>:可以注释所有。 - html注释:
- <!..>:只能注释html代码片段。
内置对象:
- 再JSP页面中不需要创建,直接使用的对象。
MVC
MVC(开发模式):
- M[Model(模型):JavaBean]:完成具体的业务操作(eg:查询数据库,封装对象)
- V[View(视图):JSP]:展示数据。
- C[Controller(控制器):Servlet]:
- 获取用户的输入
- 调用模型
- 将数据交给视图进行展示
- 优缺点:
EL表达式
- EL表达式(Expression Language)[表达式语句]:简化和替换JSP页面中Java代码的编写。
- 语法:${表达式}
- 注意:JSP默认支持EL表达式。当需要忽略EL表达式时:
- 设置JSP的page指令:isElgnored=“true” 忽略当前JSP页面中所有的EL表达式。
\${表达式}
:忽略当前的这个EL表达式。
使用:
1.运算:
- 运算符:
1. 算数运算符: + - * /(div) %(mod)
2. 比较运算符: > < >= <= == !=
3. 逻辑运算符: &&(and) ||(or) !(not)
4. 空运算符: empty
* 功能:用于判断字符串、集合、数组对象是否为null或者长度是否为0
${empty list}
:判断字符串、集合、数组对象是否为null或者长度为0。${not empty str}
:表示判断字符串、集合、数组对象是否不为null并且长度>0。
2. 获取值:
- 注:EL表达式只能从与对象中获取值
- 语法:
-
${域名称.键名}
:从指定域中获取指定键的值。
* eg:在request域中存储了name=李伟
* 获取:${requestScope.name}
-
${键名}
:表示依次从最小的域中查找是否有该键对应的值,直到找到为止。 -
获取对象、List集合、Map集合的值:
- 对象:
${域名称.键名.属性名}
(本质上会去调用对象的getter方法。)- List集合:
${域名称.键名[索引]}
- Map集合:
${域名称.键名.key名称}
${域名称.键名["key名称"]}
3.隐式对象:
- 注:EL表达式中有11个隐式对象
- pageContext【获取JSP其他八个内置对象】:
${pageContext.request.contextPath}
(动态获取虚拟目录)
三层架构
- 三层架构:软件设计架构
1.界面层(表示层):用户看得到的界面。(用户能通过界面上的组件和服务器进行交互)。
2.业务逻辑层:处理业务逻辑。
3.数据访问层:操作数据存储文件。
JSTL
- JSTL(Java Server Pages Tag Library [JSP标准标签库]):由Apache组织提供的开源且免费的JSP标签。
- 步骤:
- 常用的JSTL标签:
- 赋值标签:
<c:set>
(用于给变量或对象属性赋值)
格式:
<c:set value="变量值" var="变量名" [scope="{page|request|session|application}"]>
<c:set var="变量名" [scope="{page|request|session|application}"]>
变量值
</c:set>
<c:set value="属性值" target="对象名" property="属性名"/>
<c:set target="对象名" property="属性名">
属性值
</c:set>
注:
- valu属性:其赋值给变量或对象属性
- var属性:指定变量名称
- scope属性:指定变量范围,默认值为page
- target属性:指定对象名称
- property属性:指定对象属性名称
- 条件标签:
<c:if>
(用于实现条件测试)
格式:
<c:if test="测试条件" var="变量名" [scope="{page|request|session|application}"]/>
<c:if test="测试条件" [var="变量名"] [scope="{page|request|session|application}"]>
嵌套代码
</c:if>
注:
- test:属性指定测试条件,接受boolean表达式
- var:属性指定保存测试条件的计算结果
- scope:属性指定var变量的范围,默认值为page
- c:if标签没有else情况,想要else情况,则可以在定义一个c:if标签
- 表达式为true,则显示if标签体内容; 为false,则不显示标签体内容
- 选择标签:
<c:choose>
、<c:when>
、<c:otherwise>
(用于属性多分支条件测试)
格式:
<c:choose>
[<c:when test="测试条件1">
嵌套代码1
</c:when>
<c:when test="测试条件2">
嵌套代码2
</c:when>]
.....
[<c:otherwise>
嵌套代码n
</c:otherwise>]
</c:choose>
注:
<c:choose>
标签包含多个<c:when>
标签和一个<c:otherwise>
标签,<c:otherwise>
标签必须放在所有<c:when>
标签后。- 测试条件计算为true时,执行对应的嵌套代码;当没有
<c:when>
标签测试条件计算为true时,执行<c:otherwise>
标签内的嵌套代码。
4.迭代标签:<c:foreach>(用于实现集合与数组迭代,也可实现固定次数的迭代)
格式:
- 迭代集合或数组:
<c:forEach [var="变量名"] items="迭代对象" [varStatus="状态变量名"] [begin="初值"] [end="终值"] [step="步长"]>
嵌套代码
</c:forEach>
- 固定次数迭代:
<c:forEach [var="变量名"] [varStatus="状态变量名"] [begin="初值"] [end="终值"] [step="步长"]>
嵌套代码
</c:forEach>