七、jsp基础(五)- jsp标签

一、jsp标签

1.1 jsp标签的作用

		jsp的核心语法: jsp表达式 <%=表达式  %>和 jsp脚本<%  %>。
		以后开发jsp的原则: 尽量在jsp页面中少写甚至不写java代码。

		使用EL表达式,替换jsp表达式
		使用jsp标签,替换jsp脚本。
		
		使用jsp标签替换掉jsp脚本。

1.2 jsp标签的分类

		
		1.内置标签(动作标签),不需要再jsp页面导入标签
		2.jstl标签,需要在jsp页面导入标签
		3.自定义标签,开发者自己定义,需要在jsp页面导入标签
		

二、内置标签(动作标签)

		
		##转发标签:
				<jsp:forward page="/index.jsp"></jsp:forward>
		
				相当于
					 request.getRequestDispatcher("/index.jsp").forward(request, response);

			
		##包含标签(动态包含):
				<jsp:include page="./index2.jsp"></jsp:include>
				
				原理:两个jsp页面会被各自翻译java文件,然后在运行时,会进行动态包含在一个页面。
		
		
		##参数标签:
				
				转发传参:
						<jsp:forward page="/index.jsp">
								<jsp:param value="name" name="小王"/>
								<jsp:param value="pwd" name="123"/>
						</jsp:forward>
			
						相当于
								request.getRequestDispatcher("/index.jsp?name=小王&pwd=123").forward(request, response);
				
			   动态包含传参:
						<jsp:include page="./index2.jsp">
							<jsp:param value="name" name="eric"/>
							<jsp:param value="name2" name="hlp"/>
						</jsp:include>
			
						接参
						<%request.getParameter("name") ;%>
			  		

2.1 转发标签


	<jsp:forward page="/index.jsp"></jsp:forward>
	
	原理:该标签会在翻译时被翻译成一下代码:
				request.getRequestDispatcher("/index.jsp").forward(request, response);
	

例子1:

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>EL 表达式获取数据</title>
</head>
<body>


	
<%--
		注释:以下代码相当于注释的代码
		<%
			request.getRequestDispatcher("/index.jsp").forward(request, response);
		%>
--%>	
	
	<jsp:forward page="/index.jsp"></jsp:forward>
	
</body>
</html>

2.2 参数标签

	
	转发标签
			传参:
				<jsp:forward page="/index.jsp">
					<jsp:param value="name" name="小王"/>
					<jsp:param value="pwd" name="123"/>
				</jsp:forward>
				
			接参:
				 <%=request.getParameter("key1") %>

			
			原理:该标签会被翻译成以下代码
							request.getRequestDispatcher("/index.jsp?name=小王&pwd=123").forward(request, response);


    动态包含
   			传参:
	   			<jsp:include page="./index3.jsp">
						<jsp:param value="hlp" name="key1"/>
				</jsp:include>
			
			接参:
				 <%=request.getParameter("key1") %>

	

例1:转发标签传参

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>EL 表达式获取数据</title>
</head>
<body>

	
	<jsp:forward page="/index.jsp">
		<jsp:param value="name" name="小王"/>
		<jsp:param value="pwd" name="123"/>
	</jsp:forward>
	


<%--
		上述代码,相当于以下java代码
		<%
			request.getRequestDispatcher("/index.jsp?name=小王&pwd=123").forward(request, response);
		%>
 --%>
 
</body>
</html>

2.2 包含标签(动态包含)

	包含标签(动态包含):
	
					<jsp:include page="./index2.jsp"></jsp:include>
					
					原理:包含与被包含的页面先各自翻译成java源文件,然后在运行时合并在一起。
						  先翻译后包含,动态包含。

	实现页面包含功能,有两种方式:
			方式一:包含指令(静态包含)
						
						<%@include file="被包含的页面" %> 

			方式二:包含标签(动态包含)
						
						<jsp:include page="./index.jsp" > 


	静态包含与动态包含的区别:
			1.语法区别
					 静态包含(包含指令)
					 		<%@include file="被包含的页面" %> 
					 动态包含(包含标签)
							<jsp:include page="./index.jsp" > 
			
			2.参数区别
					静态包含不能传参。
					动态包含可以向被包含的页面传参,
			
			3.原理不同			
					静态包含:先合并在翻译。
							 静态包含只有一份源代码。
							 被包含的页面与包含的页面,在翻译时就被翻译成一个源文件。
			
					动态包含:先合并在翻译。
							动态包含有两份源代码。
						    被包含的页面与包含的页面会先各自被翻译成java源文件,然后在运行时再被合并成一个文件。
			
			
			4.区别总结
					静态包含:<%@include file="被包含的页面" %> 
						先合并在翻译,不能传参。
					
					动态包含:<jsp:include page="./index.jsp" > 
						先翻译在合并,能传参
						
