标签学习总结

JSTL标签

JSTL(Jsp Standard Tag Library)jsp标准标签库

用JSTL标签来替换jsp页面中的java片段,这样可以使得jsp页面简洁

1. c out标签

引入标签库

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%
  		//out.println("hello.world");
  		//如果域对象中有相同的属性名,c:out的优先级是pageContext>request>session>application
  		request.setAttribute("abc","你好<a href='http://www.baidu.com'>百度</a>");
 // 		session.setAttribute("abc","你好2");
 // 		application.setAttribute("abc","你好3");
 // 		pageContext.setAttribute("abc","你好4");
 
 		//如何输出对象的值
 		User user = new User();
 		user.setName("小明");
 		user.setAge(19);
 		request.setAttribute("user1",user);
  %>
  
    <c:out value="hello,world"></c:out>
    <h1>如何输出request/session/application/pageContext</h1>
    <!-- escapeXml 用于指定是否按照html样式显示,默认为true[文本输出] false[html输出] -->
    <c:out value="${abc}" default="null值" escapeXml="false" ></c:out>
    <h1>输出对象的值</h1>
    <c:out value="${user1.name}"></c:out>||
    <c:out value="${user1.age}"></c:out>
${user1.name} @@ ${user1.age}

2. c:set标签(用的少)

<%
		//标签等价于
	//	request.setAttribute("abc","中国北京");
  %>
  <c:set var="abc" value="中国北京" scope="request" ></c:set>
  <c:out value="${abc}"></c:out>

3. c:remove标签

<%
		request.setAttribute("a","你好");
  %>
  c:remove之前
  <c:out value="${a}"></c:out>
  <!-- 如果不写scope,则删除四个域里面的变量a -->
  <c:remove var="a" scope="request"/>
  c:remove之后
  <c:out value="${a}"></c:out>

4. c:catch标签

<c:catch var="myexception">
  	<%
  		int a=8/0;
  	%>
  	</c:catch>
  	<c:out value="${myexception}"></c:out>

5. c:if标签

<%
  		request.setAttribute("a","hell3o");
  		request.setAttribute("age","54");
  		
  		//放入一个Rat对象
  		Rat rat = new Rat();
  		rat.setName("小宝");
  		rat.setAge(1);
  		request.setAttribute("rat1",rat);
  	%>
  	<h3>字符串判断</h3>
  	<c:if test="${a=='hello'}">
  	ok!
  	</c:if>
  	<c:if test="${a!='hello'}">
  	on ok
  	</c:if>
  	<h3>判断数值</h3>
  	<c:if test="${age==56}">
  	等于56
  	</c:if>
  	<c:if test="${age<56}">
  	小于56
  	</c:if>
  	<br>
  	<c:if test="${age>10 and age<99}">
  	age>10 and age<99
  	</c:if>
  	<br/>
  	<h3>判断对象的属性</h3>
  	<c:if test="${rat1.age==1}">
  	小老鼠
  	</c:if>

6. c:choose  c:when  c:otherwise

这三个标签通常一起出现

<%		
  		//放入一个Rat对象
  		Rat rat = new Rat();
  		rat.setName("小宝");
  		rat.setAge(4);
  		request.setAttribute("rat1",rat);
  	%>
  <h3>c_choose</h3>
  <c:choose>
  <c:when test="${rat1.age<2}">
  老鼠太小
  </c:when>
  <c:when test="${rat1.age>2 and rat1.age<8}">
  老鼠不大不小
  </c:when>
  <c:otherwise>
  老鼠太大
  </c:otherwise>
  </c:choose>

7. 迭代标签 c:foreach  c:forTokens

