JSP技术提供了三个关于JavaBean组件的动作元素,即JSP标签,它们分别为:
<jsp:useBean>标签:用于在JSP页面中查找或实例化一个JavaBean组件。
<jsp:setProperty>标签:用于在JSP页面中设置一个JavaBean组件的属性。
<jsp:getProperty>标签:用于在JSP页面中获取一个JavaBean组件的属性。
如果在域中查找到了对象,就不创建javabean的实例对象,body不被执行。
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>jsp:usebean标签的使用</title> </head> <body> <!-- userbean标签的标签体只在userbean标签实例化bean时才执行 --> <jsp:useBean id="person" class="cn.itcast.domain.Person" scope="session"> bbbb//标签体bbbb </jsp:useBean> <%=person.getName() %> </body> </html>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>jsp:setProperty标签</title> </head> <body> <jsp:useBean id="person" class="cn.itcast.domain.Person"/> <!-- 手工为bean属性赋值 --> <jsp:setProperty name="person" property="name" value="xxxx"/> <%=person.getName() %><br/> <!-- 用请求参数给bean的属性赋值 http://localhost:8080/day09/2.jsp?name=uuuuuuuuuuuuu --> <jsp:setProperty name="person" property="name" param="name"/> <!-- http://localhost:8080/day09/2.jsp?name=uuuuuuuu&age=12 --> <jsp:setProperty name="person" property="age" param="age"/> <!-- 支持8种基本数据类型的转换(把客户机提交的字符串,转成相应的8种基本类型,赋到bean的属性上) --> <!-- http://localhost:8080/day09/2.jsp?name=uuuuuuuu&age=12&birthday=1980-09-09 --> <%-- <jsp:setProperty name="person" property="birthday" value="<%=new Date() %>"/> --%> <%=person.getName() %><br/> <%=person.getAge() %><br/> <%=person.getBirthday() %><br/> <br/>----------------------------------------------------<br/> <!-- 用所有的请求参数为bean赋值 --> <jsp:setProperty name="person" property="*"/> <%=person.getName() %><br/> <%=person.getAge() %><br/> <jsp:getProperty name="person" property="name"/> <jsp:getProperty name="person" property="age"/> <jsp:getProperty name="person" property="birthday"/> </body> </html>
EL表达式用于获取数据,在JSP页面中可使用${标识符}的形式,通知JSP引擎调用pageContext.findAttribute()方法,以标识符为关键字从各个域对象中获取对象。如果域对象中不存在标识符所对应的对象,则返回结果为””(注意,不是null)。
示例:使用EL表达式获取request、session、applection域中的数据。
EL表达式中也可以使用${customerBean.address}的形式来访问JavaBean对象的属性。
示例:使用EL表达式获取Bean属性。
结合JSTL标签,EL表达式也可轻松获取各种集合中的元素。
示例:使用EL表达式获取List、Map集合中的元素。
EL表达式也可使用类如${1==1}的形式进行简单的逻辑判断。
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@page import="cn.itcast.domain.Person"%> <%@page import="cn.itcast.domain.Address"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>el表达式</title> </head> <body> <% String data = "abcd"; request.setAttribute("data",data); %> ${data } ---翻译成的servlet代码为:<%-- pageContext.findAttribute("data") page request session application--%> <br/> <% Person p = new Person(); p.setName("aaaa"); request.setAttribute("person",p); %> ${person.name } <%-- pageContext.findAttribute("person") page request session application--%> <br/> <% Person p1 = new Person(); Address a = new Address(); a.setCity("上海"); p1.setAddress(a); request.setAttribute("p1",p1); %> ${p1.address.city } <br/> <% List list = new ArrayList(); list.add(new Person("aaa")); list.add(new Person("bbb")); list.add(new Person("ccc")); request.setAttribute("list",list); %> ${list[1].name } <br/> <% Map map = new HashMap(); map.put("aa",new Person("aaaaa")); map.put("bb",new Person("bbbbb")); map.put("cc",new Person("ccccc")); map.put("dd",new Person("ddddd")); map.put("111",new Person("eeeee")); request.setAttribute("map111",map); %> ${map111.bb.name } ${map111.dd.name } ${map111['111'].name } <%--用el表达式在取数据时,通常用.号,.号取不出来时,用[] --%> <!-- 获取当前web应用的名称 --> ${pageContext.request.contextPath } <a href="${pageContext.request.contextPath }/index.jsp">点点</a> </body> </html>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@page import="cn.itcast.domain.Person"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>使用jstl+el完成集合迭代</title> </head> <body> <% List list = new ArrayList(); list.add(new Person("aaa")); list.add(new Person("bbb")); list.add(new Person("ccc")); request.setAttribute("list",list); %> <c:forEach var="person" items="${list}"> ${person.name }<br/> </c:forEach> <br/> <% Map map = new HashMap(); map.put("aa",new Person("aaaaa")); map.put("bb",new Person("bbbbb")); map.put("cc",new Person("ccccc")); map.put("dd",new Person("ddddd")); map.put("111",new Person("eeeee")); request.setAttribute("map",map); %> <c:forEach var="entry" items="${map}"> ${entry.key } : ${entry.value.name} <br/> </c:forEach> //代表用户登陆了 <c:if test="${user!=null}"> 欢迎您:${user.username } </c:if> <c:if test="${user==null}"> 用户名:<input type="text"> 密码:<input type="text"> </c:if> </body> </html>
JSTL的taglib指令中的uri怎么写:在standar.jar包下面有个META-INF目录下有个c.tld文件,使用里面的uri