JSP Standard Tag Library 标准标签库:
Model 1 开发模式采用jsp 内嵌java 代码的方式实现业务逻辑与前台页面的交互,这样虽然使得前台调用业务简单,却也导致jsp多重职责,在系统庞大的项目中,难以继续应用。Model 2则在业务逻辑manager与jsp间创建一层servlet,作为业务层与jsp显示层的桥梁,将jsp中大部分获值的java代码写到servlet中,以减轻jsp负担;但这样做也不可避免的需要在jsp中写入形似<%=user.getName() %>这样的代码获值。
JSTL标签库的使用便可彻底代替上述java代码,以类似于html标签的形式,结合EL表达式,获取数据。
使用EL表达式时无需引入任何jar包,只要jsp/servlet容器实现了J2EE1.4 、Servlet2.4、JSP2.0规范即可。
Servlet中doGet方法如下,分别用EL表达式获取servlet传递的不同类型数值:
//结构
Group group =new Group();
group.setName("动力节点");
User user =new User();
user.setAge(23);
user.setGroup(group);
user.setUserName("zhang");
//map
Map map=new HashMap();
map.put("k1","v1");
map.put("k2", "v2");
request.setAttribute("map", map);
request.setAttribute("user",user);
//数组
String[] strArray=new String[]{"a","b","c"};
request.setAttribute("straary", strArray);
//对象数组
User[] users=new User[10];
for(int i=0;i
EL获取字符串:
hello(普通jsp脚本获值):<%=request.getAttribute("hello")%>
hello(el表达式获值): ${hello}
EL获取对象:【对象.属性(get方法后的串,拼成get方法)】
结构 .进行导航 存取器
姓名:${user.userName}
年龄:${user.age}
所属组:${user.group.name}
EL获取map:
map
map.k1:${map.k1 }
map.k2:${map.k2 }
EL获取字符串数组:
字符串数组
strArray[1]:${strarry[1] }
strArray[4]:${strarry[4] }
EL获取对象数组:
对象数组
users[5].username:${users[5].username}
EL获取List集合:
list.采用[].下标
userList[6].username:${userList[6].username}
EL表达式对运算符的支持:
1+1=${1+1 }
1/1=${1/1 }
10 % 2=${10 % 2 }
常用的jstl标签及其使用:
使用JSTL标签不同于EL表达式可直接使用即可,JSTL使用前需将jstl.jar 和standard.jar拷贝到WEN-INF/lib包下,重启tomcat后,在相应的jsp页面采用taglib指令,引入标签库方可。
<%@taglib uri=" http://java.sun.com/jsp/jstl/core"prefix="c"%>
JSTL标签结合EL表达式的使用:
对应servlet中doGet方法:
//普通字符串
request.setAttribute("hello", "helloWorld");
//HTML字符串
request.setAttribute("hello","北京欢迎您!" );
//条件控制 c:if
request.setAttribute("v1","10");
request.setAttribute("v2","2");
//条件控制 c:choose c:when c:otherwise
request.setAttribute("userList", new ArrayList());
//循环标签 c:foreach
Group group=new Group();
group.setName("动力节点");
List userrs=new ArrayList();
for(int i=0; i<10;i++)
{
User userr=new User();
userr.setUserName("zhang"+i);
userr.setAge(23+i);
userr.setGroup(group);
userrs.add(userr);
}
request.setAttribute("userrs",userrs);
request.getRequestDispatcher("/jsp_el.jsp").forward(request, resp);
简单输出:c:out
采用c:out标签
hello使用标签:
hello使用标签:
hello使用标签:没有值
hello使用标签:
c:set c:remove
c:set c:remove
userid:${userid}
userid:${userid}
逻辑判断标签: c:if \c:choose c:when c:otherwise
条件控制标签 c:if
v1小于v2
c:choose c:when c:otherwise
v1 大于 v2
v1 小于 v2
没有满足条件的用户
存在用户数据
循环标签: c:foreach
jsp脚本显示
用户名
年龄
所属组
<%
ListuserList=(List)request.getAttribute("userrs");
if(userList ==null || userList.size()==0){
%>
没有符合条件的数据
<%
}else{
for(Iteratoriter=userList.iterator();iter.hasNext())
{
Useruser=(User)iter.next();
}
}
%>
<%=user.getUserName()%>
<%=user.getAge()%>
<%=user.getGrop()%>
循环标签 c:foreach
用户名
年龄
所属组
没有符合条件的用户
${users.userName}
${user.age}
${user.group}
纠错标签:c:catch
普通java
<%
try{
Integer.parseInt("dfadf");
}catch(NumberFormatException e){
e.printStackTrace();
}
%>
c:catch
<%Integer.parseInt("dfadf"); %>
${msg }
界面引入传参:
c:import 引入某jsp页面
c:url c:param