jsp的标签技术是什么呢:在jsp中把java代码替换到标签标示
1.jsp标签:sun公司原生提供的标签
- <jsp:include>
- <jsp:forward>
- <jsp:param>
<jsp:include>请求包含:标签用于把另外一个资源的输出内容插入进当前JSP页面的输出内容之中,这种在JSP页面执行时的引入方式称之为动态引入。
- 语法:
- <jsp:include page="relativeURL | <%=expression%>" flush="true|false" />page属性用于指定被引入资源的相对路径,它也可以通过执行一个表达式来获得。flush属性指定在插入其他资源的输出内容时,是否先将当前JSP页面的已输出的内容刷新到客户端。
<jsp:forward>请求转发
当使用<jsp:include>和<jsp:forward>标签引入或将请求转发给其它资源时,可以使用<jsp:param>标签向这个资源传递参数。
<jsp:param>传递资源 配合请求装发,和请求包含进去
- 语法1:
-
<jsp:include page="relativeURL | <%=expression%>"> <jsp:param name="parameterName" value="parameterValue|<%= expression %>" /> </jsp:include>
- 语法2:
-
<jsp:forward page="relativeURL | <%=expression%>"> <jsp:param name="parameterName" value="parameterValue|<%= expression %>" /> </jsp:include>
<jsp:param>标签的name属性用于指定参数名,value属性用于指定参数值。在<jsp:include>和<jsp:forward>标签中可以使用多个<jsp:param>标签来传递多个参数。
EL表达式:Expression Language:最初用来取代jsp中的jsp脚本表达式;
主要功能如下:
- 获取数据:语法:${el标示符}
- 获取常量:字符串,数字,boolean,直接写在el表达式中;
- 获取变量:如果el中写的是一个变量名,el会调用find变量名
- 获取域中的数据
- 获取数组中的数据
- 获取集合的数据
- 获取map中的数据
- ${propName}在四个域中搜寻proName属性,输出该值到输出流中
- ${pageScope/requestScope/sessionScope/applicationScope.proName}获取指定域中的属性
- ${attr[0]}获取域中的集合的指定元素
- ${list[0]}获取list中的指定位置元素
- ${map.keyName}获取map中指定键的值
- ${bean.propName}获取javaBean的属性,可以认为是调用了javaBean的getXXX方法,
最重要的一个应用场景:在写路径的时候最好不要把web应用名称写死,
java中应该用request.getContextPath去获取。jsp中就用el获取:${pageContext.request.contextPth}
获取数据时可以使用那个中括号的地方都可以用点号替代(.)除中括号是数字或包含特殊字符时(.-)在中括号如果不用双引号是变量,否则是常量;
获取javabean的属性:
执行运算:
- (1)算数运算:所有参与元算的元素都会被转成数字,如果不能转就报错,空元素参与运算当作没参与。
- (2)关系运算:
- (3)逻辑运算:
- (4)empty/not empty判断一个对象或集合或数组是否为空或长度为0
- (5)三元表达式 name == null ? "张三" : name;
获取web常用对象:
调用java方法:el表达式可以调用java中的静态方法,
先在eclipes中的tld文件的创建方式:
- 1.在webcontent目录下创建xml文件,
- 2.然后把xml的后缀名改为tld文件,
- 3.Create XML file from a DTD file ----> Next
- 4.Select XML Catalog entry
- 5. 选择-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN----->Next
- 6. finish---->ok
- 分如下步骤完成:
- (1)编写一个类,其中应该包含要使用el调用的静态方法
- (2)编写一个tld文件,描述该方法的调用,在创建tld文件时应选用2.0版本的jsp配置,指定名称空间uri和缩写prefix
- (3)在tld文件中配置方法信
<function> <name>encodeURL</name>el在调用时所使用的方法名 <function-class>cn.itheima.util.EncodeURL</function-class>静态方法所在的类全路径名 <function-signature> java.lang.String EncodURL( java.lang.String )//对该方法的描述:返回值类型 方法名(参数类型) </function-signature> </function>
- (4)在jsp中使用<%@ taglib uri="" prefix="ppp"%>引入tld文件
- (5)在jsp中使用${ppp:encodeURL("xxxx")}调用
- 具体代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>EL表达式</title>
</head>
<body>
<h1>获取javabean</h1>
<%
Person p=new Person();
p.setName("00");
p.setAge("12");
pageContext.setAttribute("p", p);
%>
${p.name}
${p.age}
<img src="${pageContent.request.contextPath }1.jpg"/>
<h1>获取map中的数据</h1>
<%
Map<String,String> map=new HashMap();
map.put("name1", "zhang");
map.put("name2", "zhang1");
map.put("name3", "zhang2");
map.put("name4", "zhang3");
pageContext.setAttribute("map", map);
%>
${map["name1"]} ${map.name2}
<h1>获取集合中的数据</h1>
<%
List<String> list=new ArrayList<String>();
list.add("1");
list.add("2");
list.add("3");
list.add("4");
pageContext.setAttribute("list", list);
%>
${list[2]}
<h1>获取数组中的数据</h1>
<%
String[] names={"小李","校长","只能够三"};
pageContext.setAttribute("names", names);
%>
${names[2]}
<h1>获取常量数据</h1>
<%
String name="只能够";
pageContext.setAttribute("name", name);
%>
获得变量名:${name}
${"常量"} ${123454} ${true}
</body>
</html>
3.JSTL:JSTL core库的有两种taglib伪指令, 其中RT库即是依赖于JSP传统的请求时属性值, 而不是依赖于EL来实现(称为EL库.JSP2.0将支持EL)
JSP中使用<%@ taglib uri=http://java.sun.com/jstl/core prefix="c"%>在2.3版本都可以,在2.4就不行了, 难道是版本不兼容吗?
只要将
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%>
改为
<%@ taglib uri=http://java.sun.com/jstl/core_rt prefix="c"%>
<h1>cif</h1>
<c:if test="${2>1}">
${1}
</c:if>
<c:if test="${2<1}">
2>1是不可能的
</c:if>
</body>
4.自定义标签技术:
https://www.cnblogs.com/niuchuangfeng/p/9123927.html,看这篇博文博还不错的