Top

JAVA SERVLETJSP DAY09

  1. 访问Bean属性案例-1
  2. 访问Bean属性案例-2
  3. 使用EL表达式运算的案例
  4. 使用EL表达式获取请求参数
  5. if标签案例
  6. choose标签案例
  7. forEach标签案例
  8. 自定义标签案例
  9. 员工管理——使用EL表达式和JSTL实现JSP页面

1 访问Bean属性案例-1

1.1 问题

使用EL表达式访问Bean的各个属性。

1.2 方案

创建User类型对象,绑定在request对象中,输出基本类型的属性值以及引用类型的属性值。

1.3 步骤

步骤一:创建Course类和User类

创建Course课程类,包括课程Id和课程名称属性,分别为各属性添加get/set方法。如图-1所示。

图- 1

创建User用户类,包括姓名,年龄,课程,兴趣爱好属性。其中课程属性为引用类型,兴趣爱好为数组类型。分别为各属性添加get/set方法。如图-2所示。

图- 2

步骤二:创建el01.jsp页面

新建工程后,添加el01.jsp页面,使用小脚本创建User类型的对象。将对象绑定在request对象中,使用Java代码输出绑定的对象的各个属性。如图-3所示。

图- 3

步骤三:使用EL表达式输出属性

在el01.jsp页面中,添加EL表达式,输出姓名、年龄属性的值,输出引用类型属性课程的课程名称的值。如图-4所示。

图-4

步骤四:部署工程,查看el01.jsp页面的输出结果

部署工程,访问el01.jsp页面,结果如图-5所示。上面输出的值是使用java代码,下面输出的值使用的是EL表达式的方式。从代码角度可以看出EL表达式大大简化了JSP页面的代码形式。

图- 5

1.4 完整代码

Course.java文件代码如下:

package bean;
/**
 * 实体类:课程
 */
public class Course {
	private int courseId;
	private String courseName;
	public int getCourseId() {
		return courseId;
	}
	public void setCourseId(int courseId) {
		this.courseId = courseId;
	}
	public String getCourseName() {
		return courseName;
	}
	public void setCourseName(String courseName) {
		this.courseName = courseName;
	}	
}

User.java文件代码如下:

package bean;
/**
 * 实体类:用户
 */
publicclass User {
	private String name;
	privateint age;
	private Course course;
	private String[] interest;
	
	public String[] getInterest() {
		return interest;
	}
	publicvoid setInterest(String[] interest) {
		this.interest = interest;
	}
	public Course getCourse() {
		return course;
	}
	publicvoid setCourse(Course course) {
		this.course = course;
	}
	public String getName() {
		return name;
	}
	publicvoid setName(String name) {
		this.name = name;
	}
	publicint getAge() {
		return age;
	}
	publicvoid setAge(int age) {
		this.age = age;
	}	
}

el01.jsp文件代码如下:

<%@ page contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="bean.*" %>
<html>
	<head></head>
	<body>
	<!-- 访问Bean属性 -->
	<%
		Course course = new Course();
		course.setCourseId(1);
		course.setCourseName("Servlet");
		User u1 = new User();
		u1.setName("Luffy");
		u1.setAge(17);
		u1.setCourse(course);
		u1.setInterest
		  (new String[]{"Sleeping","Eating"});
		request.setAttribute("user",u1);
	%>
	<!-- 1.Java代码 -->
	1.Java代码<hr/>
	<%
		User u = (User)request.getAttribute("user");
		out.println(u.getName());
		out.println(u.getAge());	
	%><br/><br/>
	<!-- 2. EL表达式1 -->
	2. EL表达式1<hr/>
	<!-- 2.1  常用类型-->
	姓名:${user.name}<br>
	年龄:${user.age}<br>
	<!-- 2.2 引用类型 -->
	课程名:${user.course.courseName}<br>	<br/>	
	</body>
</html>

2 访问Bean属性案例-2

2.1 问题

使用方括号形式的EL表达式访问Bean属性。

2.2 方案

访问User对象的姓名属性,使用变量的形式来访问User对象的年龄,使用下标的形式访问爱好属性中的第二个爱好。

2.3 步骤

步骤一:新建Course类、User类

同上例中的Course、User类。