例1: 静态包含实例

index2.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>EL 表达式获取数据</title>
</head>
<body>

222222
	
</body>
</html>

NewFile.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>EL 表达式获取数据</title>
</head>
<body>
11111zz
<%@include file="./index2.jsp" %>

</body>
</html>

在这里插入图片描述

例2: 动态包含实例

inedx2.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>EL 表达式获取数据</title>
</head>
<body>

222222
	
</body>
</html>

NewFile.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>EL 表达式获取数据</title>
</head>
<body>

11111111
	
	<jsp:include page="./index2.jsp"></jsp:include>
</body>
</html>

在这里插入图片描述

例3 : 动态包含传参
	传参
		<jsp:include page="./index2.jsp">
		<jsp:param value="name" name="eric"/>
		</jsp:include>
	
	接参
		<%request.getParameter("name") ;%>

index2.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>EL 表达式获取数据</title>
</head>
<body>

222222
	<%request.getParameter("name") ;%>
	
</body>
</html>

NewFile.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>EL 表达式获取数据</title>
</head>
<body>
11111zz

<jsp:include page="./index2.jsp">
	<jsp:param value="name" name="eric"/>
</jsp:include>

</body>
</html>

三、JSTL标签(java标准标签库)

java standard tag libiary

扫描二维码关注公众号,回复: 9248956 查看本文章
	JSTL有五套标签库,重点的是前三套。
	
	核心标签库(c标签库)
	国际化标签库(fmt标签库)
	EL函数库(fn函数库)
	
	xml标签库(x标签库)     不重要
	sql标签库(sql标签库)	不重要  在jsp页面中,一般不会做数据的操作,数据的操作一般放在dao,所以这两个库不重要。
	

3.1 使用JSTL标签库的步骤

	使用步骤:
			  1)导入JSTL使用的jar包(标签背后隐藏中java代码)
			  			jstl-1.2.jar
			  			standard.jar
				
				(如果你使用了J2EE5.0的项目,则无需导入上述的包,因为在J2EE1.5之后,J2EE规范引入了jsp。自动包含了上述包)
			】
			  2)在jsp页面中导入标签库
					 <%@taglib uri="标签库声明文件tld文件的标记" prefix="前缀"%>
					 
			  3)使用标签库中的标签
			  		
			  		核心标签库的重点标签:		
							保存数据:
									<c:set></c:set>   
							获取数据: 
						             <c:out value=""></c:out>
							单条件判断
						            <c:if test=""></c:if>
							多条件判断
						          <c:choose></c:choose>
						    	  <c:when test=""></c:when>
						          <c:otherwise></c:otherwise>
						    循环数据
						          <c:forEach></c:forEach>
						          <c:forTokens items="" delims=""></c:forTokens>
							重定向
						          <c:redirect></c:redirect>

使用taglib指令如何导入标签库


	1.导入jstl相关库后,找到jstl.jar /META-INF/xx.tld 文件。
	
	2.在jsp页面中导入标签库
			<%@taglib uri="标签库声明文件tld文件的标记" prefix="前缀"%>
	 
	 tld文件中的 uri  指的就是 【uri="标签库声明文件tld文件的标记"】
	 tld文件中文档的short-name 指的就是 【 prefix="前缀"

