注:jsp内置对象的讲解参考:javaee_api文档。可在网上下载。
一:jsp的内置对象(在jsp页面中不需要创建,直接使用的对象)共有9个:
九个对象 | 真实类型 | 作用 |
---|---|---|
1 pageContext | PageContext | 当前页面共享数据,还可以获取其他八个内置对象 |
2 request | HttpServletRequest | 一次请求访问的多个资源(转发) |
3 session | HttpSession | 一次会话的多个请求间 |
4 application | ServletContext | 所有用户间共享数据 |
5 response | HttpServletResponse | 响应对象 |
6 page | Object | 当前页面的对象 |
7 out | jspWriter | 输出对象,数据输出到页面上 |
8 config | ServletConfig | servlet的配置对象 |
9 exception | Throwable | 异常对象 |
1 request.getSession()与request.setSession()
request.getSession()可以得到HttpSession类型的对象,通常称之为session对象,session对 象的作用域为一次会话,通常浏览器不关闭,保存的值就不会消失,当然也会出现session超时。服务器里面可以设置session的超时时 间,web.xml中有一个session time out的地方,tomcat默认为30分钟
注意:B/S架构中,客户端与服务器连接,在服务端就会自动创建一个session对象.
2 session.setAttribute("user",username)与session.getAttribute("user");
是将username保存在session中!session的key值为“user”value值就是username真实的值或者引用值. 这样以后可以通过session.getAttribute("user")的方法获得这个对象.
例如:当用户已登录系统后就在session中存储了一个用户信息对象,此后可以随时从session中将这个对象取出来进行一些操作,比如进行身份验证等等.
注意:getAttribute的返回值类型是Object,需要向下转型,转成你的userName类型的,简单说就是存什么,取出来还是什么。
setAttribute和getAttribute就是基于HashMap的put方法和get方法实现的,一般叫键值对或者key-value, 即通过键找到值。
二 html注释:<!-- 注释html片段代码--> jsp注释 <%-- 可以注释所有--%>
三 EL表达式(Ecpression language)替换和简化jsp页面中Java代码的编写
语法:${表达式} 如果想在页面忽略EL表达式,需在页面配置<@page isELIgonored="true"%> 或者 \${表达式}忽略
用法: 1 算数运算符${3+4} 2 比较运算符 ${3>4 && 6<7}
3 获取值
(1)el表达式只能从域对象中获取值
(2)语法
第一种:${域名称.键名}从指定域中获取指定建的值
域名称:
1 pageScope --->pageContext
2 requestScope--->request
3 sessionScope--->session
4 applicationScope--->application(ServletContext)
举例:
<body>
<h1>算数运算!!!</h1>
<%
request.setAttribute("name","张三");
session.setAttribute("age","23");
%>
<h3>从el中获取值</h3>
${requestScope.name}
${sessionScope.age}
${sessionScope.haha}
</body>
4 获取域中存储的 对象/List/Map 值
对象:${域名称.键名.属性名}
List集合:${域名称.键名[索引]}
Map集合:${域名称.键名.key名称} 或者 ${域名称.键名.[key名称]}
<body>
<%
User u = new User();
u.setName("zhangsan");
u.setAge(24);
u.setBirthday(new Date());
request.setAttribute("u", u);
<!--List-->
List list = new ArrayList();
list.add("aaaa");
list.add("sdf");
list.add(u);
request.setAttribute("list", list);
<!--Map-->
Map map = new HashMap();
map.put("sname", "李四");
map.put("age", "24");
map.put("u",u);
request.setAttribute("map", map);
%>
<!--List-->
${list}<br>
${list[0]}<br>
${list[2].name}<br>
<!--Map-->
${map}<br>
${map.sname}<br>
${map.u.name}<br>
<!--另外一种写法-->
${map["sname"]}<br>
<!-- List运行结果
[aaaa, sdf, com.servlet.User@3e8a2cfe]
aaaa
zhangsan
-->
<!-- Map运行结果
{u=com.servlet.User@7d951a05, sname=李四, age=24}
李四
zhangsan
李四
-->
</body>
第二种:${键名}:表示从最小的域中查找是否有该键值对的值,直到找到为止
${name} 顺序pageScope---> requestScope---> sessionScope--->applicationScope
<body>
<h1>算数运算!!!</h1>
<%
request.setAttribute("name","李四");
request.setAttribute("name","张三");
session.setAttribute("age","23");
%>
<h3>从el中获取值</h3>
${requestScope.name}
${sessionScope.age}
${name}
</body>
<!--结果:打印两次张三-->
5 El表达式中空运算符与隐式对象
空运算符:${empty list} 用于判断字符串,集合,数组对象是否为null或者长度是否为0。
${not empty list} 用于判断字符串,集合,数组对象是否不为null或者长度是否为0。
例如:String str=" ";request.setAttribute("str",str); ${empty str} 结果为false
隐式对象:pageContext:获取jsp其他八个内置对象 ${pageContext.*};
例如:${pageContext.request.contextPath} 动态获取request对象的虚拟目录
四 运行jsp乱码详解:https://www.cnblogs.com/laj12347/p/3318998.html
五 jstl标签(JavaServer Page Tag Library)
1作用:用于简化和替换jsp页面上的Java代码
2使用:导jar包,<%@taglib %>引入
3常用标签
(1)if 相当于Java中的if语句(2) choose 相当于Java中的swith语句(3)foreach相当于Java中的for语句
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="utf-8" errorPage="500.jsp" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<% request.setCharacterEncoding("utf-8");%>
<html>
<head>
<title>欢迎您</title>
</head>
<body>
<%
List list = new ArrayList();
list.add("aaa");
list.add("bbb");
list.add("ccc");
request.setAttribute("lists", list);
request.setAttribute("number", 3);
%>
<c:if test="${not empty lists}">
list数组不为空
</c:if>
<c:choose>
<c:when test="${number==1}">星期一</c:when>
<c:when test="${number==2}">星期二</c:when>
<c:when test="${number==3}">星期三</c:when>
<c:when test="${number==4}">星期四</c:when>
<c:when test="${number==5}">星期五</c:when>
<c:when test="${number==6}">星期六</c:when>
<c:when test="${number==7}">星期七</c:when>
</c:choose><br>
<%--
var="i" 临时变量 相当于for(User user:list)中的user
varStatus="s" 循环状态变量
items="list" 从域lists中取出值list request.setAttribute("lists",list);
${s.count} 循环的次数
${s.index} 容器中从0开始的索引
--%>
<c:forEach begin="0" end="11" step="1" var="i" varStatus="s">
${i} ${s.count} ${s.index}<br>
</c:forEach>
<c:forEach items="${lists}" var="str" varStatus="s">
${str} ${s.count} ${s.index}<br>
</c:forEach>
</body>
</html>
<%--打印结果--%>
<%--
list数组不为空 星期三
0 1 0
1 2 1
2 3 2
3 4 3
4 5 4
5 6 5
6 7 6
7 8 7
8 9 8
9 10 9
10 11 10
11 12 11
aaa 1 0
bbb 2 1
ccc 3 2--%>