1. jsp标签和el表达式
(1)jsp标签是什么?
jsp标签是sun制订的一种用来代替jsp中java代码的
技术规范,语法类似于html标签(有开始标记和结束标记,有属性)。
注:
因为直接在jsp文件中写java代码,不利于
jsp文件的维护(比如,将包含有java代码的jsp文件交给美工去修改就很不方便),所以,sun才制订了
jsp标签技术规范。
使用jsp标签的好处:
a.方便美工去修改。
b.jsp文件变得更简洁,而且可以实现代码的重用。
(2)el表达式是什么?
是一套简单的运算规则,用来给jsp标签的属性
赋值。
注: el表达式也可以脱离jsp标签,直接使用。
(3)el表达式的使用
1)读取bean的属性 (e1.jsp,e2.jsp)
注:
如果一个类满足如下几个条件,就可以称之为
一个javabean:
public class
public 构造器
有一些属性及对应的get/set方法
实现Serializable接口
a.方式一
${user.username}
注:
a1. 执行流程: 容器依次从pageContext,
request,session,application中查找
绑订名为"user"的对象,找到了,则调用
该对象的"getUsername"方法,然后输出。
a2. 优点:
跟直接写java代码相比,更简洁。
会将null转换成""输出。
如果找不到对应的对象,不会报空指针
异常。
a3.如果要指定查找范围,可以使用
pageScope,requestScope,
sessionScope,applicationScope
来指定。
b.方式二
${user['username']}
b1.等价于 ${user.username}。
b2.[]里面,可以使用绑订名。
b3.[]里面,可以使用从0开始的下标
,用于访问数组中的某个元素。
2)做一些简单的运算。 (e3.jsp)
a.算术运算: +,-,*,/,%
注: + 只能求和!
b.关系运算: >,>=,<,<=,==,!=
c.逻辑运算: &&,||,!
d.empty运算: empty
3)读取请求参数值 (e4.jsp)
${param.name} 等价于
request.getParameter("name");
${paramValues.interest} 等价于
request.getParameterValues("interest");
(4) jstl (java standard tag lib)
1) 什么是jstl?
apache开发的一套jsp标签,后来捐献给了sun,
sun将其命名为jstl(java标准标签库)。
2) 编程步骤
step1.将jstl相关的jar文件放到lib文件夹下。
step2.使用taglib指令引入要使用的jsp标签。
<%@ taglib uri="" prefix=""%>
uri属性:指定标签的命名空间。
prefix属性:命名空间的别名。
注:
命名空间:为了区分同名的元素而在元素前添加
的一个限定,通常是一个域名。
3)核心标签
a. if标签 (c1.jsp)
<c:if test="" var="" scope="">
标签体
</c:if>
注:
a1. test属性值如果是true,容器会
执行标签体的内容。
a2. test属性可以使用el表达式来赋值。
a3. var属性用来指定绑订名。
a4. scope属性指定绑订的范围。
b. choose标签 (c2.jsp)
<c:choose>
<c:when test="">
</c:when>
<c:otherwise>
</c:otherwise>
</c:choose>
注:
b1. when可以出现1次或者多次,当test
属性值为true时,执行标签体的内容。
b2. otherwise可以出现0次或者1次,用来
处理例外。
c. forEach标签 (c3.jsp)
<c:forEach items="" var="" varStatus="">
</c:forEach>
c1. items属性用来指定要遍历的集合或者
数组。可以使用el表达式来赋值。
c2. var属性用来指定绑订名。
注: 该标签每一次从集合或者数组中取一个
元素,然后将该元素绑订到pageContext
上,var属性用来指定绑订名。
c3. varStatus属性用来指定绑订名。
注: 绑订范围是pageContext,绑订值是一个
对象,该对象提供了几个方法,用于获得
当前遍历的状态:
getIndex():获得当前正在被遍历的元素的下标(从0开始)。
getCount():获得当前正在被遍历的元素的序号(从1开始)。
4)标签的执行流程(了解)
容器依据命名空间找到标签的描述文件(.tld文件),
接下来,依据标签的名称找到对应的标签类,然后
将标签类实例化并执行该实例的相应方法。
练习: Employee类 String ename double salary int age 使用el表达式输出某个员工的各项属性值。
在webapp文件文夹下面建jsp文件;
c1.jsp
<%@ page contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core"
prefix="c" %>
<html>
<head>
</head>
<body style="font-size:30px;">
性别:
<c:if test="${user.gender == 'm'}">男</c:if>
<br/>
性别:
<c:if test="${user.gender == 'm'}">男</c:if>
<c:if test="${user.gender != 'm'}">女</c:if>
性别:
<c:if test="${user.gender == 'm'}"
var="rs" scope="page">男</c:if>
<c:if test="${!rs}">女</c:if>
</body>
</html>
c2.jsp
<%@ page contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core"
prefix="c" %>
<html>
<head>
</head>
<body style="font-size:30px;">
性别: <c:choose>
<c:when test="${user.gender == 'm'}">男</c:when>
<c:when test="${user.gender == 'f'}">女</c:when>
<c:otherwise>保密</c:otherwise>
</c:choose>
</body>
</html>
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>
<style>
.row1{
background-color:#fff8dc;
}
.row2{
background-color:#f0f0f0;
}
</style>
</head>
<body style="font-size:30px;">
<table width="60%" border="1"
cellpadding="0" cellspacing="0">
<tr>
<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>${u.username}</td>
<td>${u.gender}</td>
<td>${s.index}</td>
<td>${s.count}</td>
</tr>
</c:forEach>
</table>
</body>
</html>
下面是el表达式:
e1.jsp
<%@ page contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ page import="bean.*" %>
<html>
<head>
</head>
<body style="font-size:30px;">
<%
User user =
(User)request.getAttribute("user");
%>
用户名:<%=user.getUsername()%>
</body>
</html>
e2.jsp
<%@ page contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<html>
<head>
</head>
<body style="font-size:30px;">
用户名:${user.username}<br/>
用户名:(指定从session对象中查找):
${sessionScope.user.username}<br/>
用户名:${user['username']} <br/>
用户名:${user[s1]}<br/>
爱好:${user.interest[0]}
</body>
</html>
e3.jsp
<%@ page contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ page import="java.util.*" %>
<html>
<head>
</head>
<body style="font-size:30px;">
算术运算:<br/>
1 + 1 = ${1 + 1} <br/>
"2" + "3" = ${"2" + "3"} <br/>
关系运算:<br/>
1 > 2 ${1 > 2} <br/>
<%
request.setAttribute("str", "abc");
%>
${str == "abc"} <br/>
${sessionScope.str == "abc"}<br/>
逻辑运算:<br/>
${1 < 2 && 2 > 3}
empty运算:<br/>
<%
List list = new ArrayList();
request.setAttribute("list", list);
request.setAttribute("str2", "");
%>
空的集合: ${empty list}<br/>
空字符串: ${empty str2}<br/>
值为null: ${empty null}<br/>
找不到对应的值: ${empty abc}
</body>
</html>
e4.jsp
<%@ page contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<html>
<head>
</head>
<body style="font-size:30px;">
${param.name}<br/>
${paramValues.interest[1]}
</body>
</html>
下面在java文件里面写:
user.java
package bean;
public class User {
private String username;
private int age;
private String[] interest;
private String gender;
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getUsername() {
return username;
}
public String[] getInterest() {
return interest;
}
public void setInterest(String[] interest) {
this.interest = interest;
}
public void setUsername(String username) {
this.username = username;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
在建的servet里面:
SomeServlet.java
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 SomeServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
User user = new User();
user.setUsername("小白");
user.setAge(22);
user.setInterest(
new String[]{"钓鱼","台球"});
user.setGender("f");
request.setAttribute("user", user);
User user2 = new User();
user2.setUsername("小黄");
user2.setAge(32);
request.getSession().setAttribute(
"user", user2);
request.setAttribute("s1", "age");
List<User> users =
new ArrayList<User>();
for(int i = 0; i < 8; i ++){
User u = new User();
u.setUsername("用户" + i);
u.setGender("m");
users.add(u);
}
request.setAttribute("users", users);
request.getRequestDispatcher("c3.jsp")
.forward(request, response);
}
}