在这里插入图片描述
核心标签:

	
	1.set标签:保存数据到域中
				 <c:set  var="name" value="hlp" scope="request/session/context/page(默认)"></c:set>
			
			相当于 						
				  page.setAttribute("name","hlp",PageContext.REQUEST_SCOPE); 
	
	2.out标签:输出数据到浏览器
			
			<c:out value="name"  default="默认值"></c:out> 
						输出name字符串到浏览器
		    
		    <c:out value="${msg}" default="<h3>标题3</h3>" escapeXml="true"></c:out>  
		    		    从域中获取msg的值输出到浏览器。
		    		    如果msg为null,则使用默认值。
		                escapeXml为true,表示value的值原样输出,如果为false,则转义输出。

	3.if标签:单条件判断
				
			   如果条件成立,则输出标签体中的内容到浏览器
			   <c:if test="${!empty msg}">
    				条件成立
    		    </c:if>
			 	
			 	<c:if test="${10 >5 }">
    				条件成立
    		    </c:if>
		                

	4.choose标签:多条件判断
				
			<c:choose>
			    	<c:when test="${score>=90 && score<=100}">
			    		优秀
			    	</c:when>
			    	<c:when test="${score>=60 && score<70}">
			    		及格
			    	</c:when>
			    	<c:otherwise>
			    		不及格
			    	</c:otherwise>
			 </c:choose>

	5.forEach标签:循环 
					
					begin="" : 从哪个元素开始遍历,从0开始.默认从0开始
   					end="":     到哪个元素结束。默认到最后一个元素
   					step="" : 步长    (每次加几)  ,默认1
  				    items="": 需要遍历的数据(集合) 
                    var="": 每个元素的名称 
     				varStatus="": 索引对象。(count属性:当前位置,从1开始。index属性:从0开始)
    			
    			遍历list	
					    <c:forEach begin="0" end="1" varStatus="indexObj" items="${list}" var="item" >
							 ${indexObj.index}-${item.nameT }-${item.age}<br/>
						</c:forEach>
  				
				遍历map
						 <c:forEach items="${map}" var="entry">
	    						${entry.key } - 姓名: ${entry.value.name } - 年龄:${entry.value.age }<br/>
	    				 </c:forEach>


  	 6. forToken标签:切割字符串,并进行输出
			   
				    <%
				    	String str = "java-php-net-平面";
				    	pageContext.setAttribute("str",str);
				     %>
	    
				    <c:forTokens items="${str}" delims="-" var="s">
				    	${s }<br/>
				    </c:forTokens>

	7.redirct标签:实现jsp的重定向
					<c:redirect url="http://www.baidu.com"></c:redirect>



例1:

<%@ page language="java" import="java.util.*,gz.itcast.b_entity.*" pageEncoding="utf-8"%>
<%--导入标签库 --%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head> 
    <title>核心标签库</title>  
  </head>
  
  <body>
    <%--使用标签 --%>
    <%--set标签 :保存数据(保存到域中)默认保存到page域 --%>
    <c:set var="name" value="rose" scope="request"></c:set>
    
    <%
    	String msg = null;
    	pageContext.setAttribute("msg",msg);
     %>
    
    ${msg }
    <br/>
    <%--out标签: 获取数据(从域中) 
    default: 当value值为null时,使用默认值
    escapeXml: 是否对value值进行转义,false,不转义,true,转义(默认)
    --%>
    <c:out value="${msg}" default="<h3>标题3</h3>" escapeXml="true"></c:out>
    
    <hr/>
    
    <%--if标签 :单条件判断--%>
    <c:if test="${!empty msg}">
    	条件成立
    </c:if>
    
    <hr/>
    <%--choose标签+when标签+otherwirse标签: 多条件判断 --%>
    <c:set var="score" value="56"></c:set>
    
    <c:choose>
    	<c:when test="${score>=90 && score<=100}">
    		优秀
    	</c:when>
    	<c:when test="${score>=80 && score<90}">
    		良好
    	</c:when>
    	<c:when test="${score>=70 && score<80}">
    		一般
    	</c:when>
    	<c:when test="${score>=60 && score<70}">
    		及格
    	</c:when>
    	<c:otherwise>
    		不及格
    	</c:otherwise>
    </c:choose>
    
    <%-- forEach标签:循环 --%>
    <%
    	//List
     	List<Student>  list = new ArrayList<Student>();
     	list.add(new Student("rose",18));
     	list.add(new Student("jack",28));
     	list.add(new Student("lucy",38));
     	//放入域中
     	pageContext.setAttribute("list",list);
     	
     	//Map
     	Map<String,Student> map = new HashMap<String,Student>();
     	map.put("100",new Student("mark",20));
     	map.put("101",new Student("maxwell",30));
     	map.put("102",new Student("narci",40));
     	//放入域中
     	pageContext.setAttribute("map",map);
     %>
     <hr/>
     <%--
      begin="" : 从哪个元素开始遍历,从0开始.默认从0开始
      end="":     到哪个元素结束。默认到最后一个元素
      step="" : 步长    (每次加几)  ,默认1
      items="": 需要遍历的数据(集合) 
      var="": 每个元素的名称 
      varStatus="": 当前正在遍历元素的状态对象。(count属性:当前位置,从1开始)
      
     --%>
    <c:forEach items="${list}" var="student" varStatus="varSta">
    	序号:${varSta.count} - 姓名:${student.name } - 年龄:${student.age}<br/>
    </c:forEach>
    
    <hr/>
    
    <c:forEach items="${map}" var="entry">
    	${entry.key } - 姓名: ${entry.value.name } - 年龄:${entry.value.age }<br/>
    </c:forEach>
    <hr/>
    
    <%-- forToken标签: 循环特殊字符串 --%>
    <%
    	String str = "java-php-net-平面";
    	pageContext.setAttribute("str",str);
     %>
    
    <c:forTokens items="${str}" delims="-" var="s">
    	${s }<br/>
    </c:forTokens>
    
    <%--redrict:重定向 --%>
    <c:redirect url="http://www.baidu.com"></c:redirect>
    
  </body>
