文章目录
一、JSP
1.1 指令
- 作用:用于配置JSP页面,导入资源文件
- 格式:
<%@ 指令名称 属性名1=属性值1 属性名2=属性值2... %>
- 分类:
page
:配置JSP页面的contentType
:等同于response.setContentType()
- 设置响应体的mime类型以及字符集
- 设置当前jsp页面的编码(只有高级的IDE才能生效如果是使用低级工具,需要设置
pageEncoding
属性设置当前页面的字符集)
import
:导包errorPage
:当前页面发生异常后,会自动跳转到指定的错误页面isErrorPage
:标识当前也是true
:是。可以使用内置对象exception
false
:否。默认值,不可以使用内置对象exception
include
:页面包含的。导入页面的资源文件<%@ include file="top.jsp" %>
taglib
:导入资源。类似于导入jar包<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
prefix
:前缀,自定义的
1.2 注释
- html注释:
<!-- -->
:只能注释html代码片段
- jsp注释
<%-- --%>
:可以注释所有。推荐使用
1.3 内置对象
- 在JSP页面中不需要创建,直接使用的对象
- 一共有9个
pageContext
request
session
application
response
page
out
config
exception
变量名 | 真实类型 | 作用 |
---|---|---|
pageContext | PageContext | 当前页面共享数据,还可以获取其他8个内置对象 |
request | HttpServletRequest | 一次请求访问的多个资源(转发) |
session | HttpSession | 一次会话的多个请求间 |
application | ServletContext | 所有用户间共享数据 |
response | HttpServletResponse | 响应对象 |
page | Object | 当前页面(Servlet)的对象 类似于this |
out | JspWriter | 输出对象,数据输出到页面上 |
config | ServletConfig | Servlet的配置对象 |
exception | Throwable | 异常对象 |
二、MVC开发模式
-
JSP演变历史
- 早期只有
Servlet
,只能使用response
输出标签数据,非常麻烦 - 后来有jsp,简化了
Servlet
的开发,如果过度使用JSP(既写大量的java代码,又有html),造成难维护、难分工的局面 - java的web开发,借鉴mvc开发模式,使得程序的设计更具有合理性
- 早期只有
-
MVC
- M:model 模型 ——
JavaBean
- 完成具体的业务操作。如,查询数据库,封装对象
- V:view 视图 ——
JSP
- 展示数据
- C:Controller 控制器 ——
Servlet
- 获取用户的输入
- 调用模型
- 将数据交给视图进行暂时
- 优缺点:
- 优点:
- 耦合性低,方便维护,便于分工协作
- 重用性高
- 缺点:使得项目架构变的复杂,对开发人员要求高
- 优点:
- M:model 模型 ——
三、EL表达式
3.1 概念
- Expression Language:表达式语言
3.2 作用
- 替换和简化JSP页面中java代码的编写
3.3 语法
${表达式}
- 注意:
- JSP默认解析EL表达式。如果要忽视EL表达式:
- 设置jsp中
page
指令:isELIgnored="true"
,忽略当前jsp页面中所有的el表达式 \${表达式}
:忽略当前这个表达式
- 设置jsp中
- JSP默认解析EL表达式。如果要忽视EL表达式:
3.4 使用
3.4.1 运算
- 运算符:
- 算数运算符:+ - * /(div) %(mod)
- 比较运算符: < > <= >= == !=
- 逻辑运算符:&& || !
- 空运算符:
empty
- 功能:用于判断字符串、集合、数组对象是否为
null
并且长度为0 ${empty list}
:判断字符串、集合、数组对象是否为null
并且长度不为0${not empty user}
:判断字符串、集合、数组对象是否不为null
或者长度>0
- 功能:用于判断字符串、集合、数组对象是否为
3.4.2 获取值
- el表达式只能从域对象中获取值
- 语法
${域名称.键名}
:从指定域中获取指定键的值- 域名称
pageScope
:pageContext
requestScope
:request
sessionScope
:Session
applicationScope
:application
,即ServletContext
- 如:
$requestScope.name
- 域名称
${键名}
:表示依次从最小的域中朝招是否有改建对应的值,直到找到为止- 如
${name}
- 如
- 获取对象、
List
集合、Map
集合- 对象:
${域名称.键名.属性名}
- 本质上调用对象的
getter
方法- 通过的是对象的属性来获取
setter
或getter
方法,去掉set
或get
,再将剩余部分,首字母变小写setName
-->Name
-->name
- 如:
${user.name}
- 通过的是对象的属性来获取
- 本质上调用对象的
List
集合:${域名称.键名[索引]}
Map
集合:${域名城.键名.key名称}
${域名称.键名["key名称"]}
- 对象:
- 隐式对象:
- el表达式中有11个隐式对象
pageContext
- 获取JSP其他8个内置对象
${pageContext.request.contextPath}
:重要,动态获取jsp的虚拟目录
- 获取JSP其他8个内置对象
- el表达式中有11个隐式对象
四、JSTL标签
4.1 JSTL概念
- Java Server Pages Tag Library:JSP标准标签库
- 是由Apache组织提供的开源的免费的jsp标签
- 作用:用于简化和替换Jsp 页面的java代码
- 使用步骤:
- 导入jstl相关jar包
- 引入标签库:taglib指令:
<%@ taglib %>
- 使用步骤
4.2 常用标签
4.2.1 if
-
必须的属性:
test
-
接受
boolean
表达式true
,显示标签体内容false
,不显示标签体内容
-
一般情况下,
test
属性会结合el表达式一起使用<% List<String> list = new ArrayList<>(); list.add("hello"); list.add("haha"); request.setAttribute("list",list); request.setAttribute("number", 3); %> <c:if test="${not empty list}"> 我是真的 </c:if> <c:if test="${number % 2 == 0}"> number为偶数 </c:if>
-
-
注意:
c:if
标签没有else
情况,想要用else
,则需另外定义c:if
标签
4.2.2 choose(switch)
-
完成数字编号对应星期几的案例
- 域中存储数字
- 使用
choose
标签取出数字:相当于switch
- 使用
when
标签做数字判断:相当于case
otherwise
标签做其他情况说明:相当于default
<% request.setAttribute("number",3); %> <c:choose> <c:when test="${number == 1}">星期一</c:when> <c:when test="${number == 2}">星期二</c:when> <c:when test="${number == 3}">星期三</c:when> </c:choose>
4.2.3 foreach(for)
-
相当于java代码汇总的
for
语句-
完成重复操作:普通
for
循环- 属性
begin
:开始值end
:结束值var
:临时变量step
:步长varStatus
:循环状态对象index
:容器中元素的索引,从0开始count
:循环次数
<c:forEach begin="1" end="10" var="i" step="1" varStatus="s"> ${i} ${s.index} ${s.count}; </c:forEach>
- 属性
-
遍历容器:
- 属性
items
:容器对象var
:容器中元素的临时变量
<% List<String> list = new ArrayList<>(); list.add("1"); list.add("2"); list.add("3"); request.setAttribute("list",list); %> <c:forEach items="${list}" var="str" varStatus="s"> ${str} ${s.count} ${s.index} </c:forEach>
- 属性
-
五、三层架构
- 软件设计架构
5.1 界面层(表示层)
- 用户看得到的界面。用户可以通过界面上的组件和服务器进行交互
5.2 业务逻辑层
- 处理业务逻辑、
5.3 数据访问层
- 操作数据存储文件