一.JSP
指令,用于配置JSP页面,导入资源文件
格式
<%@ 指令名 属性名1=属性值1 属性名2=属性值2... %>
1.<%@ page %>
用来设置JSP页面的一些参数,这些参数一般都有默认最优的配置
contentType | 等同于response.setContentType()
设置响应体的mime类型以及字符集
设置当前jsp页面的编码(只能是高级的IDE才能生效,如果使用低级工具,则需要设置pageEncoding属性设置当前页面的字符集)
|
import | 导包 |
errorPage | 当前页面发生异常后,会自动跳转到指定的错误页面,一般全局错误配置较为常用 |
全局错误页面配置,配置在web.xml
<error-page>
<error-code>404</error-code>
<location>/500.jsp</location>
</error-page>
isErrorPage | 标识当前也是是否是错误页面。
true 是,可以使用内置对象exception
false 否。默认值。不可以使用内置对象exception
|
buffer | 设置缓冲区大小 |
extends | 继承一个类,但是只能继承HttpServlet的子类 |
session | 表示Session对象是否可用
true:是,可以使用内置对象exception
false:否。默认值。不可以使用内置对象exception
|
2.<%@ include %>
页面包含的。导入页面的资源文件,降低了项目的维护成本
<%@include file="top.jsp"%>
3.<%@ taglib %>
导入资源
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
prefix:前缀,自定义的
二.注释
html注释
<!-- --> 只能注释html代码片段
jsp注释,推荐使用
<%-- --%> 可以注释所有
三.9大内置对象(面试点)
在jsp页面中不需要创建,直接使用的对象
变量名 | 真实类型 | 作用 |
pageContext | PageContext | 域对象,可用于当前页面共享数据,5个域对象中最小的域
还可以获取其他八个内置对象
|
request | HttpServletRequest | 域对象,一次请求访问的多个资源(转发) |
session | HttpSession | 域对象,一次会话的多个请求间 |
application | ServletContext | 域对象,所有用户间共享数据,唯一只有一个的对象,服务器开启被创建,服务器闭被销毁 |
response | HttpServletResponse | 响应对象 |
page | Object | 当前页面(Servlet)的对象,相当于this |
out | JspWriter | 输出对象,数据输出到页面上 |
config | ServletConfig | Servlet的配置对象 |
exception | Throwable | 异常对象,声明isErrorPage为true才可以使用 |
四.MVC开发模式
Model View Controller
Model,模型。JavaBean,DAO
完成具体的业务操作,如:查询数据库,封装对象
View,视图。JSP
只展示数据
Controller,控制器。Servlet
获取用户的输入
调用模型
将数据交给视图进行展示
优点
1. 耦合性低,方便维护,可以利于分工协作
2. 重用性高
缺点
1. 使得项目架构变得复杂,对开发人员要求高
五.EL表达式
Expression Language 表达式语言
作用
执行运算
获取数据
总之用来,替换和简化jsp页面中java代码的编写,执行的语句会输出
语法
${表达式}
注意
JSP默认支持EL表达式,如需忽略EL表达式
1.
配置JSP中page指令的属性isELIgnored="true" 忽略当前jsp页面中所有的el表达式
2.
\${表达式} 忽略当前el表达式,相当于转义符的意思
使用
1.运算符
a) 算术运算符
+ - * /(也可用div代替) %(也可用mod代替)
b) 比较运算符
> < >= <= == !=
c) 逻辑运算符
&&(and) ||(or) !(not)
d) 空运算符
empty
not empty
判断字符串,集合,数组对象是否为null或者长度是否为0
格式
${empty list} 判断字符串、集合、数组对象是否为null或者长度为0
${not empty list} 表示判断字符串、集合、数组对象是否不为null 并且 长度>0
2.获取值
el表达式只能从域对象中获取值
${域名称.键}
从指定域中获取指定键的值
pageScope | pageContext |
requestScope | request |
sessionScope | session |
applicationScope | application(ServletContext) |
举例
在request域中存储了name=张三
获取
${requestScope.name}
以上写法就能在页面输出张三
注意
el表达式获取值如果什么都没获取到,不会显示null,而是会显示一个空字符串,不会影响页面的显示效果
${键名}
表示依次从最小的域中查找是否有该键对应的值,直到找到为止。
只要保证4个域对象没有重名的键,就可以用这种简化写法.
用什么名字存进去的就用什么名字取出来再用这个名字调用属性,存进去是什么类型取出来就是什么类型
3.获取对象、List集合、Map集合的值
对象
${域名称.键名.属性名}
本质上会去调用对象的getter方法
一般生产中,可以在代码中制造一个逻辑视图,来实现自己想要表达的格式
List集合
${域名称.键名[索引]}
如果索引越界不会报错,会显示一个空字符串,不会影响页面的显示效果
Map集合
${域名称.键名.key名称}
${域名称.键名["key名称"]}
带索引的用[],带属性的用 .属性 (Map的属性就是他的key)
4. 隐式对象
el表达式中有11个隐式对象
pageContext
获取jsp其他八个内置对象
${pageContext.request.contextPath} | 动态获取虚拟目录 |
六.JSTL标签
JavaServer Pages Library JSP标准标签库,由Apache组织提供的开源的免费的JSP标签
用于简化和替换JSP页面上的Java代码
使用步骤
导入JSTL相关Jar包
引入标签库:
taglib指令
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
prefix:前缀,自定义的,一般定义为c
使用标签
常用的JSTL标签
c(前缀名):if 相当于if语句
c
(前缀名):choose 相当于switch语句
c
(前缀名):foreach 相当于for语句
前缀名:if
test属性,属性值为boolean表达式,如果为true则显示if标签体内容,如果为false则不显示标签体的内容
一般情况下,test的属性值结合el表达式一起使用
<c:if test="${not empty list}">
输出
</c:if>
判断list集合是否为空,如不为空则在页面显示标签体内容
c:if标签没有else情况,想要else情况,只能从条件着手,则可以在定义一个c:if标签
前缀名:choose
使用choose标签声明 相当于switch声明
使用when标签做判断 相当于case
使用otherwise标签做其他情况的声明 相当于default
注意
otherwise标签内没有
test标签
<c:choose>
<c:when test ="${number == 1}">星期1</c:when>
<c:when test ="${number == 1}">星期1</c:when>
<c:when test ="${number == 1}">星期1</c:when>
<c:when test ="${number == 1}">星期1</c:when>
<c:otherwise>星期1</c:otherwise>
<c:choose>
前缀名:foreach
完成重复操作
begin 开始值
end 结束值
var 临时变量,代表集合中的每一个元素的对象
step 步长
<c:forEach begin="1" end="10" var="i" step="1">
</c:forEach>
便利容器
items 用EL表达式从域对象取出待遍历的集合
var 临时变量,代表集合中的每一个元素的对象
varStatus 循环状态对象
index 容器中元素的索引,从0开始
count 循环次数,从1开始,和集合的长度是等价的
<c:forEach items="${list}" var="str" varStatus="status">
${status.index}---集合中元素的索引 ${status.count}---循环次数
</c:forEach>
七.三层架构
界面层(表示层)
用户看到的界面,用户可以通过界面上的组件和服务器进行交互
业务逻辑层
处理业务逻辑,一些功能,比如注册,登录.最为重要
数据访问层(DAO)
操纵数据存储文件,比如数据库,xml,properties.