JSP 的内置对象和案例
# 95.JSP 的内置对象和案例
什么是 JSP 的内置对象:在 JSP 页面中不需要获取和创建,可以直接使用的对象
# JSP 的内置对象
JSP 一共有 9 个内置对象。
先介绍 3 个:
- request
- response
- out
其中 request 和 response 我们之前学过的,就不再介绍了;这里讲讲 out。out 可以理解为是一个字符输出流对象。可以将数据输出到页面上。和 response.getWriter()
类似。
response.getWriter()
和 out.write()
的区别:在 Tomcat 服务器真正给客户端做出响应之前,会先找 response 缓冲区数据,再找 out 缓冲区数据。所以 response.getWriter()
数据输出永远在 out.write()
之前,我们可以写个代码验证下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>首页</title>
</head>
<body>
<h1>Hello JSP!</h1>
<% System.out.println("Hello"); %>
<%! int i = 1; %>
<%= "hello".toUpperCase() %>
<% out.print("hell out"); %>
<% response.getWriter().write("hello, response"); %>
</body>
</html>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
可以看到第 14 行 out 对象输出了字符串,然后下面第 16 行 response.getWriter()
也输出了字符串,但是页面上先显示的是 response.getWriter()
的内容:
知道这个区别就可以,我们一般都是用 out 对象,不会两者混用
# JSP 改造 Cookie 案例
我们使用 JSP 来改造我们之前学习 Cookie 的时候,用 Cookie 记住上次访问时间的案例。我们可以将之前代码,直接粘贴到 JSP 的代码中。
然后改造下代码,例如将 response.getWriter()
改为 out,另外由于已经设置了编码,可以去掉 Java 代码中设置编码的部分 resp.setContentType("text/html;charset=utf-8");
<%@ page import="java.util.Date" %>
<%@ page import="java.text.SimpleDateFormat" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>PeterJXL</title>
</head>
<body>
<%
boolean flag = false; //是否有lastTime的Cookie
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日HH:mm:ss");
String str_date = sdf.format(date);
Cookie[] cs = request.getCookies();
// 遍历Cookie
if (cs != null) {
for (Cookie c : cs) {
if (c.getName().equals("lastTime")) {
flag = true;
out.write("欢迎回来,您上次访问时间为: " + c.getValue());
c.setValue(str_date);
c.setMaxAge(60 * 60 * 24 * 30); //存储一个月
response.addCookie(c);
break;
}
}
}
// 第一次访问
if (!flag) {
Cookie cookie = new Cookie("lastTime", str_date);
cookie.setMaxAge(60 * 60 * 24 * 30);
response.addCookie(cookie);
out.write("您好,欢迎您首次访问 " );
}
%>
</body>
</html>
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
42
更新 Tomcat,访问 http://localhost: 8080/hello/home.jsp,可以看到是正常的:
Java 代码是可以分开几个部分写的,例如
<% for(int i = 0; i < 10; i++){ %>
<li> <%= i %> </li>
<% } %>
2
3
这样就相当于循环创建了 10 个 li 元素
同理,我们的 Cookie 案例也可以这样写:
<%@ page import="java.util.Date" %>
<%@ page import="java.text.SimpleDateFormat" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>PeterJXL</title>
</head>
<body>
<%
boolean flag = false; //是否有lastTime的Cookie
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日HH:mm:ss");
String str_date = sdf.format(date);
Cookie[] cs = request.getCookies();
// 遍历Cookie
if (cs != null) {
for (Cookie c : cs) {
if (c.getName().equals("lastTime")) {
flag = true;
%>
<h1>欢迎回来,您上次访问的时间为 <%=c.getValue()%></h1>
<%
c.setValue(str_date);
c.setMaxAge(60 * 60 * 24 * 30); //存储一个月
response.addCookie(c);
break;
}
}
}
// 第一次访问
if (!flag) {
Cookie cookie = new Cookie("lastTime", str_date);
cookie.setMaxAge(60 * 60 * 24 * 30);
response.addCookie(cookie);
out.write("您好,欢迎您首次访问 " );
}
%>
</body>
</html>
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
42
43
第 23 行,我们就不用 out 输出了,直接用 HTML 拼接动态数据。
# JSP 的优缺点
优点:改完 JSP 后,不用重启服务器,只需更新下资源即可,对一些大型系统来说,重启服务器是要很久的,所以写 JSP 可以节省一点点时间。
缺点:代码可读性很差,且代码会很长。因为 JSP 既要做代码控制,又要展示,笔者接触的一个系统中,一个 JSP 文件高达 3k 行;
目前主流的方式是使用前后端分离,我们后期学习了 Ajax 和 JSON 后再说。