• 20160331javaweb之JSP 标签技术


    jsp的标签技术:在jsp页面中最好不要出现java代码,这时我们可以使用标签技术将java代码替换成标签来表示

    1.jsp标签:sun原生提供的标签直接在jsp页面中就可以使用
    <jsp:include> -- 实现页面包含,动态包含
    <jsp:forward> -- 实现请求转发
    <jsp:param> -- 配合上面的两个标签使用,在请求包含和请求转发时用来在路径后拼接一些请求参数


    2.EL表达式:最初出现的目的是用来取代jsp页面中的jsp脚本表达式.但是随着el的发展el的功能已经不限于此了
    ${el表达式}

    (1)获取数据:
    使用中括号的地方都可以使用点号替代,除了中括号中是数字或者中括号中包含特殊字符(-.)的情况除外
    在中括号中如果不用双引号引起来则是变量,先找变量的值再拿变量的值使用.如果用双引号则是常量,直接使用常量的值

    ~获取常量
    字符串/数字/布尔类型,直接写在el表达式中,el直接进行输出
    ~获取域中的变量
    如果el中写的是一个变量的名,则el会调用pageContext的findAttribute方法,在四大作用域中以给定的名字找对应的属性值,找到后进行输出,如果四个域中都找不到,什么都不输出
    ~获取数组中的数据
    ~获取集合中的数据
    ~获取Map中的数据
    ~获取javabean的属性
    代码演示:

    //我是javabean
    package com.dzq.domain;
    
    public class UserBean {
    private String username;
    private int age;
    public String getUsername() {
    	return username;
    }
    public void setUsername(String username) {
    	this.username = username;
    }
    public int getAge() {
    	return age;
    }
    public void setAge(int age) {
    	this.age = age;
    }
    
    
    }
    

      


    我   的   下   面   是  jsp  页  面   ,上  面  是javabean,哈哈哈


    <%@page import="java.util.*" import="com.dzq.domain.*"%>
    <%@ 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>Insert title here</title>
    </head>
    <body>
    <h1>获取javabean的属性</h1><hr>
    <%
    UserBean user=new UserBean();
    user.setUsername("hello");
    user.setAge(17);
    pageContext.setAttribute("user", user);
    %>
    ${user.username }${user.age }
    <h1>获取Map中的数据</h1><hr>
    <%
    Map<String,String> map=new HashMap<String,String>();
    map.put("name", "当当");
    map.put("age", "17");
    map.put("sex","男");
    map.put("addr", "山东");
    pageContext.setAttribute("map",map);
    %>
    ${map["name"] } ${map["addr"] }
    ${map.sex } ${map.age }
    <h1>获取集合中的数据</h1><hr>
    <%
    List<String> list=new ArrayList<String>();
    list.add("甄嬛");
    list.add("果郡王");
    list.add("流朱");
    list.add("浣碧");
    pageContext.setAttribute("list",list);
    %>
    ${list[2] }
    <h1>获取数组中的数据</h1><hr>
    <%
    String [] names={"滋味","hello","呵呵"};
    pageContext.setAttribute("names", names);
    %>
    ${names[0]}
    <h1>获取域中的变量数据</h1><hr>
    <%
      String name="hello";
    pageContext.setAttribute("name", name);
    %>
    ${name}
    <h1>获取常量数据</h1><hr>
    ${"发射 发射发射" } ${199 }  ${true}
    
    </body>
    </html>
    

      运行截图


    (2)执行运算:
    算数运算
    +-*/
    逻辑运算
    比较运算

    三元运算符
    empty运算符

    代码演示:

    <%@ 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>Insert title here</title>
    </head>
    <body>
    <h1>empty </h1>判断对象是否为空,或者字符串为空,集合为空,域的属性为空<hr>
    <%
    String str=null;
    pageContext.setAttribute("str", str);
    %>
    ${empty str }
    <h1>算数运算</h1><hr>
    ${1-2 }
     ${2-1 }
    ${2+"3" } //如果有非数字参加算数运算,el表达式会试图将其转化成数字
    <h1>逻辑运算</h1><hr>
    ${1<0 &&3>4 ||10<5}
    <h1>比较运算</h1><hr>
    ${1==1 } ${3<=2 }
    <h1>三元运算</h1><hr>
    ${10>9?"yes":"no" }
    </body>
    </html>
    

      




    (3)获取常用开发对象:el中内置了11个内置对象,这些对象el内置的,不需要提前定义就可以直接在el中使用
    !pageContext -- 有了它可以很方便的获取jsp页面中的9大隐式对象

    !pageScope -- page域中属性组成的Map
    !requestScope -- request域中属性组成的Map
    !sessionScope -- session域中属性组成的Map
    !applicationScope --application域中属性组成的Map

    !param -- 所有请求参数组成的Map<String,String>
    paramValues -- 所有请求参数组成的Map<String,String[]>

    header -- 所有请求头组成的Map<String,String>
    headerValues -- 所有请求头组成的Map<String,String[]>

    !cookie -- 所有cookie信息组成的Map<String,Cookie>

    initParam -- 所有web应用的初始化参数组成Map



    (4)调用java方法: -- 不需要大家自己会写调用方法的过程,只要会调用别人写好的标签库就可以了 fn标签库
    ~写一个类其中包含要被el调用的方法,这个方法必须是静态的方法
    ~写一个tld文件在其中对要被调用的静态方法进行一下描述
    ~在jsp页面中taglib指令将tld文件引入当前jsp页面,从而在jsp页面中就可以调用描述好的方法

    先写一个java方法:

    package com.dzq.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 (Exception e) {
    		e.printStackTrace();
    		throw new RuntimeException(e);
    	}
    }
    }
    

      再写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://www.itheima.com/MyELFunc</uri>
    	<function>
    		<name>URLEnc</name>
    		<function-class>com.dzq.util.ELFunc</function-class>
    		<function-signature> java.lang.String myEncode(java.lang.String,java.lang.String)</function-signature>
    	</function>
    </taglib>
    

      jsp中调用java方法:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib uri="http://www.itheima.com/MyELFunc" prefix="MyELFunc" %>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
    <!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>Insert title here</title>
    </head>
    <body>
    ${MyELFunc:URLEnc("上海","UTF-8") }
    ${fn:toLowerCase("adaddAADTFThuhuhhhhHHhhhH") }
    </body>
    </html>
    

      

    3.JSTL:
    <c:out> 标签用于输出一段文本内容到pageContext对象当前保存的“out”对象中。

    <body>
    <h1>HTML转义输出</h1><hr>
    <a href="#">xxx</a>
    <c:out value="<a href='#'>xxx</a>"></c:out>
    <h1>输出默认值</h1><hr>
    <%
    String addr="Hello哦";
    %>
    <c:out value="${addr }" default="呵呵呵"></c:out>
    <h1>输出变量</h1><hr>
    <%
    String name="张亮";
    pageContext.setAttribute("name", name);
    %>
    <c:out value="${name }"></c:out>
    <h1>输出常量</h1><hr>
    <c:out value="hello"></c:out>
    </body>


    <c:set>标签用于把某一个对象存在指定的域范围内,或者设置Web域中的java.util.Map类型的属性对象或JavaBean类型的属性对象的 属性。

    <body>
    <h1>设置或修改域中javabean属性的值</h1><hr>
    <%
    UserBean user=new UserBean();
    pageContext.setAttribute("user", user);
    %>
    <c:set target="${user}" property="username" value="叭叭叭"></c:set>
    ${user.username }
    <h1>设置或修改域中Map值</h1><hr>
    <%
    Map<String,String> map=new HashMap<String,String>();
    pageContext.setAttribute("map", map);
    %>
    <c:set target="${map }" property="cellphone" value="10010"></c:set>
    <c:set target="${map }" property="cellphone" value="10086"></c:set>
    ${map.cellphone }
    <h1>设置或修改域中的属性值</h1><hr>
    <c:set var="name" value="韦小宝"></c:set>
    <c:set var="name" value="阿珂"></c:set>
    ${name }
    </body>


    <c:remove>标签用于删除各种Web域中的属性


    <c:catch>标签用于捕获嵌套在标签体中的内容抛出的异常,其语法格式如下:<c:catch [var="varName"]>nested actions</c:catch>

    <body>
    <c:catch var="e">
    <%
    int i=1/0;
    %>
    </c:catch>
    ${e.message }
    </body>


    !!<c:if test=“”>标签可以构造简单的“if-then”结构的条件表达式

    <body>
    <c:if test="${2>1 }">
    确实是这样的
    </c:if>
    <c:if test="${2<=1 }">
    你确定???
    </c:if>
    </body>


    !!<c:choose>标签用于指定多个条件选择的组合边界,它必须与<c:when>和<c:otherwise>标签一起使用。使用<c:choose>,<c:when>和<c:otherwise>三个标签,可以构造类似 “if-else if-else” 的复杂条件判断结构。

    <body>
    <%
    int day=3;
    pageContext.setAttribute("day", day);
    %>
    <c:choose>
       <c:when test="${day==1 }">
                        星期一
       </c:when>
       <c:when test="${day==2 }">
       星期二
       </c:when>
       <c:when test="${day==3 }">
       星期三
       </c:when>
    </c:choose>
    
    </body>


    !!<c:forEach>标签用于对一个集合对象中的元素进行循环迭代操作,或者按指定的次数重复迭代执行标签体中的内容。

    <body>
    <h1>实验:遍历10-100的偶数,如果数字所在位置是3的倍数,则显示成红色</h1>
    <c:forEach begin="10" end="100" step="2" var="i" varStatus="stat">
    <c:if test="${stat.index %3==0 }">
    <font color="red">
    ${i }
    </font>
    </c:if>
    <c:if test="${stat.index %3!=0 }">
    <font color="blue">
    ${i }
    </font>
    </c:if>
    </c:forEach>
    <h1>循环执行指定的内容若干次</h1><hr>
    <c:forEach begin="0" end="10" step="2" var="i">
    ${i },
    
    </c:forEach>
    <h1>遍历Map数据</h1><hr>
    <%
    Map map=new LinkedHashMap();
    map.put("name", "hello");
    map.put("jj", "hell");
    map.put("heh", "hel");
    pageContext.setAttribute("map", map);
    %>
    <c:forEach items="${map }" var="m">
    ${m.key}:${m.value }<br>
    </c:forEach>
    <h1>遍历集合数据</h1><hr>
    <%
    List list =new ArrayList();
    list.add("美国");
    list.add("韩国");
    list.add("额国");
    pageContext.setAttribute("list", list);
    %>
    <c:forEach items="${list }" var="l">
    ${l }
    </c:forEach>
    <h1>遍历数组数据</h1><hr>
    <%
    String [] city={"北京","上海","南京","云南","李静"};
    pageContext.setAttribute("city",city);
    %>
    <c:forEach items="${city }" var="c">
    
    ${c }<br>
    </c:forEach>
    </body>


    !!<c:forTokens>用来浏览一字符串中所有的成员,其成员是由定义符号所分隔的

    <body>
    <c:forTokens items="www.baidu.com" delims="." var="str">
    ${str }<br>
    
    </c:forTokens>
    </body>


    <c:param>标签 在JSP页面进行URL的相关操作时,经常要在URL地址后面附加一些参数。<c:param>标签可以嵌套在<c:import>、<c:url>或<c:redirect>标签内,为这些标签所使用的URL地址附加参数。

    <c:import> 标签,实现include操作

    <body>
    <c:import url="../index.jsp" var="p" scope="page"></c:import>
    bbb
    cccc
    cccc
    ${p }
    llll
    </body>


    <c:url>标签用于在JSP页面中构造一个URL地址,其主要目的是实现URL重写。URL重写就是将会话标识号以参数形式附加在URL地址后面

    <body>
    <%
    String url=response.encodeURL(request.getContextPath()+"/index.jsp");
    %>
    <a href="<%=url %>">jajaj</a>
    <c:url value="/index.jsp" context="${pageContext.request.contextPath }" var="url" scope="page"></c:url>
    <a href="${url }">bbbb</a>
    </body>


    <c:redirect>标签用于实现请求重定向

    <body>
    <c:redirect url="/index.jsp" context="${pageContext.request.contextPath }"></c:redirect>
    </body>


    4.自定义标签技术:
    暂时省略

  • 相关阅读:
    android 项目
    input keyevent 数字对应的操作
    logcat 使用方法
    android查看内存使用情况
    图片点击放大效果
    禁止img图片拖动在新窗口打开
    人工智能
    游戏开发
    随手做的一个模拟弹出窗口
    Html的<meta>标签使用方法及用例
  • 原文地址:https://www.cnblogs.com/xiaoduc-org/p/5340568.html
Copyright © 2020-2023  润新知