JSP入门学习

概念:

Java Server Pages: java服务器端页面

可以理解为:一个特殊的页面,其中既可以指定定义html标签,又可以定义java代码

用于简化书写!!!

原理

JSP本质上就是一个Servlet

JSP的脚本:

JSP定义Java代码的方式

1. `<%  代码 %>`:定义的`java`代码,在`service方法`中。service方法中可以定义什么,该脚本中就可以定义什么。
2. `<%! 代码 %>`:定义的`java`代码,在jsp转换后的java类的成员位
3. `<%= 代码 %>`:定义的`java`代码,会输出到页面上。输出语句中可以定义什么,该脚本中就可以定义什么。

JSP的内置对象:

在jsp页面中不需要获取和创建,可以直接使用的对象

jsp一共有9个内置对象。

今天学习3个:

  1. request

  2. response

  3. out:字符输出流对象。可以将数据输出到页面上。和response.getWriter()类似

    response.getWriter()和out.write()的区别:

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

案例:改造Cookie案例

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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
<%@ page import="java.net.URLDecoder" %>
<%@ page import="java.util.Date" %>
<%@ page import="java.text.SimpleDateFormat" %>
<%@ page import="java.net.URLEncoder" %><%--
Created by IntelliJ IDEA.
User: Liu Fei
Date: 2020/11/2
Time: 19:16
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>uestc</title>
</head>
<body>

<%
//设置响应的消息体的数据格式以及编码
response.setContentType("text/html;charset=utf-8");
//服务器查看是否有lastTime的cookie字段
//1.获取所有cookie
Cookie [] cookies=request.getCookies();
boolean flag=false;
//2.遍历cookie数组
if(cookies!=null && cookies.length>0){
for(Cookie c:cookies){
//3.获取cookie的名称
String name=c.getName();
if(name.equals("lastTime")){
flag=true;
//有该Cookie,不是第一次访问
//响应消息:欢迎回来,您上次访问时间为:2018年6月10日11:50:20
String value=c.getValue();
//url解码
value= URLDecoder.decode(value,"utf-8");
%>
<h1>欢迎回来,您上次访问时间为:<%=value%></h1>
<%
//设置Cookies的value
//获取当前时间的字符串,重新设置cookie的值,重新发送
Date date=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String str_date=sdf.format(date);
System.out.println("编码前"+str_date);
//url编码
str_date= URLEncoder.encode(str_date,"utf-8");
System.out.println("编码后"+str_date);
c.setValue(str_date);
//设置cookie的存活时间
c.setMaxAge(5000);
response.addCookie(c);
break;
}
}
}
if(!flag || cookies.length==0 || cookies==null){
Date date=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String str_date=sdf.format(date);
System.out.println("编码前"+str_date);
//url编码
str_date= URLEncoder.encode(str_date,"utf-8");
System.out.println("编码后"+str_date);
Cookie cookie=new Cookie("lastTime",str_date);
//设置cookie的存活时间
cookie.setMaxAge(5000);
response.addCookie(cookie);
str_date=URLDecoder.decode(str_date,"utf-8");
%>
<h1>您好,欢迎您首次访问 "</h1>;
<%
}
%>

</body>
</html>

指令

作用:

用于配置JSP页面,导入资源文件

格式:

1
<%@ 指令名称 属性名1=属性值1 属性名2=属性值2 ... %>

分类

page

配置JSP页面的

  1. contentType:等同于response.setContentType()

    • 设置响应体的mime类型以及字符集
    • 设置当前jsp页面的编码(只能是高级的IDE才能生效,如果使用低级工具,则需要设置pageEncoding属性设置当前页面的字符集)
  2. import:导包

  3. errorPage:当前页面发生异常后,会自动跳转到指定的错误页面

  4. isErrorPage:标识当前也是是否是错误页面。

    • true:是,可以使用内置对象exception
    • false:否。默认值。不可以使用内置对象exception
    1
    <%@ page contentType="text/html;charset=UTF-8" language="java" errorPage="500.jsp" %>

include

页面包含的。导入页面的资源文件

1
<%@include file="top.jsp"%>

taglib

导入资源

1
2
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!--prefix:前缀,自定义的-->

注释

  1. html注释:

    1
    <!--只能注释html代码片段 -->
  2. jsp注释:推荐使用

    1
    <%--可以注释所有 --%>

内置对象

在jsp页面中不需要创建,直接使用的对象

一共有9个:
变量名 真实类型 作用

  • pageContext PageContext 当前页面共享数据,还可以获取其他八个内置对象
  • request HttpServletRequest 一次请求访问的多个资源(转发)
  • session HttpSession 一次会话的多个请求间
  • application ServletContext 所有用户间共享数据
  • response HttpServletResponse 响应对象
  • page Object 当前页面(Servlet)的对象 this
  • out JspWriter 输出对象,数据输出到页面上
  • config ServletConfig Servlet的配置对象
  • exception Throwable 异常对象