1.jsp标签: sun原生的,直接jsp使用
<jsp:include> -- 实现页面包含,动态包含 <jsp:include page="/index.jsp"/> <jsp:forward> -- 请求转发 <jsp:param> -- 配合上面上面的两个标签使用, <jsp:forward page=""> <jsp:param value="xxx" name="xxx"/> </jsp:forward>
2.EL表达式:
Expresion language 出现的目的,取代jsp中的jsp脚本表达式 <%= java表达式>,发展后不限于此 ${el表达式}获取数据 ,不能遍历数据
注意:1 使用[]的地方都可以用点号替代,除了中括号是数字和特殊字符不能替代 ${a[1]} != ${a.1} ${a["1.1"]} != ${a.1.1} ${a["name"]} == ${a.name} 2 在中括号中不用""引起来的变量,是执行“获取域中的变量的流程”
获取常量
字符串/数字/布尔变量, 直接写在el表达式中 ${"获取常量"} ${199} ${true}获取域中的变量
如果el中写的是一个变量的名,el会调用pageContext的findAttribute方法,在四大作用域中以对应 的名字找对应的属性值。 如果找不到,则不输出 <% String name= "xxx"; pageContext.setAttribute("name", name); %> ${name}
获取数组的数据
<% String[] names = {"1","2","3","4"}; pageContext.setAttribute("names", names); %> ${names[0]}获取集合中的数据 <% List<String> list = new ArrayList<String>(); list.add("1"); list.add("2"); pageContext.setAttribute("list",list); %> ${list[2]}
获取Map的数据 <% Map<String,String> map= new HashMap(); map.put("name", "xx"); map.put("age", "xxx"); pageContext.setAttribute("map",map); %> ${map["name"]} ${map.name}
获取java bean的属性 public class Person{ private int age; public void set(int age); public int get(); } <% Person p = new Person(); p.set(10); pageContext.setAttribute("p",p); %> ${p.age} 获取属性 == p.get(); <img src=${pageContext.request.contextPath}/1.jpg/>
执行运算
算数运算,如果有非数字 字符“1” 参与运算,将非数字转换为数字参与运算,“a”不能参与运算,会报错 +、-、*、/ ${1+1} ${3-1}逻辑运算 && || !
&& and , || or, ! not ${3>2 and 1<2} 显示false比较运算 >,<,==,<=,>=,!=
> gt < lt >= ge <= le != ne == eq ${1==1} ${1 eq 1} 显示true ${1>3} 显示false三元运算
3>2?10:100 ${3>2?"yes":"no"}empty运算
判断一个对象是否为null,字符串是否空字符串,集合为空?,域中没有属性?<%
String str = ""; PageContext.setAttribute("str",str); List list = new ArrayList(); PageContext.setAttribute("list ",list ); %> ${empty str} 显示true ${empty list} 显示true 集合没有任何东西 add后为false ${empty pageScope} false 获取常用开发对象 el 中内置了11个对象,可以直接使用 pageContext:可以获取jsp页面中的9大隐式对象 pageScope: page域中属性组成的map requestScope:request域中属性组成的map sessionScope:session域中属性组成的map applicationScope:application域中属性组成的mapparam:所有请求参数组成的Map<String,String>
paramValues:所有请求参数组成的Map<String,String[]> ?name=1&age=10&like=ball&like=game ${param.name} ${paramValues.like}header:所有请求头组成的map<String,String>
headerValues:所有请求头组成的map<String,String[]> ${header["Accept-Language"]}cookie:所有cookie的信息组成的map
${cookie.JSESSIONID.name}initParam:所有web应用的初始化参数组成的map
调用java方法: 不需要会写,只要会调用标签库就行了 满足条件: 1.一个类里面的静态方法public class ELFunc { public static String myEncode(String str,String encode){ try { return URLEncoder.encode(str, encode); } catch (UnsupportedEncodingException e) { e.printStackTrace(); throw new RuntimeException(e); } }} 2.写一个tld文件,静态方法进行描述,放在WEB-INF下MyELFunc version:2.0 Shortnmae:MyELFunc URI:http://www.zy.com/MyELFunc 这个是名称空间<?xml version="1.0" encoding="UTF-8"?><taglib version="2.0" 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"> <tlib-version>1.0</tlib-version> <short-name>MyELFunc</short-name> <uri>http://www.itheima.com/MyELFunc</uri> <function> <name>URLEnc</name> <function-class>com.itheima.util.ELFunc</function-class> <function-signature> java.lang.String myEncode(java.lang.String,java.lang.String)</function-signature> </function></taglib> 3.jsp页面中,用taglib指令将tld文件引入当前jsp页面<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%@page import="java.net.URLEncoder"%><%@ taglib uri="http://www.itheima.com/MyELFunc" prefix="MyELFunc" %><%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> </head> <body> ${MyELFunc:URLEnc("北京","utf-8") } ${fn:toUpperCase("asdfasdfKJKJKJdsagHIHidsfgGUGu") } </body></html> JSTL:自定义标签技术