指令
用于配置JSP页面,导入资源文件
格式
<%@ 指令名称 属性名1=属性值1 属性名2=属性值2 … %>
分类
1.page 配置JSP页面
contentType:等同于response.setContentType();
1.设置响应体的mime类型以及字符集
2.设置当前jsp页面的编码,或用pageEncoding设置
<%@ page contentType="text/html;charset=gbk" language="java" buffer="8kb" %>//那么页面编码自动变为gbk
//buffer为缓冲区设置大小,默认是8kb
//import为导包
//errorPage当前页面发生异常后,会自动跳转到指定的错误页面
//isErrorPage表示当前页面是否是错误页面,默认值为false,当值为true时,可用内置对象exception.getMessage()获取异常信息
2.include 页面包含的。导入页面的资源文件
<%@ include file="hello.jsp"%>
3.taglib 导入资源
<%@ taglib prefix="c" uri="http://baidu.com" %>
//prefix:前缀,自定义的
注释
1.html注释
2.jsp注释:推荐使用,不会被response对象接收
<%-- --%>
内置对象
MVC——使得程序的设计更加合理
-------Jsp的本质是Servlet类也就是Jsp被Jsp引擎编译之后会生成一个标准的Servlet类,Jsp是Html标签和Java代码组合而成的一个.jsp文件,jsp编译后生成的Servlet类里面Servlet通过输出流把html标签输出到浏览器显示生成动态的网页。
EL表达式——替换和简化jsp页面中java代码的编写,将其书写到页面上
语法
${表达式}
注意
若想不解析el表达式,可以用指令isELIgnored=“true”,或\ ${表达式}
运算
1.算术运算符:+ - * /(div) %(mod)
2.比较运算符:> < >= <= == !=
3.逻辑运算符:&&(and) ||(or) !(not)
4.空运算符:empty
用于判断字符串、集合、数组对象是否为null并且长度是否为0
${empty list}
获取值
域名称 | 域从小到大 |
---|---|
pageScope | pageContext |
requestScope | request |
sessionScope | session |
applicationScope | application(ServletContext) |
<% request.setAttribute("name","李四"); %>
${requestScope.name}<%-- 获得‘李四’字符串--%>
${name}<%--省略 requestScope则从最小域中查找对应值,知道找到位置--%>
如果没有找到则表达式为null
${requestScope.error}可替换
<%=request.getAttribute("error") == null ? " " :request.getAttribute("error") %>
对象
如果获取键值是一个对象,则需要通过对象的属性来获取,本质上调用getter方法。
${域名.键名.属性}
规则
setter或getter方法来获取,去掉set或get,再将剩余部分,首字母变小写。
例如haha变量,则可以写成getHaha(),获取则h.haha
List集合
${域名.键名[索引]}
<%
response.getWriter().write("============");//总是会优先输出
user u=new user();//创建user类的对象u,user类不再展示
u.setName("张三");
List list=new ArrayList();//穿件LIst集合
list.add("list!");
list.add(u);//添加一个字符串和一个对象
request.setAttribute("list",list);
%>
${requestScope.list[0]}//list!//这两处都可以省去requestScope
${requestScope.list[1].name}//张三
Map集合
$ {域名.键名.key名} 或$ {域名.键名[“key名”]}
<%
user u=new user();
u.setName("张三");
Map map=new HashMap();
map.put("name","张三");
map.put("user",u);
request.setAttribute("map",map);%>
${map.name}//张三
${map["name"]}//张三
${map.user.name}//张三
隐式对象
EL表达式中有11个隐式对象
pageContext——>获取其他八个内置对象
${pageContext.request.contextPath}//动态获取虚拟目录
JSTL——JSP标准标签库
用于简化和替换jsp页面上的代码,更好与前端交流
1.导入jstl相关的jar包
2.引入标签库:taglib指令 <%@ taglib %>
3.使用标签
if标签——相当于java代码的if
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>jstl</title>
</head>
<body>
<%
List list=new ArrayList();
list.add("张三");
request.setAttribute("list",list);
%>
<c:if test="${not empty list}">//一般情况下会结合el表达式使用
<h3>list集合不为空</h3>
</c:if>
</body>
</html>
关于test必须属性
接受boolean表达式,表达式为true显示标签体内容。为false则不显示
choose标签——相当于java代码的switch
<c:choose></c:choose>——>相当于switch声明
<c:when></c:when>——>相当于case
<c:otherwise></c:otherwise>——>相当于default
foreach标签——相当于java代码的for循环
1.普通for循环
for(int i=0;i<10;i++){
}
属性:
begin:开始值,相当于i=0
end:结束值,相当于<10
var:临时变量,相当于i
step:步长,相当于i++
varStatus:循环状态对象
index:容器中元素的索引,从0开始
count:循环次数,从1开始
2.增强for循环
for(User user:list){
}
属性:
items:容器对象,相当于list
var:临时变量,相当于user
varStatus:循环状态变量
index:容器中元素的索引,从0开始
count:循环次数,从1开始