一、概念

Java Server Pages java服务器端页面

* 可以理解为:一个特殊的页面,其中既可以指定定义html标签,又可以定义java代码
* 用于简化书写!!!

在这里插入图片描述

二、原理

JSP本质上就是一个Servlet
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
所以也可以知道一个java类要想被外界访问到,必须是 一个servlet

三、JSP 的脚本

1<%  代码 %>:定义的java代码,在service方法中。service方法中可以定义什么,该脚本中就可以定义什么。
(2<%! 代码 %>:定义的java代码,在jsp转换后的java类的成员位置。
(3<%= 代码 %>:定义的java代码,会输出到页面上。输出语句中可以定义什么,该脚本中就可以定义什么。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>$Title$</title>
</head>
<body>
<%
    System.out.println("hello jsp !!!");
%>
<%!
    int i = 8;
%>
<%=
"Hello world !!!"
%>
</body>
</html>

四、JSP 的内置对象

JSP的内置对象:
		* 在jsp页面中不需要获取和创建,可以直接使用的对象
		* jsp一共有9个内置对象。
* 今天学习3个:
			* request
			* response
			* out:字符输出流对象。可以将数据输出到页面上,和response.getWriter()类似

* response.getWriter()和out.write()的区别:
		* 在tomcat服务器真正给客户端做出响应之前,会先找response缓冲区数据,再找out缓冲区数据。
		* response.getWriter()数据输出永远在out.write()之前

为了防止布局的打乱,一般使用 out 来实现输出
在这里插入图片描述

五、改造 Cookie 案例

<%@ page import="java.net.URLDecoder" %>
<%@ page import="java.util.Date" %>
<%@ page import="java.text.SimpleDateFormat" %>
<%@ page import="java.net.URLEncoder" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>$Title$</title>
</head>
<body>
<%
    //        (1)获取所有的 Cookie
    Cookie[] cookies = request.getCookies();
    boolean flag = false;//用来判断是否有 Cookie 为 lastTime
//        (2)遍历 cookies 数组
    if (cookies != null && cookies.length > 0) {
        for (Cookie cookie : cookies) {
//                (3)获取 cookie 的名称
            String name = cookie.getName();
//                (4)判断名称是否是 lastTime
            if ("lastTime".equals(name)) {
//                    有该 cookie,不是第一次访问
                flag = true;

//                    响应数据,获取 Cookie 的 value,时间
                String value = cookie.getValue();
//                    由于对 value 设置了编码,所以这里需要对其进行解码,才能正常显示
                String decode = URLDecoder.decode(value, "utf-8");
                out.write("<h1>欢迎回来,您上次访问的时间为:" + decode + "</h1>");

//                    获取之后,将 value 更新为新的值
//                    获取当前时间的字符串,重新设置 Cookie 的值,重新发送 cookie
                Date date = new Date();
                SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
                String format = simpleDateFormat.format(date);

//                    为了处理cookie 中 value 的 特殊字符,需要对其进行编码
                System.out.println("编码前:" + format);
//                    URL 编码
                String encode = URLEncoder.encode(format, "utf-8");
                System.out.println("编码后:" + encode);
//                    将编码后的值设置进去
                cookie.setValue(encode);
//                    设置 cookie 的存活时间为一个月
                cookie.setMaxAge(60 * 60 * 24 * 30);
                response.addCookie(cookie);

                break;
            }
        }
    }
    if (cookies == null || cookies.length == 0 || flag == false) {
//            属于第一次访问的情况
//            设置 Cookie 的 value
//            获取当前时间的字符串,重新设置 Cookie 的值,重新发送 cookie
        Date date = new Date();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
        String format = simpleDateFormat.format(date);
//            为了显示特殊字符需要对其进行编码处理
        String encode = URLEncoder.encode(format, "utf-8");
        Cookie cookie = new Cookie("lastTime", encode);
//            设置 cookie 的存活时间
        cookie.setMaxAge(60 * 60 * 24 * 30);
        response.addCookie(cookie);
        out.write("<h1>您好,欢迎您首次访问!</h1>");
    }
%>
</body>
</html>

jsp 也支持截断操作:

<%@ page import="java.net.URLDecoder" %>
<%@ page import="java.util.Date" %>
<%@ page import="java.text.SimpleDateFormat" %>
<%@ page import="java.net.URLEncoder" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>$Title$</title>
</head>
<body>
<%
    int i = 9;
    out.print("截断操作");
%>
<h1>输出 i 的值:<%=i%></h1>
<%=
    "截断操作!!!"
%>
</body>
</html>

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