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