<%
		ArrayList<Rat> al = new ArrayList<Rat>();
	  	Rat rat1 = new Rat();
		rat1.setName("小宝1");
		rat1.setAge(11);
		
		Rat rat2 = new Rat();
		rat2.setName("小宝2");
		rat2.setAge(22);
		
		Rat rat3 = new Rat();
  		rat3.setName("小宝3");
  		rat3.setAge(33);
  		
  		al.add(rat1);
  		al.add(rat2);
  		al.add(rat3);
  		
  		request.setAttribute("allRats",al);
  %>
  <h3>传统方法</h3>
  <%
  	for(Rat rat : al){
  		out.println(rat.getName()+","+rat.getAge());
  	}
  %>
  <h3>迭代标签 c:forEach</h3>
  <!-- 标签会从allRats中取出一个个的Rat,然后放入rat变量中,rat变量表示取出的具体的一个对象 -->
  <c:forEach items="${allRats}" var="rat">
  <c:out value="姓名:${rat.name}"></c:out>
  <c:out value="年龄:${rat.age}"></c:out>
  <br/>
  </c:forEach>

  <h3>迭代指定次数</h3>
  <c:forEach var="i" begin="0" end="10">
  <c:out value="${i}"></c:out><br/>
  </c:forEach>
  <h3>指定迭代步长</h3>
  <c:forEach var="i" begin="0" end="10" step="2">
   <c:out value="${i}"></c:out><br/>
  </c:forEach>

8. c:forTokens

<%
  	String str ="11,234,你好,@3";
  	request.setAttribute("string",str);
  %>
  <c:forTokens items="${string}" delims="," var="t">
  <c:out value="${t}"></c:out>
  </c:forTokens>

在javascript中使用JSTL
<script type="text/javascript" language="javascript">
		function abc(){
			return window.confirm("确认删除?");
		}

		function gotoPage(){
			var inputPage = document.getElementById("inputPage").value;
			//校验pageNow范围
			if(inputPage<=0 || inputPage>${pageCount}){
				alert("页数越界");
				return false;
			}else{
				window.location.href="/UserManageSys/UsersClServlet?flag=fenye&pageNow="+inputPage;
			}
		}
</script>

9. 关于map和set的迭代

<%
	  	Rat rat1 = new Rat();
		rat1.setName("小宝1");
		rat1.setAge(11);
		
		Rat rat2 = new Rat();
		rat2.setName("小宝2");
		rat2.setAge(22);
		
  		//Map
  		Map map = new HashMap();
  		map.put("aa",rat1);
  		map.put("bb",rat2);
  		request.setAttribute("rats",map);
  		
  		//Set
  		Set set = new HashSet();
  		set.add(rat1);
  		set.add(rat2);
  		request.setAttribute("myrats",set);
  		
  		
  %>
  <h3>对map的迭代</h3>
  <c:forEach items="${rats}" var="rat">
  key=${rat.key},姓名=${rat.value.name},年龄=${rat.value.age}
  </c:forEach>
  <h3>对set的迭代</h3>
  <c:forEach items="${myrats}" var="rat">
  姓名=${rat.name},年龄=${rat.age}
  </c:forEach>

10. 使用jstl标签的if标签去判断集合是否为空

<c:if test="${empty rats}">
  没有老鼠
  </c:if>
  <c:if test="${!empty rats}">
  有老鼠
  </c:if>

11. c:redirect标签

重定向到其他url

<c:redirect url="http://www.google.ca"></c:redirect>

12:c:import标签

将其他页面引入,在引入的时候,还可以传入参数。例如,a.jsp不通过中转器servlet,直接向b.jsp用地址栏?id=10传参数,那么在b.jsp,如果不用request.getParameter,则可以用c:param传参数,在b.jsp直接用${param.id}接收参数

a.jsp:

<a href="b.jsp?id=9">超链接</a>
b.jsp:

${param.id }

Struts标签
在实际开发中,JSTL标签可以和struts标签混合使用

struts常用标签

①html标签

②bean标签

③logic标签


1. html标签

这类标签,实际上就是普通的html标签,struts设计者主要是为了和struts框架同意,对普通的html标签做了一个封装,它的本质仍然是html标签

标签学习总结_第1张图片

说明:*.tld文件叫标签描述文件(tld : tag library description)


引入struts标签库

<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>

<%--property:就是button的name --%>
<html:button property="mybutton1" value="提交" ></html:button>

<html:image>与<html:img>的区别
<html:image src="image/starFull.jpg"onclick="click1();" ></html:image>
<html:img src="image/starFull.jpg"/>

<html:image>与<html:img>的区别

