Web02 JSP

Web02 JSP

1.概念

何为 JSP

  • java server pages Java 的服务器页面

  • 主要作用是代替 Servlet 程序回传 html 页面的数据

  • jsp 页面和 html 页面一样,都是存放在 web 目录下。访问也跟访问 html 页面一样

  • http://ip:port/工程路径/b.jsp

JSP本质

  • jsp 页面本质上是一个 Servlet 程序(HttpJspBase 类直接地继承 HttpServlet 类)

  • 底层通过输出流把 html 页面数据回传给客户端

2.JSP 语法

2.1 page指令

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

属性

  • language: 表示 jsp 翻译后是什么语言文件。暂时只支持 java。

  • contentType: 表示 jsp 返回的数据类型,是源码中 response.setContentType()参数值

  • pageEncoding: 表示当前 jsp 页面文件本身的字符集。

  • import: 用于导包,导类

  • errorPage:设置当 jsp 页面运行时出错,自动跳转去的错误页面路径 /

  • isErrorPage:设置当前 jsp 页面是否是错误信息页面,默认false。true可以获取异常信息

  • session:设置访问当前 jsp 页面是否创建 HttpSession 对象。默认是 true。

  • extends:设置 jsp 翻译出来的 java 类的默认继承

  • out 输出流属性

    • autoFlush:设置out 输出流缓冲区满后,是否自动刷新,默认值true

    • buffer:设置 out 缓冲区大小,默认8kb

2.2 脚本

1.声明脚本:不常用

<%! 声明java代码 %>

给 jsp 翻译出来的 java 类定义属性和方法甚至是静态代码块、内部类等

直接在中间写类属性

2.表达式脚本

<%=表达式%>

jsp 页面上输出数据

特点:

  • 所有的表达式脚本都会被翻译到_jspService()方法中

  • 表达式脚本都会被翻译成 out.print()输出到页面上

  • 表达式脚本翻译的_jspService()方法中的对象都可以直接使用

  • 表达式不能以分号结束

3.代码脚本

<% java语句 %>

在 jsp 页面中编写功能(java 语句)

特点:

  • 代码脚本翻译后在_jspService 方法

  • 代码脚本_jspService()方法中的现有对象可以直接使用

  • 多个代码脚本块组合完成一个完整的 java 语句

  • 代码脚本可以和表达式脚本组合使用,在 jsp 页面上输出数据

4.注释

html 注释 <!-- 这是 html 注释 -->

html 注释会被翻译到 java 源代码中。在_jspService 方法里,以 out.writer 输出到客户端

java 注释

jsp 注释 <%-- 这是 jsp 注释 --%>

3.JSP 对象

3.1 内置对象

jsp 中的内置对象,是指 Tomcat 在翻译 jsp 页面成为 Servlet 源代码后,内部提供的九大对象

  • request 请求对象

  • response 响应对象

  • pageContext jsp的上下文对象

  • session 会话对象

  • application ServletContext对象

  • config ServletConfig对象

  • out jsp输出流对象

  • page 指向当前jsp对象

  • exception 异常对象

3.2 域对象

  • pageContext(PageContextImpl 类) 当前 jsp 页面范围内有效

  • request (HttpServletRequest 类) 一次请求内有效

  • session (HttpSession 类) 一个会话范围内有效

    (打开浏览器访问服务器,直到关闭浏览器)

  • application (ServletContext 类) 整个 web 工程范围内都有效

    (只要 web 工程不停止,数据都在)

域对象是可以像 Map 一样存取数据的对象

四个域对象功能一样,不同的是数据的存取范围

使用的优先顺序从小到大:

pageContext < request < session < application

 

3.3 out输出和response.getWriter

一般情况在 jsp 页面中统一使用 out 来进行输出

避免打乱页面输出内容的顺序

out.write() 输出字符串

out.print() 输出任意数据

统一使用 out.print()来进行输出

 

4.JSP标签

4.1 静态包含

<%@ include file=""%>

file 属性指定包含的 jsp 页面的路径

地址中第一个斜杠 / 表示为 http://ip:port/工程路径/ ,映射到代码的 web 目录

特点:

  • 静态包含不会翻译包含的 jsp 页面

  • 静态包含是把包含的 jsp 页面代码拷贝到包含的位置执行输出(通用的固定内容)

 

4.2 动态包含

<jsp:include page="/include/footer.jsp">

<jsp:param name="username" value="bbj"/>

</jsp:include >

page 属性是指定你要包含的 jsp 页面的路径

包含的内容执行输出到包含位置

