jsp
什么是jsp:java server Page
从用户角度来说,就是一个网页
从程序员角度来说,是一个java类,因为继承了servlet,所以也可以直接说jsp 就是一个servlet
- 为什么需要jsp?
html 多数情况用来显示静态内容,一成不变的内容。但是有时候我们需要在网页上显示一些动态的数据,比如: 查询所有的学生信息,根据姓名查询某个具体某个学生。这些动作需要查询数据库然后显示在网页上,html不支持java 代码。jsp 里面可以写java 代码
jsp 的指令
指令写法
<%@ 指令名字%>
<%@ page language="java"
pageEncoding="UTF-8"%>
- language 表明jsp 里面可以写java代码
- contentType 说的是这个文件是什么类型,告诉浏览器是什么内容类型,以及使用的编码形式
contentType="text/html; charset=UTF-8"
text/html 表示这个是一个文本,html 网页
pageEncoding jsp的内容编码
extends 用于指定jsp 翻译成java 文件后继承的父类是什么
import 导包
Session 可选的值又true 和false
用于控制在这个jsp 页面里面,能否直接使用session 对象 在<%%>里面
具体的区别,要看java 源码
如果是true,那么在<%%> 里面可以调用session 的方法
- errorpage 指的是错误的页面,值需要给错误的页面路径
- iserrorpage 就是申明某一个页面到底是不是错误的页面
jsp 内置对象
就是我们可以直接在jsp页面中使用这些对象,不用创建
1 pageContext
2 request
3 session
4 application
这四个称之为作用域对象,作用域就是表示这些对象可以存值,他们的取值范围有限定。通过setAttribute 和getAttribute 方法
当jsp iserroepage=“true”时候
<%
里面有九个内置对象选项,否则将没有exception内置对象
%>
使用作用域来存储数据
<br>
<%
pageContext.setAttribute("name", "page");
request.setAttribute("name", "request");
session.setAttribute("name", "session");
application.setAttribute("name", "application");
%>
取值
<br>
<%=pageContext.getAttribute("name")%>
<%=request.getAttribute("name")%>
<%=session.getAttribute("name")%>
<%=application.getAttribute("name")%>
四个作用域的区别:
- pageContext【PageContext】
pageContext的作用于只能作用于当前页面
- request【HttpServletRequest】
作用域仅限于一次请求,只要服务器对该请求做出了相应,这个域中存储的就没有了
- session【HttpSession】
作用于限于一次会话(多次请求和相应)过了就拿不到了
- application【ServletContext】
整个工程都可以访问,服务器关闭后就不能访问了
6 exception【throwable】
7 page【object】就是这个jsp 翻译成java 类的实例对象
8 config【ServletCongif】5 out【HttpServletResponse】
9 response【JspWriter】
这两者的区别
用pageContext 这个对象可以得到其他的八个对象
EL 表达式
出现是为了简化jsp 代码,具体点就是为了简化在jsp 里面的哪些java 代码
- 写法格式
- ${表达式}
如何使用
1 取出4个作用域中存放的值
普通手段取值
<br>
<%=pageContext.getAttribute("name")%>
<%=request.getAttribute("name")%>
<%=session.getAttribute("name")%>
<%=application.getAttribute("name")%>
<br>使用EL表达式去除作用域中的值<br>
${ pageScope.name }
${ requestScope.name}
${ sessionScope.name}
${ applicationScope.name}
2 如果域中存的值是数组
<br>使用EL表达式去除作用域中的值
<br> ${ pageScope.name } ${ requestScope.name} ${ sessionScope.name}
${ applicationScope.name} ----------------------------
<br>
<%
String[] a = { "aa", "bb", "cc", "dd" };
pageContext.setAttribute("array", a);
%>
使用el表达式取出作用域数组的值
<br> ${array[0]},${array[1]},${array[2]},${array[3]},
-------------------
<br>
<%
List list = new ArrayList();
list.add("11");
list.add("22");
list.add("33");
list.add("44");
pageContext.setAttribute("array", list);
%>
EL 取出这个集合里面的值<br>
${array[0]},${array[1]},${array[2]},${array[3]}
------------------<br>
<%
Map map = new HashMap();
map.put("name", "zhangsan");
map.put("age",18);
map.put("address","beijing");
pageContext.setAttribute("map",map);
%>
使用EL 取出Map 里面的值<br>
${map.name }${map.age}${map.address }
JSTL
全称:jsp Standard Tag Library jsp 标准标签库
简化jsp 的代码编写,替换之间的<%%>的写法,一般同EL 表达式配合
怎么使用
1 导入jar 文件到工程的webContent/web-Inf/lib jstl.jar 和standard.jar
2 在jsp 页面上,使用taglib 指令来引入标签库
3 注意: 如果想支持EL 表达式,那么引入的标签库必须选择1.1版本1.0 版本不支持EL 表达式
<%
List list = new ArrayList();
list.add(new User(“zhangsan”,18));
list.add(new User(“lisi”,28));
list.add(new User(“maliu”,38));
list.add(new User(“qiangqi”,48));
pageContext.setAttribute(“list”, list);
%>
items 表示遍历哪一个对象,注意: 这里必须写EL 表达式
value: 遍历出来的每一个元素用user去接收
<c:forEach var=“user” items="${list }">
u
s
e
r
.
n
a
m
e
−
−
−
{user.name}---
user.name−−−{user.age}
</c:forEach>