步骤二:创建User类型对象,绑定到request对象中

如图-6所示。

图- 6

步骤三:修改el01.jsp内容,使用EL表达式访问属性

在EL表达式中,使用方括号形式来访问绑定对象的属性。如图-7所示。

图– 7

可以在request对象中绑定一个属性名称,然后在EL表达式中通过这个绑定名来获取到属性名称,进而间接访问对象属性。如图-8所示。

图– 8

可以在方括号内填写下标来访问对象的数组属性中的某一个值。如图-9所示。

图- 9

步骤四:运行查看结果

图- 10

步骤五:修改el01.jsp内容,设定具体的访问范围

如图-11所示,可以设定检索对象的范围,如request对应requestScope,session对应sessionScope。

图- 11

步骤六:运行查看结果

图- 12

2.4 完整代码

el01.jsp文件代码如下:

<%@ page contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="bean.*" %>
<html>
	<head></head>
	<body>
	<!-- 访问Bean属性 -->
	<%
		Course course = new Course();
		course.setCourseId(1);
		course.setCourseName("Servlet");
		User u1 = new User();
		u1.setName("Luffy");
		u1.setAge(17);
		u1.setCourse(course);
		u1.setInterest
		  (new String[]{"Sleeping","Eating"});
		request.setAttribute("user",u1);
	%>
	<!-- 1.Java代码 -->
	1.Java代码<hr/>
	<%
		User u = (User)request.getAttribute("user");
		out.println(u.getName());
		out.println(u.getAge());	
	%><br/><br/>
	<!-- 2. EL表达式1 -->
	2. EL表达式1<hr/>
	<!-- 2.1  常用类型-->
	姓名:${user.name}<br>
	年龄:${user.age}<br>
	<!-- 2.2 引用类型 -->
	课程名:${user.course.courseName}<br>	<br/>
	
	3. EL表达式2<hr/>
	<!-- 3. EL表达式2 -->
	姓名:${user["name"]} <br>
	<%
		request.setAttribute("userAge","age");
	%>
	年龄:${user[userAge]} <br/>
	爱好:${user.interest[1]}<br><br/>
	
	4. 访问范围<hr/>
	<!-- 4. 访问范围 -->
	用户姓名:${requestScope.user.name}
	</body>
</html>

3 使用EL表达式运算的案例

3.1 问题

使用EL表达式进行算数运算、关系运算、empty运算。

3.2 方案

进行empty运算时,分别对空字符串、空集合、null进行判断。

3.3 步骤

步骤一:新建el02.jsp文件

在el02.jsp页面中使用不同的运算符进行运算,并输出结果查看。如图-13所示。

图- 13

步骤二:运行查看结果

图- 14

3.4 完整代码

el02.jsp文件代码如下:

<%@ page contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>
<html>
	<head></head>
	<body>
	<!-- 使用EL表达式进行运算 -->
	<!-- 1. 算术运算 -->
	加:${1+2}<br>
	加:${"123" + "456"}<br><hr/>
	<!-- 加号只能进行加法运算,不能连接 -->
	
	<!-- 2. 关系运算 -->
	${"123" == "123"}<br>
	${"123" eq "123" }<br>
	<% pageContext.setAttribute("str","abc"); %>
	${"abc" eq str }<br><hr/>
	
	<!-- 3. empty运算 -->
	<%
		request.setAttribute("str1","");
		List list = new ArrayList();
		request.setAttribute("list1", list);
		request.setAttribute("obj", null);
	%>
	空字符串:${empty str1}<br>
	找不到绑定名对象:${empty xxx }<br>
	集合内容为空:${empty list1 }<br>
	null的结果:${empty obj }
	</body>
</html>

4 使用EL表达式获取请求参数

4.1 问题

使用EL表达式获取请求参数的值。

4.2 方案

在地址栏中直接输入GET方式提交的多个Name-Value,使用EL表达式进行输出。

4.3 步骤

步骤一:新建el03.jsp页面

如图-15所示,使用param访问Name-Value中的Value,使用paramValues访问Name-Values中的多值。

图- 15

步骤二:在地址栏输入地址,查看输出结果

在地址栏中输入/localhost:8080/day09/el03.jsp?name=Luffy&inte

