注:jsp内置对象的讲解参考:javaee_api文档。可在网上下载。

 一:jsp的内置对象(在jsp页面中不需要创建,直接使用的对象)共有9个:

 

jsp内置对象

九个对象

真实类型

作用

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乱码详解:

五 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--%>