概述
JSP标签
sun原生提供的标签,直接在jsp页面中就可以使用。
JSP标签也称之为Jsp Action(JSP动作)元素,它用于在JSP页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码,造成jSP页面难以维护。
<jsp:include>
:实现请求,属于动态包含。<jsp:forword>
:实现请求转发。<jsp:param>
:配合上面两个标签使用,在请求包含和请求转发时用来在路径后拼接一些参数。用在上面两个标签的开始和结束之间。例如:
<jsp:forward page="/index.jsp">
<jsp:param name="name" value="duanyu" />
</jsp:forward>
在index.jsp页面里添加如下代码
<%=request.getParameter("name") %>
就可以在网页上输出name属性的值了。
EL表达式
EL全名为Expression Language。其基本格式为:${EL表达式 }
EL表达式的出现最初是想要取代JSP页面中的JSP脚本表达式,但是随着它的发展,其功能已经不限于此了。它主要有以下功能:
获取数据
tips:
1,使用中括号的地方都可以使用点号替代,除了中括号中是数字或者中括号中包含特殊字符(-.)的情况除外。
2,在中括号中如果不用双引号引起来则是变量,先找变量的值再拿变量的值使用。如果用双引号则是常量,直接使用常量的值。
3,EL表达式可以用来获取数据,但是却不能设置和遍历数据。
获取常量
字符串/数字/布尔类型可以直接写在EL表达式中,EL会直接进行输出。
<h1>获取常量</h1><hr>
${"我是一个字符串常量" }
${65535 }
${true }
获取域中的变量
如果EL中写的是一个变量的名,则el会调用pageContext
的findAttribute()
方法,在四大作用域中以给定的名字找对应的属性值,找到后进行输出,如果四个域中都找不到,则什么都不输出。
<h1>获取域中的变量</h1><hr>
<%
String name = "木婉清";
pageContext.setAttribute("name", name);
%>
${name }
获取数组中的数据
<h1>获取数组中的数据</h1><hr>
<%
String[] names = {"乔峰", "段誉", "虚竹", "王语嫣"};
pageContext.setAttribute("names", names);
%>
${names[2] }
获取集合中的数据
<h1>获取集合中的数据</h1><hr>
<%
List<String> list = new ArrayList<String>();
list.add("乔峰");
list.add("段誉");
list.add("虚竹");
list.add("王语嫣");
pageContext.setAttribute("list", list);
%>
${list[3] }
获取Map中的数据
<h1>获取Map中的数据</h1><hr>
<%
Map<String, String> map = new HashMap<String, String>();
map.put("name", "Eric");
map.put("age", "24");
map.put("gender", "male");
map.put("addr", "smwhere");
pageContext.setAttribute("map", map);
%>
${map["name"] } ${map["age"] }
${map.gender } ${map.addr }
获取JavaBean的属性
新建一个JavaBean,代码如下:
package me.zipstream.domain;
public class Person {
public Person(){}
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
利用EL获取JavaBean中属性的代码:
<h1>获取JavaBean的属性</h1><hr>
<%
Person p = new Person();
p.setName("天山童姥");
p.setAge(129);
pageContext.setAttribute("p", p);
%>
${p.name }
${p.age }
这里注意:不要忘记导包。
<%@page import="me.zipstream.domain.Person"%>
其实这里的${p.name }
与${p.age }
并不是去访问类中的属性,而是调用类中相应的get方法。所以在以后写路径的时候,可以利用这个原理。例如:
<img src="${pageContext.request.contextPath }/1.jpg" />
其实就是调用了各自的get方法。
执行运算
算术运算
<h1>算术运算</h1><hr>
${1+4 }
${2-5 }
${3*6 }
${5/2 }<!-- 结果为2.5 -->
${1+"3" }<!-- 会把"3"转成数字再做运算 -->
<%-- ${1+'a' } 会报异常--%>
比较运算
<h1>比较运算</h1><hr>
${1==1 } ${1 eq 1 }
${1<4 } ${1 lt 4 }
${1<=2 } ${1 le 2 }
${1>3 } ${1 gt 3 }
${1>=2 } ${1 ge 2 }
${1!=1 } ${1 ne 1 }
<%--
== : eq
< : lt
<= : le
> : gt
>= : ge
!= : ne
--%>
逻辑运算
<h1>逻辑运算</h1><hr>
${not(3>1 and 6<=2 or 4==4) }
<%--
&& : and
|| : or
! : not
--%>
结果为false
。
三元运算
<h1>三元运算</h1><hr>
${100 > 99 ? "yes" : "no" }
empty运算
用来判断一个字符串是否为空 or 一个对象是否为null or 一个集合内容是否为空 or 一个域中是否没有任何属性。
<h1>empty运算</h1><hr>
<%
String str = "";
List list = new ArrayList();
pageContext.setAttribute("str", str);
pageContext.setAttribute("list", list);
%>
${empty str }
${empty list }
${empty requestScope }
${empty pageScope }
结果为:true
,true
,true
,false
。
获取常用开发对象
EL表达式中有11个内置对象,这些对象不需要提前定义就可以直接在EL中使用。
- pageContext – 有了它可以很方便的获取jsp页面中的9大隐式对象
- pageScope – page域中属性组成的
Map<String, Object>
- requestScope – request域中属性组成的Map
<String, Object>
- sessionScope – session域中属性组成的Map
<String, Object>
- applicationScope –application域中属性组成的Map
<String, Object>
- param – 所有请求参数组成的Map
<String,String>
- paramValues – 所有请求参数组成的Map
<String,String[]>
- header – 所有请求头组成的Map
<String,String>
- headerValues – 所有请求头组成的Map
<String,String[]>
- cookie – 所有cookie信息组成的Map
<String,Cookie>
- initParam – 所有web应用的初始化参数组成Map
<String, String>
tips:
测试headerValues时,如果头里面有-
,例Accept-Encoding,则要${headerValues[“Accept-Encoding”] }
。
测试cookie时,例${cookie.key }
取的是cookie对象,如访问cookie的名称和值,须${cookie.key.name }
或${cookie.key.value }
。
调用Java方法
EL自定义函数开发与应用包括以下三个步骤:
1,编写一个Java类的静态方法。
2,编写标签库描述符(tld)文件,在tld文件中描述自定义函数。注意这个tld文件要存放在WEB-INF
目录下除了classes
和lib
以外的位置。
3,在JSP页面中导入(tablib指令)和使用自定义函数。
例子:编写一个函数,对给定的URL进行URL编码。在JSP文件中引入并使用这个自定义函数。
写一个类ELFunc.java,代码如下:
package me.zipstream.util;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
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);
}
}
}
在WEB-INF
目录下新建一个tld文件MyELFunc.tld。代码如下:
<?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://zipstream.me/MyELFunc</uri>
<function>
<name>URLEnc</name>
<function-class>me.zipstream.util.ELFunc</function-class>
<function-signature>java.lang.String MyEncode(java.lang.String, java.lang.String)</function-signature>
</function>
</taglib>
新建一个jsp文件,引入并使用这个自定义函数。
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://zipstream.me/MyELFunc" prefix="MyELFunc" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
${MyELFunc:URLEnc("张无忌", "utf-8") }
</body>
</html>
浏览器访问这个jsp,显示结果为:%E5%BC%A0%E6%97%A0%E5%BF%8C
。
其实,在javaEE5.0版本以后,已经内置了JSTL标签库。可以直接在jsp文件中引入并使用这些标签。例如:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ 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>
${fn:toUpperCase("asdfasdfKJKJKJdsagHIHidsfgGUGu") }
</body>
</html>
浏览器输出结果:ASDFASDFKJKJKJDSAGHIHIDSFGGUGU
。
最后
以上就是迷你爆米花为你收集整理的JSP学习笔记(二)---JSP标签和EL表达式JSP标签EL表达式的全部内容,希望文章能够帮你解决JSP学习笔记(二)---JSP标签和EL表达式JSP标签EL表达式所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复