特点:

  • 动态包含会把包含的 jsp 页面也翻译成为 java 代码

  • 动态包含底层调用被包含的 jsp 页面执行输出:

    JspRuntimeLibrary.include(request, response, "/include/footer.jsp", out, false);

  • 动态包含可以传递参数

4.3 转发

<jsp:forward page="/scope2.jsp"></jsp:forward >

请求转发标签,它的功能就是请求转发

page 属性设置请求转发的路径

 

5.EL表达式

Expression Language 表达式语言

代替 jsp 页面中的表达式脚本在 jsp 页面中进行数据的输出

EL 表达式的格式是:${表达式}

  • 输出 null 值的时候,输出的是空串

  • 主要是输出域对象中的数据:相同的 key,按照四个域的从小到大的顺序去进行搜索

  • 输出 Bean 属性:

运算 ${ 运算表达式 }

  • 关系、逻辑、算术

  • empty运算:判断一个数据是否为空,输出 true

    • 值为 null 值的时候,为空

    • 值为空串的时候,为空

    • 值是 Object 类型数组,长度为零的时候

    • list 集合,元素个数为零

    • map 集合,元素个数为零

  • 三元运算:表达式 1?表达式 2:表达式 3

    如果表达式 1 的值为真,返回表达式 2 的值,如果表达式 1 的值为假,返回表达式 3 的值

  • . 点运算:输出 Bean 对象中某个属性

  • []中括号运算:输出有序集合中某个元素的值;还可以输出 map 集合中 key 里含有特殊字符的 key 的值

隐含对象

可以直接使用

变量 类型 作用

pageContext PageContextImpl 获取 jsp 中的九大内置对象

pageScope Map<String,Object> 获取 pageContext 域中的数据

requestScope Map<String,Object> 获取 Request 域中的数据

sessionScope Map<String,Object> 获取 Session 域中的数据

applicationScope Map<String,Object> 获取 ServletContext 域中的数据

param Map<String,String> 获取请求参数的值

paramValues Map<String,String[]> 获取请求参数的值,获取多个值的时候使用。

header Map<String,String> 获取请求头的信息

headerValues Map<String,String[]> 获取请求头的信息,它可以获取多个值的情况

cookie Map<String,Cookie> 获取当前请求的 Cookie 信息

initParam Map<String,String> 获取web.xml<context-param>上下文参数

 

获取四个特定域中的属性

pageScope pageContext 域

requestScope Request 域

sessionScope Session 域

applicationScope ServletContext 域

pageContext 对象

1.协议: ${ pageContext.request.scheme }

2.服务器 ip:${ pageContext.request.serverName }

3.服务器端口:${ pageContext.request.serverPort }

4.获取工程路径:${ pageContext.request.contextPath }

5.获取请求方法:${ pageContext.request.method }

6.获取客户端 ip 地址:${ pageContext.request.remoteHost }

7.获取会话的 id 编号:${ pageContext.session.id }

 

6.JSTL标签库

JSP 标准标签库

功能范围 URI 前缀

核心标签库--重点 http://java.sun.com/jsp/jstl/core c

格式化 http://java.sun.com/jsp/jstl/fmt fmt

函数 http://java.sun.com/jsp/jstl/functions fn

数据库(不使用) http://java.sun.com/jsp/jstl/sql sql

XML(不使用) http://java.sun.com/jsp/jstl/xml x

使用:

先导入 jstl 标签库的 jar 包

  • taglibs-standard-impl-1.2.1.jar

  • taglibs-standard-spec-1.2.1.jar

taglib 指令引入标签库

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

core 核心库

1.<c:set />往域中保存数据

<c:set scope="session" var="abc" value="abcValue"/>

  • scope 属性设置保存域

    • page : PageContext 域(默认值)

    • request : Request 域

    • session : Session 域

    • application : ServletContext 域

  • var 属性设置 key

  • value 属性设置值

2.<c:if />

<c:if test=EL 表达式> 内容 < /c:if>

test 属性表示判断的条件(使用 EL 表达式输出)

3.< c:choose> 多路判断

< c:when>每一种判断情况</c:when >

< c:otherwise>剩下的情况</c:otherwise >

</c:choose >

要使用 jsp 注释

4.<c:forEach />遍历输出

<c:forEach begin="1" end="10" var="i"> 内容 < /c:forEach>

  • begin 开始的索引

  • end 结束的索引

  • var 循环变量(当前正在遍历的数据)

  • items 遍历的数据源(集合)

  • step 遍历的步长

  • varStatus 当前遍历到的数据的状态

Web02 JSP

上一篇:利用 http协议代替ftp协议进行数据传输


下一篇:ajax基础