1.JSP概述
JSP 全称是 Java Server Pages,它和Servlet技术一样 都是Sun公司推出的用于开发动态web项目的技术.Jsp 适合编写输出动态内容 但不适合编写java逻辑
2.JSP原理
当浏览器访问一个web服务器上的jsp页面时 在服务器端 会将jsp页面进行翻译 –>.java文件 编译成 —>.class文件 执行 以jsp作为代码的显示模板 重点在于显示数据以Servlet作为控制器 重点在于编写java逻辑代码
3.JSP基本语法
1.模板元素
网页静态内容 如html标签 /文本 css js
2.jsp的脚本
小脚本 <% java 代码 %>
表达式<%=表达式 %> 等价于 int i=10; out.print(i);
声明<%! %>
表示在类中定义全局成员 和 静态块
3.jsp的注释
jsp注释
<%-- 被注释的内容(jsp注释 查看页面源代码 看不到 安全) --%>
网页注释<!-- 被注释的内容(网页注释 查看页面源代码 能看到 不安全) -->
4.JSP三个指令
语法:
<%@ 指令名称 属性1=”属性值1” 属性2=”属性值2”….%>
<%@ 指令名称 属性1=”属性值1” %>
<%@ 指令名称 属性2=”属性值2” %>
page :定义jsp页面的各种属性
属性 | 解释 |
import | 和java代码中的import是一样的 都是导包用的 可以将多个包写在一起 中间用逗号分隔也可以一个一个导入 单独编写 |
language | 语言 |
contentType | 设置响应的编码集 |
pageEncoding | jsp页面编码集 |
errorPage | 如果页面中出现错误 则跳转到指定的资源 |
isELIgnored | 是否支持EL表达式 默认是false jsp中默认是支持EL表达式 平时不用设置isELIgonored=”false” |
include:把其他资源包含到当前页面中
静态包含:<%@ include file="要包含的资源"%>
动态包含:<jsp:include page="要包含的资源"></jsp:include>
taglib:在jsp页面中调入JSTL标签库 替换jsp中的java代码片 <%@ taglib uri="" prefix="" %>
uri 导入的包 prefix 标签的前缀
静态包含和动态包含的区别:
1.执行时间不同 前者在翻译阶段,后者在请求处理阶段
2.引入时间不同 前者在翻译时把两个文件合并,后者不合并文件,当代码执行到包含是引入
3.参数不同 后者可以嵌入<jsp:param>
传递参数
5.JSP六个动作(使用标签的形式来表示一段java代码)
1.
<jsp:include></jsp:include>
动态包含
2.<jsp:param>
设置请求参数
3.<jsp:useBean>
创建一个对象
4.<jsp:setProperty>
给指定的对象属性赋值
5.<jsp:getProperty>
取出指定对象的属性值
6.<jsp:forward>
请求转发
6.JSP的9个内置对象(<%%> 和 <%= %> 中能够直接使用的对象)
对象名 | 类型 |
request | javax.servlet.http.HttpServletRequest |
response | javax.servlet.http.HttpServletResponse |
session | javax.servlet.http.HttpSession |
application | javax.servlet.ServletContext |
exception | java.lang.Throwable |
page | java.lang.Object 当前对象this 当前servlet实例 |
config | javax.servlet.ServletConfig 读取配置文件 |
out | javax.servlet.jsp.jspWriter 字符输出流 |
pageContext | javax.servlet.jsp.PageContext 域对象 作用范围当前页面 |
pageContext(重要)*
pageContext 只在当前页面使用 所以跨页面获取不到值 本身就是一个域对象 它可以操作其他三个域对象
常用方法:
setAttribute(String name,Object value)
getAttribute(String name)
removeAttribute(String name)
操作其他域对象的方法 指定某一个要操作的域对象
setAttribute(String name,Object value,int Scope)
getAttribute(String name,int Scope)
removeAttribute(String name,int Scope)
Scope:可以实现pageContext域取操作其他指定的域对象PageContext.PAGE_SCOPE
PageContext.REQUEST_SCOPE
PageContext.SESSION_SCOPE
PageContext.APPLICATION_SCOPE
findAttribute(String name) 自动从pageContext request session application中依次查找 找到了 就结束
web开发四大域对象
域对象 | 解析 |
PageContext | 存放的数据在当前页面有效 开发中的用的很少 |
ServletRequest | 存放的数据在一次请求(转发)内有效 使用的频率较高 |
HttpSession | 存放的数据在一次会话中有效 使用的频率很高 |
ServletContext | 存放的数据在整个应用范围内有效 因为范围较大 所以用的也很少 主要用来存储全局配置信息 |
7.el表达式( expression Language 表达式语言)
作用
简化 jsp中java代码开发量 它不是一种开发语言 是jsp 中获取数据的一种规范
语法结构:
${expression}
主要作用:
1.获取数据
从各种类型的web 域中 检索java 对象 获取数据 (javaBean的属性/list集合/map集合/数组)
注意:需要保证 改数据必须是存储在四大域对象之中的
1.1 点(.)与 []运算符
EL提供 . 和 [] 两种方法来取数据
<!-- el 表达式写法 -->
${pageScope.u}<!-- 原理 pageContext.findAttribute("u") -->
<br>
${u.username}<!-- 等同于 user.getUsername() -->
注意:
EL表达式 会根据username 去User类中 找这个username 的get方法
此时 会自动把username 的首字母 大写 并且 拼接上 get前缀
一旦找到与之匹配的get方法 EL表达式会认为这就是我想要的属性 并返回属性值 所以 要通过EL表达式获取对象的属性 那么这个属性 就必须有与之相对应的get方法 如果不写get 那么EL表达式就拿不到值 报错
属性匹配规则:
1.保持与get方法名 get三个字母 后面的内容大小写一致 然后首字母小写
2.当get方法三个字母后 出现连续两个大写字母 那么EL表达式属性名必须一模一样
[]运算符 点能做的 它也能做 它能做的 点不一定能做
1.2 变量
EL存取变量数据的方法很简单
属性 | EL中名称 |
pageContext | pageScope |
request | requestScope |
session | sessionScope |
application | applicationScope |
2.执行运算
利用EL表达式 可以在jsp页面中执行一些基本的运算
名称 | 符号 |
算数运算符 | +-*/ |
关系运算符 | eq 相等 neq / ne 不相等 gt 大于 lt 小于 gte / ge 大于等于 lte / le 小于等于 |
逻辑运算符 | && 或者 and |
三元运算符 | 表达式1?表达式2:表达式3 |
特殊运算符 | empty 判断 null / 空字符串 /没有元素的集合 返回值是布尔 |
3.获取web开发常用对象
EL表达式语言中定义了11个隐式对象
利用隐式对象 可以获取其他常用对象 并获取数据
与范围有关的隐式对象 四个
对象名 | 解释 |
pageScope | 当前页面范围 |
requestScope | 请求范围 |
sessionScope | 会话返回 |
applicationScope | 应用范围 |
与输入有关的隐式对象 两个
对象名 | 解释 |
param | 表示返回请求参数中的单个字符串 |
paramValues | 表示返回请求参数的一组值 |
servlet中使用
getParameter(String name)
getParameterValues(String name)
在EL表达式中 可以使用:
param.name
p
a
r
a
m
.
n
a
m
e
{paramValues.name}
其他隐式对象 五个
对象名 | 解释 |
cookie | cookie对象的name值 |
header | 一个请求消息头信息 |
headerValues | 重名的请求消息头 |
initParam | 获取web.xml中的全局变量 |
pageContext | 获取当前页面的详细信息 |
4.调用java方法
EL表达式允许用户开发自定义EL函数
可以在jsp页面中 通过EL表达式 调用java类的方法
注意:
如果页面EL表达式不起作用 <%@ page isELIgonored="false" %>
表示是否禁用EL表达式
默认是false
8.JSTL标签
JavaServerPage Standard Tag Library JSP标准标签库 由Apache实现
JSTL标签 和 EL表达式关系?
JSTL在赋值时 会大量使用到EL表达式 可以简单理解成 EL是JSTL的一部分
作用:
使用JSTL标签 实现jsp页面中逻辑处理 如判断 循环等
使用JSTL步骤:
1.导入jar包
2.在jsp页面中添加 taglib指令<%@ taglib uri="" prefix="" %>
3.使用JSTL标签
JSTL常用标签:
1.表达式控制标签
set out remove catch
2.流程控制标签if choose when otherwise
3.循环标签forEach forTokens
4.URL操作标签import url redirect param