当浏览器访问一个web服务器上的jsp页面时
在服务器端 会将jsp页面进行翻译 -->.java文件 编译成 --->.class文件 执行
以jsp作为代码的显示模板 重点在于显示数据
以Servlet作为控制器 重点在于编写java逻辑代码
jsp的基本语法
1.模板元素
网页静态内容 如html标签 /文本 css js
2.jsp的脚本
2.1 小脚本 <% java 代码 %>
2.2 表达式 <%=表达式 %> --> int i=10; out.print(i);
2.3 声明 <%! %> 表示在类中定义全局成员 和 静态块
3.jsp的注释
jsp注释 <%-- 被注释的内容(jsp注释 查看页面源代码 看不到 安全) --%>
网页注释 <!-- 被注释的内容(网页注释 查看页面源代码 能看到 不安全) -->
JSP指令语法:
<%@ 指令名称 属性1="属性值1" 属性2="属性值2"....%> 或者
<%@ 指令名称 属性1="属性值1" %>
<%@ 指令名称 属性2="属性值2" %>
page指令:定义jsp页面的各种属性
1.1 import 和java代码中的import是一样的 都是导包用的
可以将多个包写在一起 中间用逗号分隔
也可以一个一个导入 单独编写
1.2 language 语言
1.3 contentType 设置响应的编码集
1.4 pageEncoding jsp页面编码集
1.5 errorPage 如果页面中出现错误 则跳转到指定的资源
1.6 isELIgnored 是否支持EL表达式 默认是false,支持EL表达式 平时不用设置
isELIgonored="false"
taglib指令:在jsp页面中调入JSTL标签库 替换jsp中的java代码片
<%@ taglib uri="" prefix="" %>
uri 导入的包
prefix 标签的前缀
include指令:把其他资源包含到当前页面中
静态包含:<%@ include file="要包含的资源"%>
动态包含:<jsp:include page="要包含的资源"></jsp:include>
include指令 与 <jsp:include>动作区别:
1.执行时间不同
include指令 是在翻译阶段执行
<jsp:include>动作 在请求处理阶段执行
2.引入内容不同
include指令 在翻译时就把两个文件合并成一个
<jsp:include>指令 不会合并文件 当代码执行到<jsp:include>
才会引入被包含文件的内容
3.参数不同
<jsp:include>可以嵌入<jsp:param> 传递参数
原则:能用静的 就不用动的
JSP的6个动作(很少用)
使用标签的形式来表示一段java代码
1.<jsp:include></jsp:include> 动态包含
2.<jsp:param> 设置请求参数
3.<jsp:useBean> 创建一个对象
4.<jsp:setProperty> 给指定的对象属性赋值
5.<jsp:getProperty> 取出指定对象的属性值
6.<jsp:forward> 请求转发
JSP的9个内置对象
在jsp中 <%%> 和 <%= %> 中能够直接使用的对象
对象名 类型
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 只在当前页面使用,所以跨页面获取不到值,它可以操作其他三个域对象request session application。
常用方法:
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 --> 存放的数据在整个应用范围内有效 因为范围较大 所以用的也很少 主要用来存储全局配置信息
EL表达式:简化 jsp中java代码开发量,语法结构:${expression}。
主要作用:
1.获取数据
从各种类型的web 域中 检索java 对象 获取数据
(javaBean的属性/list集合/map集合/数组)
注意:需要保证,改数据必须是存储在四大域对象之中的
1.1 点(.)与 [ ] 运算符
EL提供 . 和 [] 两种方法来取数据
${pageScope.u} 原理 pageContext.findAttribute("u")
${u.username} 等同于 user.getUsername()
匹配规则:
1.保持与get方法名 get三个字母 后面的内容大小写一致 然后首字母小写
2.当get方法三个字母后出现连续两个大写字母 那么EL表达式属性名必须一模一样
1.2 变量
pageContext --> pageScope
request --> requestScope
session --> sessionScope
application --> applicationScope
2.执行运算
2.1 算数运算符 +-*/
2.2 关系运算符
eq 相等
neq / ne 不相等
gt 大于
lt 小于
gte / ge 大于等于
lte / le 小于等于
2.3 逻辑运算符
&& 或者 and
|| 或者 or
! 或者 not
2.4 三元运算符
表达式1?表达式2:表达式3
2.5 特殊运算符
empty 判断 null / 空字符串 /没有元素的集合
返回值 是 true 或者 false
3.获取web开发常用对象
EL表达式语言中定义了11个隐式对象
利用隐式对象 可以获取其他常用对象 并获取数据
3.1)与范围有关的隐式对象 四个
pageScope 当前页面范围
requestScope 请求范围
sessionScope 会话返回
applicationScope 应用范围
3.2)与输入有关的隐式对象 两个
param 表示返回请求参数中的单个字符串
paramValues 表示返回请求参数的一组值
servlet中使用
getParameter(String name)
getParameterValues(String name)
在EL表达式中 可以使用:
${param.name}
${paramValues.name}
3.3)其他隐式对象 五个
cookie cookie对象的name值
header 一个请求消息头信息
headerValues 重名的请求消息头
initParam 获取web.xml中的全局变量
pageContext 获取当前页面的详细信息
4.调用java方法
EL表达式允许用户开发自定义EL函数
可以在jsp页面中 通过EL表达式 调用java类的方法
JSTL标签:JSP标准标签库
作用:使用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