rest=Sleeping&interest=Eating 后,查看运行结果如图-16所示:

图- 16

4.4 完整代码

el03.jsp文件的代码如下:

<%@ page contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<html>
	<head>	
		<title>Insert title here</title>
	</head>
	<body>
	<!-- 获取请求参数 -->
	姓名:${param.name}<br/><hr/>
	爱好:${paramValues.interest[1]}
	爱好:${paramValues.interest[0]}
	</body>
</html>

5 if标签案例

5.1 问题

使用if标签输出员工性别。

5.2 方案

添加变量,保留与“男”进行比对的结果,从而判断是否应该输出“女”。

5.3 步骤

步骤一:新建Employee.java文件

新建具有姓名、性别的实体类bean.Employee类,添加get/set方法。如图-17所示。

图- 17

步骤二:新建jstl01.jsp页面

新建jstl01.jsp页面,添加taglib指令后,使用if标签判断绑定在request对象中的Employee对象的性别属性,并输出中文对应文本。如图-18所示。

图- 18

步骤三:运行查看结果

图- 19

5.4 完整代码

Employee.java文件代码如下:

	package bean;

public class Employee {
	private String name;
	private String gender;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getGender() {
		return gender;
	}
	public void setGender(String gender) {
		this.gender = gender;
	}	
}

jstl01.jsp文件代码如下:

<%@ page contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="bean.Employee" %>
<%@ taglib uri="/java.sun.com/jsp/jstl/core" 
	prefix="c" %>
<html>
	<head></head>
	<body>
	<%
		Employee emp = new Employee();
		emp.setName("Luffy");
		emp.setGender("m");
		request.setAttribute("emp", emp);
	%>
	if标签:<hr/>
	员工姓名:${emp.name}<br/>
	员工性别:<c:if test="${emp.gender=='m'}"
			var="rs" scope="request">男</c:if>
			<c:if test="${!rs}">女</c:if>
	</body>
</html>

6 choose标签案例

6.1 问题

使用choose标签输出Employee对象的性别属性值。

6.2 方案

通过子标签when进行判断后输出性别属性对应的中文说明。

6.3 步骤

步骤一:新建jstl02.jsp文件

引入标准标签库后,使用choose标签对绑定的对象的属性进行判断并输出对应的文字说明。如图-20。

图 - 20

步骤二:运行查看结果

图- 21

6.4 完整代码

jstl02.jsp文件代码如下:

<%@ page contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="bean.Employee" %>
<%@ taglib uri="/java.sun.com/jsp/jstl/core" 
	prefix="c"%>
<html>
	<head>	
		<title>Insert title here</title>
	</head>
	<body>
	<%
		Employee emp = new Employee();
		emp.setName("Luffy");
		emp.setGender("m");
		request.setAttribute("emp", emp);
	%>
	choose标签:<hr/>
	员工性别:
	<c:choose>
		<c:when test="${emp.gender=='m'}">男</c:when>
		<c:otherwise>女</c:otherwise>
	</c:choose>
	</body>
</html>

7 forEach标签案例

7.1 问题

使用forEach标签输出绑定的集合对象中的Employee对象的属性。

7.2 方案

使用forEach标记的var属性指定每次从集合中获取的一个对象,使用items属性指定需要遍历的集合,使用varStatus属性访问遍历集合过程中下标及记录的数目。

7.3 步骤

步骤一:新建jstl03.jsp文件

绑定具有两个元素的集合到request对象中,使用forEach标签输出对象的属性。如图-22所示。

图- 22

步骤二:运行查看结果

图- 23

步骤三:修改jstl03.jsp文件,添加varStatus属性

输出varStatus中的index和count的值。index代表对象在集合中的下标,count代表访问过的对象的个数。如图-24所示。

图- 24

步骤四:运行查看结果

图- 25

步骤五:修改jstl03.jsp文件,添加样式,使得对象值交错变色

添加s1和s2两个类样式,使用p标记进行不同对象的区域划分,通过class属性为p标记添加类样式,呈现奇偶行不同颜色的效果。如图-26所示。

图– 26

步骤六:运行查看结果

图– 27

步骤七:增加ActionServlet类