<html:image src="image/starFull.jpg"onclick="click1();" ></html:image>
<html:img src="image/starFull.jpg"/>
image实际上是一个图片按钮,而img是一个纯粹的图片


struts的html标签如果涉及输入信息,struts框架认为,必须和一个表单类对应,而且应该放到一个表单标签里面<html:form>

注意:普通表单提交,要带上项目名称,而<html:form>提交不要带项目名称


在struts的html标签中,form标签是最重要的标签,它和struts框架紧密结合。form标签必须和一个ActionForm对应,当form的各个字段与ActionForm的属性匹配时,那么客户端把form提交后,struts框架将保存用户的输入到对应的ActionForm中,这样就完成了标签与组件的交互工作。

典型例子:

<%--property:就是button的name --%>
  <html:button property="mybutton1" value="提交" ></html:button>
  <html:image src="image/starFull.jpg" onclick="click1();" ></html:image>
  <html:img src="image/starFull.jpg"/><br/>
  <html:link href="http://www.sohu.com">连接到sohu</html:link><br/>
  <%--html:form --%>
  <html:form action="/login.do" method="post">
  	<html:text property="name"></html:text>
  	<html:checkbox property="fruit" value="apple">apple</html:checkbox>
  </html:form>


在使用struts的html标签时,也可以同时使用普通html标签,这并不冲突


2. bean标签的使用

<!-- 导入bean标签 -->
<%@ taglib prefix="bean" uri="http://struts.apache.org/tags-bean" %>

解释javabean的属性含义:

不能把属性理解成就是属性变量,而应该是变量对应的get/set方法

①bean:write

<%
  		request.setAttribute("abc","hello world");
  		
  		Cat cat = new Cat();
  		cat.setName("小明");
  		cat.setAge(30);
  		request.setAttribute("cat",cat);
  %>
    <h3>bean标签的使用</h3>
    <!-- bean:write用于输出信息 -->
    <bean:write name="abc"/>
    <h3>输出对象属性名</h3>
<bean:write name="cat" property="name"/><br>

②bean:message

该标签通常和资源文件配置使用可以更加方便的输出信息。输出信息在资源文件中配置ApplicationResources.properties

key1=welcome {0}
#在实际开发中,我们可以把错误号统一,在需要显示的时候,直接使用
err1 =your error is {0} and {1}

<h3>bean:message</h3>
    <bean:message key="key1" arg0="jone" />
    <bean:message key="err1" arg0="用户名为空" arg1="密码为空"/>

3. struts logic标签

<!-- 导入logic标签 -->
<%@ taglib prefix="logic" uri="http://struts.apache.org/tags-logic" %>

① logic:iterate与c:foreach很类似

<%
  		Cat cat1 = new Cat();
  		cat1.setName("aa");
  		cat1.setAge(9);
  		
  		Cat cat2 = new Cat();
  		cat2.setName("bb");
  		cat2.setAge(12);
  		
  		Cat cat3 = new Cat();
  		cat3.setName("cc");
  		cat3.setAge(16);
  		
  		List<Cat> al = new ArrayList<Cat>();
  		al.add(cat1);
  		al.add(cat2);
  		al.add(cat3);
  		
  		request.setAttribute("cats",al);
  %>
  <h3>logic标签使用</h3>
  <logic:iterate id="mycat" name="cats">
  <bean:write name="mycat" property="name" />-
  <bean:write name="mycat" property="age"/><br/>
  或者EL输出
  ${mycat.name }--
  ${mycat.age }<br/>
  </logic:iterate>

② logic:empty

<logic:empty name="ee">
  ee属性不存在<br/>
  </logic:empty>
  <logic:notEmpty name="cats">
  cats存在<br/>
  </logic:notEmpty>


③ logic:greaterthan

<logic:iterate id="mycat" name="cats">
  <logic:greaterThan name="mycat" value="20" property="age">
  <bean:write name="mycat" property="name"/>年龄大于20岁
  </logic:greaterThan>
  </logic:iterate>

这里给出一个选择使用标签的原则:

JSTL -> EL -> Struts标签


你可能感兴趣的:(标签)