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

欢迎转载,转载务必说明出处。(如果本文对您有帮助,可以点击一下右下角的 推荐,或评论,谢谢!

原文地址:https://www.cnblogs.com/dshore123/p/10339770.html