</html>

例2:set标签

<%@page import="java.util.HashMap"%>
<%@page import="java.util.Map"%>
<%@page import="java.util.List"%>
<%@page import="java.util.ArrayList"%>
<%@page import="org.jsoft.hello.Student"%>
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>核心标签库</title>
</head>
<body>


<c:set value="hlp" var="name" scope="page"></c:set>
<c:set value="hlp" var="name" scope="request"></c:set>
<c:set value="hlp" var="name" scope="session"></c:set>
<c:set value="hlp" var="name" scope="application"></c:set>

${pageScope.name}
${requestScope.name}
${sessionScope.name}
${applicationScope.name}


</body>
</html>

例3:out标签

<%@page import="java.util.HashMap"%>
<%@page import="java.util.Map"%>
<%@page import="java.util.List"%>
<%@page import="java.util.ArrayList"%>
<%@page import="org.jsoft.hello.Student"%>
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>核心标签库</title>
</head>
<body>



<c:set value="hlp" var="name" scope="page"></c:set>
<c:set value="hlp" var="name" scope="request"></c:set>
<c:set value="hlp" var="name" scope="session"></c:set>
<c:set value="hlp" var="name" scope="application"></c:set>


<c:out value="${pageScope.name}"></c:out>
<c:out value="${requestScope.name}"></c:out>
<c:out value="${sessionScope.name}"></c:out>
<c:out value="${applicationScope.name}"></c:out>


</body>
</html>

例4:if标签

<%@page import="java.util.HashMap"%>
<%@page import="java.util.Map"%>
<%@page import="java.util.List"%>
<%@page import="java.util.ArrayList"%>
<%@page import="org.jsoft.hello.Student"%>
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>核心标签库</title>
</head>
<body>


<c:set value="hlp" var="name" scope="page"></c:set>
<c:set value="hlp" var="name" scope="request"></c:set>
<c:set value="hlp" var="name" scope="session"></c:set>
<c:set value="hlp" var="name" scope="application"></c:set>


<c:if test="${sessionScope.name=='hlp'}">
		我是后力

</c:if>


</body>
</html>

例5:切割字符串,并遍历输出

<%@page import="java.util.HashMap"%>
<%@page import="java.util.Map"%>
<%@page import="java.util.List"%>
<%@page import="java.util.ArrayList"%>
<%@page import="org.jsoft.hello.Student"%>
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>核心标签库</title>
</head>
<body>


<%
	session.setAttribute("str", "h-l-p");
%>


<c:forTokens items="${sessionScope.str}" delims="-" var="s">
	${s }
</c:forTokens>

</body>
</html>
发布了94 篇原创文章 · 获赞 0 · 访问量 652

猜你喜欢

转载自blog.csdn.net/weixin_45602227/article/details/104066564