创建Employee对象的集合后绑定到request中,转发至jstl04.jsp页面进行输出。配置web.xml文件,使用后缀匹配模式进行地址映射。如图-28,图-29所示:

图 - 28

图 - 29

步骤八:修改jstl03.jsp页面,结合choose标签输出性别属性的中文说明

结合choose标签,将性别属性的“m”输出对应的“男”,“f”输出对应的“女”。如图-30所示:

图– 30

步骤九:运行查看结果

图- 31

7.4 完整代码

jstl03.jsp文件代码如下:

<%@ page contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="bean.Employee,java.util.*" %>
<%@ taglib uri="/java.sun.com/jsp/jstl/core" 
	prefix="c" %>
<html>
	<head>	
		<style type="text/css">
			.s1{ color:red;}
			.s2{ color:purple;}
		</style>
	</head>
	<body>
	<%
		Employee emp1 = new Employee();
		emp1.setName("Luffy");
		emp1.setGender("m");
		request.setAttribute("emp1", emp1);
		Employee emp2 = new Employee();
		emp2.setName("Zoro");
		emp2.setGender("m");
		request.setAttribute("emp2", emp2);
		List<Employee> emps = new ArrayList<Employee>();
		emps.add(emp1);
		emps.add(emp2);
		request.setAttribute("emps", emps);
	%>
	forEach标签1:<hr/>
	<c:forEach var="emp" items="${emps}">
		姓名:${emp.name} &nbsp;&nbsp;
		性别:${emp.gender}<br/>
	</c:forEach>
	<br/>
	forEach标签2:<hr/>
	<c:forEach var="emp" items="${emps}" varStatus="s">
		<p class="s${s.index%2+1}">
		姓名:${emp.name} &nbsp;&nbsp;
		性别:${emp.gender}&nbsp;&nbsp;
		count:${s.count}&nbsp;&nbsp;
		index:${s.index}
		</p>
	</c:forEach>
	</body>
</html>

ActionServlet.java文件代码如下:

package web;

import java.io.IOException;
import java.io.PrintWriter;
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.Employee;

public class ActionServlet extends HttpServlet {

	public void service(HttpServletRequest request, 
			HttpServletResponse response)
			throws ServletException, IOException {
		response.setContentType("text/html;charset=UTF-8");
		String uri = request.getRequestURI();
		String path = uri.substring
				(uri.lastIndexOf("/") + 1, 
				 uri.lastIndexOf("."));
		//判断路径
		if (path.equals("list")) {			
			List<Employee> emps = new ArrayList<Employee>();
			Employee e1 = new Employee();
			e1.setName("Luffy");
			e1.setGender("m");
			emps.add(e1);
			Employee e2 = new Employee();
			e2.setName("Zoro");
			e2.setGender("m");
			emps.add(e2);
			//绑定集合到request
			request.setAttribute("emps", emps);
			request.getRequestDispatcher("jstl04.jsp")
			       .forward(request,response);
		}
	}
}

web.xml文件代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="/java.sun.com/xml/ns/javaee" 
	xmlns:xsi="/www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="/java.sun.com/xml/ns/javaee 
	/java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name></display-name>
<servlet>
<servlet-name>ActionServlet</servlet-name>
<servlet-class>web.ActionServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ActionServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>

jstl04.jsp文件代码如下:

<%@ page contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="/java.sun.com/jsp/jstl/core" 
			prefix="c" %>
<html>
	<head>	
		<style type="text/css">
			.s1{color:red;}
			.s2{color:purple}
		</style>
	</head>
	<body>
	员工信息列表:<hr/>
	<c:forEach var="emp" items="${emps}"
			  varStatus="s">
		<p class="s${s.index%2+1}">
			姓名:${emp.name}&nbsp;&nbsp;
			性别:
			<c:choose>
				<c:when test="${emp.gender=='m'}">男</c:when>
				<c:when test="${emp.gender=='f'}">女</c:when>
				<c:otherwise>未知</c:otherwise>
			</c:choose>
			<br/>
		</p>
	</c:forEach>
	</body>
</html>

补充标签案例

URL标签:

步骤一:新建jstl05.jsp

