概念:
1 . JSP 标签 是用来替换java代码的技术,容器遇到标签后会将其转换成java代码,jsp标签类似于开始标记、属性、结束标记、标签体。
- EL表达式是一套简单的运算规则,用于给jsp标签的属性赋值,也可以脱离jsp标签直接使用。
- EL表示用法
1)访问bean属性
第一种方式:
语法 ${user.username}
执行过程: 从某些指定范围内查找绑定名为"user"的对象,如果找到了,则调用“getUsername”方法然后输出。
第二种方式:
语法 ${user['username']}
说明: 有两种特殊用法,允许[]里面出现绑定名,允许里面出现从0开始的下标,如访问某个元素。
2)做一些运算(算术、关系运算、逻辑运算)
注:运算结果可以给jsp标签的属性赋值,也可以直接输出。
eg:
C2.jsp <%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ page import="bean.*" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <html> <head> <title>Insert title here</title> </head> <body style="font-size:30px;"> <% User user = new User(); user.setUname("张飞"); user.setGender("x"); user.setAge(22); request.setAttribute("user", user); %> 性别: <c:choose> <c:when test="${user.gender == 'm'}">男</c:when> <c:when test="${user.gender == 'f'}">女</c:when> <c:otherwise>保密</c:otherwise> </c:choose> 年龄: <c:choose> <c:when test="${user.age < 18 }">未成年</c:when> <c:when test="${user.age > 65 }">老年</c:when> <c:otherwise>成年</c:otherwise> </c:choose> </body> </html>
package bean; public class User { private String uname; private String gender; private int age; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getUname() { return uname; } public void setUname(String uname) { this.uname = uname; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } }
package web; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import bean.User; public class ListUserServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void service( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { List<User> users = new ArrayList<User>(); for(int i = 0; i < 8; i ++){ User user = new User(); user.setUname("用户" + i); user.setGender("m"); user.setAge(22 + i); users.add(user); } request.setAttribute("users", users); request.getRequestDispatcher("c3.jsp").forward(request, response); } }
package web; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import bean.User; public class ListUserServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void service( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { List<User> users = new ArrayList<User>(); for(int i = 0; i < 8; i ++){ User user = new User(); user.setUname("用户" + i); user.setGender("m"); user.setAge(22 + i); users.add(user); } request.setAttribute("users", users); request.getRequestDispatcher("c3.jsp").forward(request, response); } } </body> </html>
- jstl标签: jsp标签的一种。
使用:
Step1:导入jstl.jar
Step2: 用taglib指令导入要使用的jsp标签
<% taglib uri="jsp标签的命名空间" prefix="指定命名空间的别名,前缀"%>
核心标签:
if标签:类似于java中if语句
<c: if test="">
标签体
</c:if>
当test属性为true,执行标签体内容,test属性也可以用el表达式赋值。
choose标签:类似于java中switch…case语句
<c:choose>
<c:when
test="">
</c:when>
...
<c:otherwise>
</c:otherwise>
</c:choose>
forEach标签
<c:forEach items="要遍历的集合或者数组,可用el表达式赋值" var="绑订名" varStatus="绑订名">
</c:forEach>
注:
绑订范围固定是pageContext。该标签每次从集合或者数组中
取一个元素,然后绑订到pageContext上。
注:
绑订值是一个对象,由该标签创建。该对象提供了几个方法,
用于获得当前遍历的状态:
getCount(): 获得当前是第几次迭代(从1开始)。
getIndex(): 获得当前正在被迭代的元素的下标(从0开始)。
C3.jsp
<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <html> <head> <title>Insert title here</title> <style type="text/css"> .row1{ background-color:#fff8dc; } .row2{ background-color:#f0f0f0; } </style> </head> <body style="font-size:30px;"> <table border="1" width="60%" cellpadding="0" cellspacing="0"> <tr> <td>序号</td> <td>下标</td> <td>用户名</td> <td>性别</td> <td>年龄</td> </tr> <c:forEach items="${users}" var="u" varStatus="s"> <tr class="row${s.index % 2 + 1}"> <td>${s.count}</td> <td>${s.index}</td> <td>${u.uname}</td> <td>${u.gender}</td> <td>${u.age}</td> </tr> </c:forEach> </table> </body> </html>
jsp标签如何执行?
容器依据标签的命名空间找到对应的描述文件(.tld文件),
接下来,依据标签名找到对应的标签类,然后将该标签类实例化
并调用相应的方法。(从描述文件到标签名,再到标签类,并将其实例化,并调用对应方法 也应该使用反射实现的)