JSP详细内容(jsp指令 page指令 jstl (EL表达式)

一. JSP指令

1. jsp指令概述

jsp指令的格式: <%@指令名 attr1=" “attr2=” "%>,一般都会把jsp指令放到jsp文件的最上方,但这不是必须的
一个jsp页面,可以有0----N个指令
jsp的三大指令:

page最复杂
include静态包括
taglib导入标签库

最为常用,页最为复杂的就是page指令

2. page指令

page指令是最为常用的指令,也是属性最多的属性
page指令没有必须属性,都是可选属性。例如<%@page %>,没有给出任何属性也是可以的
在jsp页面中,任何指令都可以重复出现
<%@page language=“java”%>
<%@page import=“java.util.*”%>
<%@page pageEcoding=“utf-8”%>

  • page pageEcoding="utf-8:他指定当前jsp页main的编码,只要不说谎就不会出现编码错误,在服务器把jsp编译成.java时需要使用pageEcoding
  • contentType:他表示添加一个响应头:Content-Type,dengtongyu response.setContentType(“text/html;chaeset=utf-8”);
    上面两个属性如果只提供了一个另一个属性就会跟着提供的一样 默认为ISO
  • import:导包!可以出现多次
  • errorPage和isErrorPage
    1. errorPage:当前页面如果抛出异常,那么要转发到那个页面,由errorPage来决定(属于转发)
    2. isErrorPage:当前页面是否为处理异常的页面 这个标识会影响发送来的状态码为500 当此属性为true,这个页面可以使用9大内置对象中的execption
  • autoFlush 和buffer
  1. autoFlush:指定jsp的输出流缓冲区满时,是否自动刷新,默认为true,如果为false,那么在缓冲区满时抛出异常
  2. buffer:指定缓冲区大小,默认为8kb
  • isELIgnored:是否忽略el表达式,默认为false,不忽略,即支持
  • 基本没用:
  1. language:只能是java
  2. info:信息
  3. isThreadSafe:当前的jsp是否支持并发访问
  4. session:当前页面是否支持 session,如果为false,那么当前页面就没有session这个内置对象
  5. extends:让jsp生成servlet去继承属性指定的类

在web.xml中配置处理错误信息界面
在这里插入图片描述

3.include

  • 与requestDispatcher的include()方法的功能相似
    <%@include%> 他是在jsp编译成java文件时完成的,他们共同生成一个java(就是一个servlet)文件,然后再生成class
    requestDispatcher的include() 是一个方法,包含和被包含的是两个servlet 即两个.class他们只是把响应的内容在运行时合并在一起了
  • <%@include file=“xxx.jsp”%>
    这里不能写变量 因为 静态包含是在编译阶段才会合并 但是jsp页面编译的时候 识别不了这个变量是啥
    • 作用: 把页面分解了,使用包含的方式组合在一起这样一个页面中不变的部分,就会形成一个独立的jsp,而我们只需要处理变化的jsp即可

4.taglib

  • 两个属性:
    1. perfix:指定标签库在本页面中的前缀,由我们自己来命名
    2. uri:指定标签库的位置
      <%@taglib perfix=“pre” uri="/struts-tags"%> <pre: text>

5. jsp的九大内置对象

5.1 什么是jsp的九大内置对象

在jsp中无需创建就可以使用的9个独享,他们是:

out(JspWrite):等同于response.getWrite(),用来向客户端发送文本数据
config(ServletConfig)对应真身找那个的ServletConfig
page(当前jsp的真身类型)当前jsp页面的this对象 page=jsp.this
pageContext(PageContext)页面上下文对象,他是最后一个没讲的域对象
exception(Throwable)只有在错误页面中可以使用这个对象
request(HttpServletRequest)即HttpServletRequest类对象
response(HttpServletResponse)即HttpServletResponse类对象
application(ServletContext)即ServletContext类对象
session(HttpSession)即HttpSession类对象,不是每一个jsp页面中都可以使用,某个jsp页面中设置<%@page session=“false”%>,说明这个页面不能使用

5.2 PageContext

  • 一个顶九个
  • Servlet中有三个域,而jsp中有四大域,他就是最后一个域对象
ServletContext:整个应用程序
session:整个会话(一个会话只有一个用户)
request一个请求链
pageContext:一个jsp页面,这个域是在当前jsp页面和当前jsp页面中使用的标签之间的共享数据
  • 域对象
    代理其他域:pageContext.setAttribute(“xxx”,“XXX”,PageContext.SESSION_SCOPE);
    • 获取其他八个对象在这里插入图片描述
  • 全域查找:pageContext.findAttriute(“XXX”);从大到小,依赖查找 优先级:page request session application

二. jsp标签

1. jsp动作标签:

这些jsp的动作标签,与html提供的标签有本质区别

  • 动作标签是由tomcat(服务器)来揭示执行,与java代码一样,都是在服务器端执行
  • html由浏览器来执行
  1. jsp:forward:转发他与requestDispatcher的forward方法是一样的,一个是在Servlet中使用,一个是在jsp中使用
  2. jsp:include:包含,他与requestDispatcher的include()是一样的 (动态包含 有两个java文件)

2. jsp中与javaBean相关的标签

  • jsp:useBean 创建或查询bean
    1 <jsp:useBean id=“user1” class=“com.tjk.cn,User” scope=“session”> 在session域中查找名为user1的bean,如果不存在,就创建
  • jsp:setProperty
    <jsp:setProperty property=“username” name=“user1” value=“admin”> 设置名为user1的这个javaBean的username属性值为admin
  • <jsp:getProperty >
    <jsp:getProperty property=“username” name=“user1”/>获取名为user1的javaBean的名为username属性

3.EL表达式

3.1 含义

  • EL是jsp的内置表达式语言
${xxx}:全局域查找对象
${requestScope.xxx}:request域中查找xxx对象
${sessionScope.xxx}:session域中查找xxx对象
${applicationScope.xxx}:applocation域查找xxx对象
  • EL替代<%=…%>也就是说EL只能做输出
  • JavaBean导航:
    -在这里插入图片描述
  • EL可以输出的东西都在11个内置对象中!
    上面四个
  1. 在11个内置对象中其中10个是Map!pageContext不是map,它就是PageContext类型,1项顶九项
  • 参数相关内置对象
param对应参数,他是一个Map,其中key参数名,value是参数值,适用于单值得参数
–paramValues对应参数,他是一个Map,其中key表示头闽南古城,value是多个参数值,适用于多值的参数
  • 请求头内置对象
header对应请求头,他是一个Map,其中key表示透明橙,value是单个头值,适用于单值请求头
headerValue对应请求头,他是一个Map,其中ksy表示头名称,value是单个头值,适用于单值请求头
  • 获取context-param内的参数
    initParam:获取context-param内的参数 (web.xml中的初始化参数)
  • cookie:Map<String,Cookie>类型,其中key是cookie的name,value是cookie对象
    eg: ${cookie.JSESSIONID.value}
  • pageContext:他是pageContext类型
    ${pageContext.request.contextPath}

3.2 EL函数库

  • 首先需要导入jstl的jar包 1.2就可以
  • 其次在jsp页面上添加url
    <%@taglib prefix=“fn” uri=“http://java.sun.com/jsp/jstl/functions” %>
    这样就可以使用了
  • EL函数库:

在这里插入图片描述
在这里插入图片描述

3.3 自定义EL函数

class方法:

public class MyFunction {

	   //用于EL的自定义函数库
	public static String tjk() {
		
		return ("说");
	}
	
}

jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="a" uri="/WEB-INF/tld/Myfunction.tld"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
${a:tjk() }
</body>
</html>

需要新建一个tld文件
注意:
name的名字和jsp调用的名字必须一致 必须一致

<?xml version="1.0" encoding="UTF-8"?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
    version="2.0">
    <tlib-version>1.0</tlib-version>
    <short-name>MF</short-name>
    <uri>http:www.itcast.cn</uri>
    
    <function><!-- 定义函数 -->
        <name>tjk</name> <!-- 调用名称 -->
        <function-class>com.tjk.function.fn.MyFunction</function-class> <!-- 类全名 -->
        <function-signature>java.lang.String tjk()</function-signature>
    </function>
    
</taglib>

运行结果:

三. jstl标签库

1.jstl标签库基础

jstl是apache对EL表达式的扩展(也就是说jstl依赖EL),jstl是标签语言

1.1 JSTL标签库

jstl一共包含四大标签库

  • core:核心标签库
  • fmt:格式化标签库
  • sql:数据库标签库(过时)
  • xml:xml标签库(过时)

1.2 使用taglib指令导入标签库

除了jsp动作标签外,使用其他第三方的标签库都需要

  • 导包
  • 在使用标签的jsp页面中使用taglib指令导入标签库
    下面是jstl的core标签库
    <%@taglib prefix=“C” uri=“http://java.sun.com/jstl/core” %>
    • prefix=“c”:指定标签库的前缀,这个前缀可以随便给值,但大家都会在使用core标签库指定为C
    • url=“http://java.sun,com/jstl/core”:指定标签库的url

1.3 core标签库常用标签

1.3.1 out和set
  • out
    value:可以是字符串常量,也可以是EL表达式
    default:当要出书的内容为null时,会输出default指定的值
    escapeXml:默认值为true 表示转义
<c:out value=“tjk” ></c:out>输出字符串常量
<c:out value="$(xxx)" ></c:out>与$(xxx)相同
<c:out value="$(xxx)" default=“XXX”></c:out>当$(xxx)不存在时,输出XXX字符串
<c:out value=“tjk” default=“111” escapeXml=“true”></c:out>escapeXml默认值为true 表示不会转义
  • set:
    var:变量名
    value:变量值
    scope:域,默认为page,可选值 page,request session application
<c:set var=“aaa” value=“tjk” ></c:set>在pageContext中添加name为aaa value为tjk的数据
<c:set value=“tjk” var=“aaa” scope=“session”></c:set>scope是规定范围的
1.3.2 remove

remove:删除域变量
var:变量名
scope:如果不给出scope,表示删除所有域中的该名称的变量,如果指定了域,那么久删除该域中的变量

1.3.4 url

value: 指定一个路径,他会在路径前面自动添加项目名
url 标签中间可以添加参数如下:

<c:url value="http://www.baidu.com" >
  <c:param name="username" value="tjk"></c:param>
</c:url>
1.3.5 if标签

对应java中的if语句

<c:set var="a" value="tjk"></c:set>
<c:if test="${not empty a}">
<c:out value=xixi"></c:out>
</c:if>
1.3.6 chose:

它对应的java中的if /else if/else

等于的时候必须是等等

<c:set var="num" value="1000"></c:set>
<c:choose>
<c:when test="${num>1000}">大于呢</c:when>
<c:when test="${num==1000}">等于呢</c:when>
<c:when test="${num<1000}">小于呢</c:when>
<c:otherwise>去你的吧</c:otherwise>
</c:choose>
1.3.7 forEach遍历

属性:

  • var 循环变量
  • begin:设置循环变量从几开始
  • end:循环变量到几结束
  • step:设置步长 等同于java中的i++ i+2 step默认为1
  • items:指定要循环谁,可以是一个数组或一个集合
<c:forEach var="i" begin="1" end="20" step="2">
${i }<br/>
</c:forEach>

循环状态变量:
varStatus
count:循环元素的个数
index:循环元素的下标
first:是否为第一个元素
last:是否为最后一个元素
current:当前元素

<c:forEach var="i" begin="1" end="20" step="2" varStatus="varrr">
${varrr.count }
${i }<br/>
</c:forEach>
1.3.8 fmt库

fmt库是格式化库

<fmt:formatDate value="" pattern="">

value:指定一个Date类型的变量
pattern:用来指定输出的模板!例如:yyyy-MM-dd HH:mm:ss

<fmt:formatNumber value=""  pattern="0.00"/>
保留小数点后2位,他是四舍五入的

<f:formatNumber value=""  pattern="#.##"/>
保留小数点后两位,也是四舍五入  但是不会进行补位
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值