zoukankan      html  css  js  c++  java
  • 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

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

  • 相关阅读:
    L1范式和L2范式的区别
    随机森林
    LDA-math-神奇的Gamma函数
    (转)共轭先验的理解
    Hits算法
    朴素贝叶斯分类算法(3)
    朴素贝叶斯分类算法(2)
    朴素贝叶斯分类算法(1)
    多项分布(multinominal distribution)
    从对偶问题到KKT条件
  • 原文地址:https://www.cnblogs.com/dshore123/p/10339770.html
Copyright © 2011-2022 走看看