使用URL标签生成的地址,在禁用Cookie的情况下,系统会自动在链接上添加JSESSIONID,以保证能够访问session对象。如图-32所示:

图- 32

步骤二:新建jstl06.jsp

在jstl06.jsp文件中读取session中绑定的uname的值,并输出。如图-33所示:

图– 33

步骤三:禁用Cookie后,查看点击链接后生成的地址

图– 34

完整代码:

jstl05.jsp文件代码如下::

<%@ page contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" 
	uri="/java.sun.com/jsp/jstl/core"%>
<html>
	<head></head>
	<body>
	<%session.setAttribute("uname", "Luffy");%>
	URL标签:<hr/>
	<a href="<c:url value='/jstl06.jsp' />">访问jstl06</a>
	</body>
</html>

jstl06.jsp文件代码如下:

<%@ page contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<html>
	<head>	
		<title>Insert title here</title>
	</head>
	<body>
	session中的uname为:${sessionScope.uname}
	</body>
</html>

set和remove标签:

步骤一:新建jstl07.jsp页面

图– 35

步骤二:运行查看结果

图– 36

完整代码:

jstl07.jsp文件代码如下:

<%@ page contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" 
	uri="/java.sun.com/jsp/jstl/core" %>
<html>
	<head>	
		<title>Insert title here</title>
	</head>
	<body>
	set和remove标记:<hr/>
	<c:set var="num" scope="session" value="${1+1}"/>
	set之后: num=${sessionScope.num}<br/>
	<c:remove var="num" scope="session"/>
	remove之后:num=${sessionScope.num}
	</body>
</html>

catch标签:

步骤一:新建jstl08.jsp

图 - 37

步骤二:访问查看结果

图– 38

完整代码:

jstl08.jsp文件代码如下:

<%@ page contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="/java.sun.com/jsp/jstl/core" %>
<html>
	<head>	
		<title>Insert title here</title>
	</head>
	<body>
	catch标记:<hr/>
	<c:catch var="msg">
		<%
			Integer.parseInt("123a");
		%>
	</c:catch>
	${msg}
	</body>
</html>

import标记:

步骤一:新建jstl09.jsp

在jstl09.jsp页面中使用import标记将另一个页面嵌入到当前页面中,为了区分,使用加了样式的div来标示jstl10.jsp页面的边界。如图-39所示:

图- 39

步骤二:新建jstl10.jsp

图- 40

步骤三:运行查看结果

图– 41

完整代码:

jstl09.jsp文件代码如下:

<%@ page contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="/java.sun.com/jsp/jstl/core" %>
<html>
	<head>	
		<title>Insert title here</title>
	</head>
	<body>
	This is jstl09...<hr/>
	<div style="border:solid 1px red">
		<c:import url="jstl10.jsp"/>
	</div>
	This is jstl09...
	</body>
</html>

jstl10.jsp文件代码如下:

<%@ page contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<html>
	<head>	
		<title>Insert title here</title>
	</head>
	<body>
	This is jstl10 page ...
	</body>
</html>

redirect标签:

步骤一:新建jstl11.jsp文件

图- 42

步骤二:新建jstl12.jsp文件

图- 43

步骤三:查看运行结果

在地址栏输入/localhost:8080/day09/jstl11.jsp后回车,会重定向到jstl12.jsp页面上。如图-44所示:

图- 44

步骤四:禁用Cookie后查看运行结果

图- 45

完整代码:

jstl11.jsp文件代码:

<%@ page contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" 
	uri="/java.sun.com/jsp/jstl/core" %>
<html>
	<head>	
		<title>Insert title here</title>
	</head>
	<body>
	<c:set var="num" scope="session" 
		   value="${1+1}"/>
	<c:redirect url="jstl12.jsp"/>
	</body>
</html>

jstl12.java文件代码:

<%@ page contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<html>
	<head>	
		<title>Insert title here</title>
	</head>
	<body>
	num的值:${sessionScope.num}
	</body>
</html>

out标签:

步骤一:新建jstl13.jsp页面

图- 46

步骤二:查看运行结果

图– 47

完整代码:

jstl13.jsp文件代码如下:

<%@ page contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" 
	uri="/java.sun.com/jsp/jstl/core" %>
