OK,在Servlet篇的最后,猫哥介绍两个东西${}和<c:forEach>。
${},学名“EL表达式”,功能强大,具体负责将Servlet中request和response对象中的属性值取出来。
举个栗子:
在Servlet中有这么一句request.setAtrribute("className","二年级三班");
在网页中可以这样取值${className}
太简单了!
1
2
3
4
5
OK,当然,最常用的还是循环,借助EL表达式和<c:forEach>,就可以解决。
<c:forEach>属于JSP标准标签库(JSTL),用来遍历。
1
好的,现在举个例子,有三个文件,classStudent.html用来选择班级,ClassServlet用来处理classStudent.html提交的请求,classStudentList.jsp用来显示结果,三个文件代码如下:
<!DOCTYPE html>
<html>
<head>
<title>classStudent.html</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><!-- 本行用来设置编码 -->
</head>
<body>
<form name="mainForm" method="post" action="/ServletDemo/ClassServlet"><!-- 表单提交给ClassServlet-->
请选择要查询的班级:
<select name="class">
<!--此处注意分别对应class_info表的class_id和class_name-->
<!--实际上这三个班级信息也应该是从数据库中查出,此处为了方便演示直接写死,因为我们要演示的重点是Servlet输出数据到网页-->
<option value="1">一班</option>
<option value="2">二班</option>
<option value="3">三班</option>
</select>
<br/>
<input type="submit"></input>
</form>
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import entity.StudentInfo;
import operation.StudentOperation;
/**
* ClassServlet类
* @author 猫哥
*/
public class ClassServlet extends HttpServlet {
public ClassServlet() {
super();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");//设置输入格式
response.setContentType("text/html");
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
String classId=request.getParameter("class");//获取要查询的班级id
//此处要从数据库中查询classId对应班级的学生信息
StudentOperation stuOper=new StudentOperation();
//将班级的学生信息输出
List students=stuOper.selectByClassId(classId);
request.setAttribute("students", students);
//只能跳转本Web项目网页,可以request.setAttribute传值,看见后面request作为参数了?
request.getRequestDispatcher("/classStudentList.jsp").forward(request,response);
//跳转任何路径,无法使用request.setAttribute来传值,所以此处使用不行。
//response.sendRedirect("/classStudentList.jsp");
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><!-- 使用c:标签需要添加本行代码 -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>classStudentList.jsp</title>
</head>
<body>
该班的学生有:<br/>
<c:forEach items="${students}" var="item">
姓名:${item.studentName}
班级:${item.studentClass.className}<br/>
</c:forEach>
该班的学生有:<br/>
<table border="1">
<c:forEach items="${students}" var="item">
<tr>
<td>姓名:${item.studentName}</td>
<td>${item.studentClass.className}</td>
</c:forEach>
</table>
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
可见使用了JSP标准标签库和EL表达式后,网页代码中只剩各类标签和表达式,可以说基本实现了前后端的分离,从此JSP或HTML负责前台显示及从后台取数,Servlet负责逻辑处理及数据库查询或修改操作。各司其职。