入门学习
-
概念:
- Java Server Pages:java服务器端页面
- 可以理解为:一个特殊的页面,其中既可以指定定义 html 标签,又可以定义 java 代码
- 用于简化书写!!!
-
JSP原理
- JSP本质上就是一个Servlet
-
JSP脚本:JSP定义Java代码的方式
- <% 代码 %>:定义的java代码,在service方法中。service方法中可以定义什么,该脚本中就可以定义什么。
- <%! 代码 %>:定义的java代码,在 jsp 转换后,在 java 类的成员位置
- <%= 代码 %>:定义的java代码,会输出到页面上。输出语句中可以定义什么,该脚本就可以定义什么。
- 示例:
<%
int i = 100;
System.out.println("定义在service方法中");
%>
<%!
int i = 500;
public void method() {
System.out.println("可以定义成员方法或成员变量");
}
%>
<%=
// 输出到页面
i
%>
hi~ jsp
$END$
-
JSP的内置对象
- 内置对象:在 jsp 页面中不需要获取和创建,可以直接使用的对象
- jsp 一共有9个内置对象
- 其中的三个
- request:
- response:
- out:字符输出流对象。可以将数据输出到页面上。和 response.getWriter() 类似
- response.getWriter() 和 out.writer() 的区别:
- 在 tomcat 服务器真正给客户端做出响应之前,会先找 response 缓冲区数据,再找 out 缓冲区数据。
- response.getWriter() 数据输出永远在 out.writer()之前
- response.getWriter() 和 out.writer() 的区别:
-
案例:使用jsp完成cookie中的案例
<%@ page import="java.io.UnsupportedEncodingException" %>
<%@ page import="java.net.URLDecoder" %>
<%@ page import="java.net.URLEncoder" %>
<%@ page import="java.text.SimpleDateFormat" %>
<%@ page import="java.util.Date" %>
<%@ page import="com.sun.jdi.Value" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>jsp标题</title>
</head>
<body>
<%!
/**
* 更新时间
*
* @return 格式化的时间字符串格式
* @throws UnsupportedEncodingException
*/
private String updateTime() throws UnsupportedEncodingException {
// 写回cookie,更新时间
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String str_date = sdf.format(new Date());
// URL编码
str_date = URLEncoder.encode(str_date, "utf-8");
return str_date;
}
%>
<%
// 1.获取所有的cookie
Cookie[] cookies = request.getCookies();
// 2.遍历cookies
boolean flag = false; // 没有cookie,则为false
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;
System.out.println("有cookie");
// 响应数据
String value = cookie.getValue();
// URL解码
value = URLDecoder.decode(value, "utf-8");
%>
<h1>您上次的访问时间为:<%= value %></h1>
<%
String str_date = this.updateTime();
cookie.setValue(str_date);
// 设置cookie的存活时间
//cookie.setMaxAge(0); // 删除cookie
response.addCookie(cookie); // 发送cookie
// 找到lastTime的cookie后,退出,不再继续循环判断
break;
}
}
if (cookies == null || cookies.length == 0 || flag == false) {
// 没有lastTime的cookie,第一次访问
System.out.println("没有cookie,设置cookie");
// 响应数据
%>
<h1>您好,欢迎首次登录</h1>
<%
String str_date = this.updateTime();
Cookie cookie = new Cookie("lastTime", str_date);
// System.out.println(cookie.getValue().length());
// 设置cookie的存活时间
cookie.setMaxAge(60 * 60 * 24 * 30); // cookie存活1个月
response.addCookie(cookie); // 发送cookie
}
}
%>
</body>
</html>
指令
- 作用:用于配置JSP页面,导入资源文件
- 格式:
- <% 指令名称 属性名1=属性值1 属性名2=属性值2 ...%>
- 分类:
page
:配置JSP页面的contentType
:等同于response.setContentType()
- 设置响应体的 mime 类型以及 字符集
- 设置当前 jsp 页面的编码(只能是高级IDEA才能生效,如果使用低级工具,则需要设置 pageEncoding 属性设置当前页面的字符集)
import
:导包errorPage
:当前页面发生异常后,会自动跳转到指定的错误页面iserrorPage
:表示当前页面是否是错误页面- true:是,可以使用内置对象 exception
- false:否,默认值。不可以使用内置对象 exception
include
:页面包含的。导入页面的资源文件<%@ include file="top.jsp" %>
taglib
:导入资源<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
注释
- html注释:
- :只能注释html代码片段
- jsp注释:推荐使用
- <%-- --%>:可以注释所有
内置对象
- 在jsp页面中不需要创建,直接使用的对象
- 一共有9个内置对象:
变量名 | 真实类型 | 作用 |
---|---|---|
pageContext | PageContext | 当前页面共享数据,还可以获取其他八个内置对象 |
request | HttpServletRequest | 一次请求访问的多个资源(转发) |
session | HttpSession | 一次会话的多个请求间 |
application | ServletContext | 所有用户间共享数据 |
response | HttpServletResponse | 响应对象 |
page | Object | 当前页面(Servlet)的对象,也就是 this |
out | JspWriter | 输出对象,数据输出到页面上 |
config | ServletConfig | Servlet的配置对象 |
exception | Throwable | 异常对象 |
注:exception 对象:声明了 iserrorPage="true" 才会有
<%@ page contentType="text/html;charset=UTF-8" isErrorPage="true" language="java" %>
MVC:开发模式
jsp演变历史
- 早期只有Servlet,只能使用 response 输出标签数据,非常麻烦
- 后来有sun公司制作 jsp标准,简化了Servlet的开发,如果过度使用 jsp,在 jsp 中写了大量的 java 代码,又写html标签,造成难于维护,难于分工协作
- 再后来,java的web开发,借鉴 mvc 开发模式,使得程序的设计更加合理性。
MVC
1. M:Model,模型。JavaBean
- 完成具体的业务操作,如:查询数据库,封装对象
2. V:View,视图。JSP
- 展示数据
3. C:Controller,控制器。Servlet
-
获取用户的输入
-
调用模型
-
将数据交给视图进行展示
优缺点:
1. 优点:
1. 耦合性低,方便维护,可以利于分工协作
2. 重用性高
2. 缺点:
1. 使得项目的架构变得复杂,对开发人员要求高