Java基础83 JSP标签及jsp自定义标签(网页知识)
1、JSP标签
替代jsp脚本,用于jsp中执行java代码
1.1、内置标签:
<jsp:forward></jsp:forward> 相当于:request.getReuquestDispacher(“路径”).forWard(request,response);
<jsp:param></jsp:param> 参数标签
<jsp:include></jsp:include> 包含其他页面,动态包含
静态包含:先合并在翻译.不能传递参数
动态包含:先翻译在合并.可以传递参数
1.2、jstl标签库(java标准标签库)
使用步骤:
1) 确保jstl支持的jar包在项目中
2) 在jsp中导入标签库
3) 使用标签库里面额标签
核心标签库:
<c:set></c:set> 保存数据
<c:out/> 取出数据
<c:if/> 单条件判断
<c:choose/>+<c:when/><c:otherwise/> 多条件判断
<c:forEach/> 变量数据
<c:forTokens/> 遍历特殊字符的字符串
<c:redirect/> 重定向
1.3、实例
1 <%@page import="com.shore.taglib.Student"%> 2 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 3 <%--导入标签库core,即导入一个c标签--%> 4 <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 5 6 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 7 <html> 8 <head> 9 <title>核心标签库</title> 10 </head> 11 12 <body> 13 <%--使用标签 --%> 14 <%--set标签:保存数据:(保存到域中)默认保存到page域 --%> 15 <c:set var="name" value="rose" scope="request"></c:set> 16 ${name} <br/> 17 <% 18 String str="hllo"; 19 pageContext.setAttribute("str", str); 20 %> 21 ${str} 22 <hr/> 23 24 <% 25 String msg="null"; 26 pageContext.setAttribute("msg", msg); 27 %> 28 ${msg }<br/> 29 <%--out标签:获取数据(从域中) 30 default:当value值为null时,使用默认值 31 escapeXml:是否对value进行转义;false:不转义,true:转义(默认)。 32 --%> 33 <c:out value="${msg }" default="<h3>标题1</h3>" escapeXml="false"></c:out> 34 <hr/> 35 36 <% 37 String vars="jack"; 38 pageContext.setAttribute("vars", vars); 39 %> 40 ${vars } 41 <br/> 42 <%--if标签:但条件判断 --%> 43 <c:if test="${!empty vars }">条件成立</c:if> <%-- 如果vars这个实体/对象非空字符串时,则向页面输出“条件成立”,否则输出空白--%> 44 <hr/> 45 46 <%--choose表+when标签+otherwise标签 --%> 47 <c:set var="score" value="56"></c:set> 48 <c:choose> 49 <c:when test="${score>=90 && score<=100 }">学霸</c:when> 50 <c:when test="${score>=80 && score<90 }">优秀</c:when> 51 <c:when test="${score>=70 && score<=79 }">良好</c:when> 52 <c:when test="${score>=60 && score<=69 }">及格</c:when> 53 <c:when test="${score>=50 && score<=59 }">不及格</c:when> 54 <c:otherwise> 55 你的输入有误! 56 </c:otherwise> 57 </c:choose> 58 <hr/> 59 60 <%--forEach标签:循环--%> 61 <% 62 //list 63 List<Student> list=new ArrayList<Student>(); 64 list.add(new Student("mark",19)); 65 list.add(new Student("lili",30)); 66 list.add(new Student("narci",40)); 67 //放入域中 68 pageContext.setAttribute("list", list); 69 70 //map 71 Map<String,Student> map=new HashMap<String,Student>(); 72 map.put("100",new Student("rose",18)); 73 map.put("101",new Student("jack",20)); 74 map.put("102",new Student("Lucy",21)); 75 //放入域对象中 76 pageContext.setAttribute("map",map); 77 %> 78 <%-- 79 begin=""从那一个元素开始遍历 80 end=""到哪个元素结束.默认到最后一个元素结束的 81 step="" 步长 (每次加几) 默认1 82 items="" 需要遍历的数据(集合) 83 var=""; 每个元素的名称 84 varStatus=""当前正在遍历的元素的状态对象.(count 属性:当前位置,从1开始) 85 --%> 86 <c:forEach items="${list }" var="student" varStatus="varSta"> 87 序号:${varSta.count } -姓名:${student.name } -年龄:${student.age }<br/> 88 </c:forEach> 89 <hr/> 90 <c:forEach items="${map }" var="entry"> 91 ${entry.key } -姓名:${entry.value.name } -年龄:${entry.value.age }<br/> 92 </c:forEach> 93 <hr/> 94 95 <%--forToken标签:循环特殊的字符串 --%> 96 <% 97 String strs="java-php-net-android"; 98 pageContext.setAttribute("strs",strs); 99 %> 100 <c:forTokens items="${strs }" delims="-" var="st"> 101 ${st }<br/> 102 </c:forTokens> 103 <hr/> 104 105 <%--redirect重定向 --%> 106 <%-- <c:redirect url="http://www.baidu.com"></c:redirect> --%> 107 108 </body> 109 </html>
实例结果图:
2、自定义标签
2.1、
1、编写一个普通的java类,继承SimpleTagSupport类(标签处理器类)
2、在web-INF的目录下建立shore.tld文件,这个叫标签库的文件声明.(参考核心标签tld文件编写的)
3、在jsp页面的头部导入自定义标签,并且在jsp中使用该自定义标签:
<shore:showIp> </shore:showIp> 注:如果不使用,页面端是不会显示你需要显示的东西,比如下面的实例,我要显示当前用户的IP地址。
shore.tld文件创建的路径:
2.2、实例
1、编写Java类:ShowIpTag 类
1 package com.shore.customtag; 2 3 import java.io.IOException; 4 5 import javax.servlet.http.HttpServletRequest; 6 import javax.servlet.jsp.JspException; 7 import javax.servlet.jsp.JspWriter; 8 import javax.servlet.jsp.PageContext; 9 import javax.servlet.jsp.tagext.SimpleTagSupport; 10 11 /** 12 * @author DSHORE/2019-2-1 13 * (自定义)标签处理类: 14 * 1.继承SimpleTagSupport 15 * 2.重写doTag()方法 16 */ 17 public class ShowIpTag extends SimpleTagSupport{ 18 @Override 19 public void doTag() throws JspException, IOException { 20 //调用getJspContext()方法,来获取pageContext(Context) 21 PageContext pageContext=(PageContext) this.getJspContext(); 22 //获取Request 23 HttpServletRequest request=(HttpServletRequest) pageContext.getRequest(); 24 //获取IP 25 String ip=request.getRemoteHost(); 26 //向浏览器输出客户的ip地址 27 JspWriter out=pageContext.getOut(); 28 out.write("使用自定义标签输出客户的ip地址:"+ip); 29 } 30 }
2、编写配置文件:shore.tld(标签库的声明文件)
1 <?xml version="1.0" encoding="UTF-8" ?> 2 3 <taglib xmlns="http://java.sun.com/xml/ns/javaee" 4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 5 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd" 6 version="2.1"> 7 <!-- 标签的版本 --> 8 <tlib-version>1.1</tlib-version> 9 <!--标签库的前缀 --> 10 <short-name>shore</short-name> 11 <!--tld文件的唯一标识符--> 12 <uri>http://com.shore.customtag.ShowIpTag</uri> 13 14 <tag> 15 <!--标签的名字 --> 16 <name>showIp</name> 17 <!-- 标签处理器的类的全名 --> 18 <tag-class>com.shore.customtag.ShowIpTag</tag-class> 19 <!--输出标签体内容的格式 --> 20 <body-content>scriptless</body-content> 21 <!--属性的声明 --> 22 <attribute> 23 <!-- 属性名称 --> 24 <name>var</name> 25 <!-- 是否必填 --> 26 <required>false</required> 27 <!-- 是否支持El表达式 --> 28 <rtexprvalue>false</rtexprvalue> 29 </attribute> 30 </tag> 31 32 </taglib>
3、编写页面端:ShowCustomerIp.jsp 【“页面端”通过“配置文件”去调用“Java类”】
1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <%--导入自定义的标签 --%> 3 <%@taglib uri="http://com.shore.customtag.ShowIpTag" prefix="shore" %> 4 5 <head> 6 <title>自定义标签</title> 7 </head> 8 9 <body> 10 <%-- 使用jsp的方法获取 --%> 11 <% 12 //获取当前用户的ip 13 //String ip=request.getRemoteHost(); 14 //向浏览器输出 15 //out.write("当前客户的ip是:"+ip); 16 %> 17 18 <%--使用标签库的标签 的方法获取--%> 19 <shore:showIp>xxxxxxxx</shore:showIp><%-- 只要使用到该自定义标签下的showIp,就会调用ShowIpTag类 并返回给调用者相关信息 --%> 20 </body> 21 </html>
实例结果图:
原创作者:DSHORE 作者主页:http://www.cnblogs.com/dshore123/ 原文出自:https://www.cnblogs.com/dshore123/p/10339770.html 欢迎转载,转载务必说明出处。(如果本文对您有帮助,可以点击一下右下角的 推荐,或评论,谢谢!) |