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.自定义标签技术:
暂时省略

时间: 2025-01-02 16:56:16

20160331javaweb之JSP 标签技术的相关文章

13.1 jsp标签技术 el表达式

一.标签技术 1. 标签技术概述 在jsp页面中有HTML语句和java语句相互嵌套,如果java的逻辑代码和页面的HTML组成代码都十分复杂,两者有掺杂在一起,页面的可读性和可维护性都将降低.为了解决这个问题,产生了标签技术.用它来替换页面中的java语句,这样页面中只会出现HTML代码,整体的可读性和可维护性都会提升. 2. 常用的JSP标签技术 jsp标签 sun公司提供的标签技术 - 目前用的比较少 el表达式 便捷易用 - 使用非常广泛 - 但只是表达式无法实现复杂功能 jstl标签库

JSP标签技术

1.在JSP页面中写入大量的java代码会导致JSP页面中html代码和java代码混杂在一起,会造成页面非常混乱,难以维护 2.于是在JSP的2.0版本中,sun提出了JSP标签技术,推荐使用标签来道题JSP页面中的java代码,并且推荐,JSP2.0以后不要再JSP页面中出现一行java代码. 3.EL表达式 EL表达式在JSP中可以非常方便的获取数据,可以代替JSP页面中的JSP表达式(<%=  %>) 基本结构:${表达式} EL只能获取不能设置!!! EL只能获取不能遍历!!! EL

自定义标签(客户化jsp标签)

客户化jsp标签技术是在jsp1.1版本中才出现的,他支持用户在jsp文件中自定义标签,这样可以使jsp代码更加简单,这些可重用的标签能够处理复杂的逻辑运算和事物或定义jsp网页的输出内容和格式. 创建客户化jsp标签的步骤: (1)创建标签的处理类 (2)创建标签的描述文件 (3)在jsp文件中引入标签库,然后插入标签.例如:<mm:hello />其中 mm叫做标签前缀,hello叫做标签名 jsp tag API Servlet容器编译jsp网页时,如果遇到自定义标签,就会调用这个标签的

jsp标签&amp;EL表达式

1.jsp标签和el表达式     (1)什么是jsp标签?         jsp标签用来替换jsp文件中的java代码,容器遇到jsp标签之后,会依据标签找到标签类然后执行.         注: 因为直接在jsp当中写java代码,不利于jsp文件的维护(比如,将包含有java代码的jsp交给美工去修改就很不方便),所以,               sun才制订了jsp标签技术规范.             使用jsp标签技术,有两大优点:             a.jsp文件维护方便

jsp2.0+中的标签文件,JSP Fragment技术

刚进新公司不久,今天在看到项目中用到了.tag文件.刚開始我还以为这个是第三方类似freemarker的模板技术.问了下项目组的其它人员,原来这是jsp2.0以来就有的JSP Fragment技术.曾经做项目的时候从来没实用这种方式,要公用就用用jsp中的include和jsp:include的方式.事实上JSP Fragment也有include的作用,可是它更像第三方sitemesh技术.用于网页布局和修饰,能够将网页的内容和页面的结构分离.从而达到页面结构共享的目的. 以下的样例来说明怎么

JSP的标签技术

jsp的标签技术:在jsp页面中最好不要出现java代码,这时我们可以使用标签技术将java代码替换成标签来表示.JSP的标签技术主要有下面四种: jsp标签. EL表达式. JSTL标签库. 自定义标签技术. 一.jsp标签 sun原生提供的标签,可以直接在jsp页面中使用.这种标签技术在实际使用中用的不是很多.它有很多标签,下面介绍其中的几种标签: 1.标签 标签用于把另外一个资源的输出内容插入进当前JSP页面的输出内容之中,这种在JSP页面执行时的引入方式称之为动态引入. 语法: <jsp

JavaWeb之 JSP:内置对象,EL表达式,JSP标签基础

JSP的内置对象 什么是JSP的内置对象呢? 在JSP页面进行编程的时候,如果我们要使用一些对象,如:HttpSession,ServletConfig,ServletContext这些对象,如果每次都要先创建这些对象,然后再去使用它们,这样就显得十分繁琐了,为了方便使用者,Sun公司在开发JSP的时候,把一些对象设置为内置对象,开发者在JSP页面编程的时候不必声明这些对象就能直接使用,这就是JSP的内置对象. 那么JSP对象有哪些呢? JSP内置对象          对应的类型   备注 R

Jsp标签字典开发_基于Spring+Hibernate

目录 1. Jsp标签字典开发_基于Spring+Hibernate 1.1. 简述 1.2. 定义DictItem实体 1.3. 定义字典的@interface 1.4. 定义字典缓存类 1.5. 定义tld标签 1.6. 持久层实体使用注解 1.7. 页面调用jsp标签 2. 补充点 2.1. Hibernate设置属性成功后扫描字典 2.2. Annotation注解 2.2.1. 简述 2.2.2. 元注解 2.2.3. 自定义注解 1. Jsp标签字典开发_基于Spring+Hiber

通过引入SiteMesh的JSP标签库,解决Freemarker与SiteMesh整合时,自定义SiteMesh标签的问题

不少web项目,都用到了SiteMesh.SiteMesh可以和JSP.Freemarker等模版进行整合,有一定的好处,当然也有其不好的地方.我个人觉得,如果没有必要,不要在项目中引入太多的工具和技术,工具多了,项目开发的速度提高不起来. 以前,主要是用JSP作为视图层,最近主要是用Freemarker,然后配置Freemarker和SiteMesh整合. 项目中,最初的做法如下所示. <html>   <head>  ${head} </head> <body