<html>
	<head>	
		<title>Insert title here</title>
	</head>
	<body>	
	<!-- 写法1 -->
	<c:out value="${1+1}"/>	<br/>
	等价于	
	<!-- 写法2 -->
	${1+1}<br/>
	
	<!-- 输出变量 -->
	num:<c:out value="${num}" default="123"/><br/>
	
	<!-- 转译序列 -->
	&lt;table&gt;<br/>
	<c:out value="<table>" escapeXml="false"/>
	</body>
</html>

8 自定义标签案例

8.1 问题

使用自定义的标签,在JSP页面中输出10次Hello Goddess。

8.2 方案

自定义标签具备两个属性,一个用于设定要输出的内容,一个用于设定输出的次数。在自定义标签类中定义两个属性接收页面中设定的数据,获取页面对象中的输出对象,输出内容。

8.3 步骤

步骤一:新建mytag.HelloTag类,继承SimpleTagSupport类

新建HelloTag类,继承自SimpleTagSupport类,为了接收页面中指定的参数,需要定义两个属性,并添加get/set方法。注意:属性名称一定与使用标签时,暴露的属性名称一致。重写doTag方法,将标签要执行的动作在该方法中进行定义。如图-48所示。

图- 48

步骤二:新建mtag.tld文件

在WEB-INF目录下,新建mtag.tld文件,内容可以参考标准标签库中的c.tld文件的内容。c.tld文件的目录如图-49所示。

图 – 49

在mtag.tld文件中,设定一对儿tag标记即可。如图-50所示。

图– 50

步骤三:新建myTag.jsp文件

图- 51

步骤四:运行,查看结果

图- 52

8.4 完整代码

mytag.HelloTag.java文件代码如下:

package mytag;

import java.io.IOException;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.SimpleTagSupport;

public class HelloTag extends SimpleTagSupport {
	private String str;
	private int count;	
	@Override
	public void doTag() throws JspException, IOException {
		PageContext ctx=(PageContext)getJspContext();
		JspWriter out = ctx.getOut();
		for(int i=0;i<count;i++){
			out.println(str+"<br/>");
		}
	}	
	public String getStr() {
		return str;
	}
	public void setStr(String str) {
		this.str = str;
	}
	public int getCount() {
		return count;
	}
	public void setCount(int count) {
		this.count = count;
	}	
}

mtag.tld文件代码如下:

<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="/java.sun.com/xml/ns/javaee"
    xmlns:xsi="/www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="/java.sun.com/xml/ns/javaee
    /java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
    version="2.1">
<tlib-version>1.1</tlib-version>
<short-name>c3</short-name>
<uri>/www.tarena.com.cn/mytag</uri>
<tag>
<description>根据指定的次数打印文本</description>
<name>pt</name>
<tag-class>mytag.HelloTag</tag-class>
<body-content>empty</body-content>
<attribute>
<description>Content</description>
<name>str</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
<attribute>
<description>Count</description>
<name>count</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
</tag>
</taglib>

myTag.jsp文件的代码如下:

<%@ page contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="/www.tarena.com.cn/mytag"
		   prefix="c3" %>
<html>
	<head>	
		<title>Insert title here</title>
	</head>
	<body>ac
	<c3:pt count="10" str="Hello Goddess"/>
	</body>
</html>

9 员工管理——使用EL表达式和JSTL实现JSP页面

9.1 问题

使用El表达式和JSTL改写员工管理的增删改查功能。

9.2 方案

entity、dao、web包下面的类不用修改,参考前面案例拷贝。web.xml文件无需修改,参考前面案例拷贝。updateEmp.jsp页面、listEmp.jsp、error.jsp页面中的Java代码由EL表达式和JSTL进行替换。addEmp.jsp页面中无Java代码,无需修改,参考前面案例拷贝即可。

9.3 步骤

步骤一:参考前面案例中的代码,构建如下结构的Web项目

图- 53

步骤二:修改listEmp.jsp文件

删除listEmp.jsp中的小脚本,替换为JSTL,如图-54所示。

图– 54

步骤三:修改uploadEmp.jsp文件

删除uploadEmp.jsp文件中的小脚本,替换为JSTL的。如图-55所示。

图- 55

步骤四:修改error.jsp页面

