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标签
说明:*.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"οnclick="click1();" ></html:image>
<html:img src="image/starFull.jpg"/>
<html:image>与<html:img>的区别
<html:image src="image/starFull.jpg"οnclick="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" οnclick="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>
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: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标签