图- 56

9.4 完整代码

listEmp.jsp文件代码如下:

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="entity.*,java.util.*"%>
<%@ taglib prefix="c" uri="/java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>员工列表</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="css/style.css" />
</head>
<body>
	<div id="wrap">
		<div id="top_content">
			<div id="header">
				<div id="rightheader">
					<p>
						2009/11/20 <br />
					</p>
				</div>
				<div id="topheader">
					<h1 id="title">
						<a href="#">main</a>
					</h1>
				</div>
				<div id="navigation"></div>
			</div>
			<div id="content">
				<p id="whereami"></p>
				<h1>员工信息</h1>
				<table class="table">
					<tr class="table_header">
						<td>编号</td>
						<td>姓名</td>
						<td>薪水</td>
						<td>年龄</td>
						<td>操作</td>
					</tr>
					<c:forEach var="emp" items="${emps}" varStatus="s">
						<tr class="row${s.index%2+1}">
							<td>${emp.id}</td>
							<td>${emp.name}</td>
							<td>${emp.salary}</td>
							<td>${emp.age}</td>
							<td>
								<a href="delete.do?id=${emp.id}" 
								onclick="return confirm('是否确认删除${emp.name}信息?');">删除</a>&nbsp;
								<a href="load.do?id=${emp.id}">修改</a>
							</td>
						</tr>					
					</c:forEach>
				</table>
				<p>
					<input type="button" class="button" value="增加员工"
						onclick="location='addEmp.jsp'" />
				</p>
			</div>
		</div>
		<div id="footer">
			<div id="footer_bg">ABC@126.com</div>
		</div>
	</div>
</body>
</html>

uploadEmp.jsp文件代码如下:

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="entity.*" %>
<%@ taglib prefix="c" uri="/java.sun.com/jsp/jstl/core" %>
<html>
	<head>
		<title>修改员工信息</title>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<link rel="stylesheet" type="text/css" href="css/style.css" />
	</head>

	<body>
			<div id="wrap">
			<div id="top_content">
					<div id="header">
						<div id="rightheader">
							<p>
								2009/11/20
								<br />
							</p>
						</div>
						<div id="topheader">
							<h1 id="title">
								<a href="#">Main</a>
							</h1>
						</div>
						<div id="navigation">
						</div>
					</div>
				<div id="content">
					<p id="whereami">
					</p>
					<h1>
						更新员工
					</h1>
					<form action="update.do?id=${emp.id}" method="post">
						<table cellpadding="0" cellspacing="0" border="0"
							class="form_table">
							<tr>
								<td valign="middle" align="right">
									编号:
								</td>
								<td valign="middle" align="left">
									${emp.id}
								</td>
							</tr>
							<tr>
								<td valign="middle" align="right">
									姓名:
								</td>
								<td valign="middle" align="left">
									<input type="text" class="inputgri" 
									name="name" value="${emp.name}"/>
								</td>
							</tr>
							<tr>
								<td valign="middle" align="right">
									薪水:
								</td>
								<td valign="middle" align="left">
									<input type="text" class="inputgri" 
									name="salary" value="${emp.salary}"/>
								</td>
							</tr>
							<tr>
								<td valign="middle" align="right">
									年龄:
								</td>
								<td valign="middle" align="left">
									<input type="text" class="inputgri" 
									name="age" value="${emp.age}"/>
								</td>
							</tr>
						</table>
						<p>
							<input type="submit" class="button" value="修改" />
						</p>
					</form>
				</div>
			</div>
			<div id="footer">
				<div id="footer_bg">
					ABC@126.com
				</div>
			</div>
		</div>
	</body>
</html>

error.jsp文件的代码如下:

<%@ page contentType="text/html; charset=UTF-8" 
	pageEncoding="UTF-8"%>
<%@ taglib prefix="c" 
	uri="/java.sun.com/jsp/jstl/core" %>
<html>
	<head>	
		<title>错误提醒</title>
	</head>
	<body style="font-size:24px">
	
	<c:if test="${err_msg==null}" var="msg" 
				scope="request"></c:if>
	<c:if test="${!msg}">${err_msg}</c:if>
	
	系统异常	<a href="list.do">返回</a>
	</body>
</html>