回顾
1. session作用
在一次会话中,多次请求间,共享数据,在服务器中存储
2. session快速入门
存数据
HttpSession session = request.getSession();
session.setAttribute(String name,Object value);
取数据
HttpSession session = request.getSession();
Object object = session.getAttribute(String name);
工作原理
基于cookie技术
3. session使用细节
浏览器关闭,服务器不关闭,二次获取session数据是否一致?
默认是不一致,
因为浏览器关闭,cookie销毁....
浏览器不关闭,服务器关闭,二次获取session数据是否一致?
服务器正常关闭的情况下,是一致
钝化(序列化)
活化(反序列化)
生命周期
创建?
浏览器携带jsessionid与服务器不匹配时创建
销毁?
非正常关闭
为活跃30分钟
自杀
作用范围?
在一次会话中,多次请求间
4. 三大域对象
ServletContext
HttpSession
HttpServletRequest
5. 综合案例
购物车
用户登录
JSP&MVC
今日目标
* jsp
工作原理(servlet)
脚本注释
指令
内置对象
动作标签
* mvc模式(初体验)
一 JSP
1.1 概述
在很多动态网页中,绝大部分内容都是固定不变的,只有局部内容需要动态产生和改变。 为了弥补Servlet的缺陷,SUN公司在Servlet的基础上推出了JSP(Java Server Pages)
JSP是简化Servlet编写的一种技术,它将Java代码和HTML语句混合在同一个文件中编写,页面动态资源使用java代码,页面静态资源使用html标签。
简单来说:可以在html标签中嵌套java代码
作用:简化书写,展示动态页面
1.2 快速入门
需求
在jsp页面,动态展示当前时间
<%@ page import="java.util.Date" %>
<%@ page import="java.text.SimpleDateFormat" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>${NAME}</title>
</head>
<body>
<%
Date date = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String currentTime = simpleDateFormat.format(date);
%>
<h3><% out.write(currentTime);%></h3>
</body>
</html>
1.3 工作原理
- JSP本质上就是一个Servlet
1.4 脚本和注释
1.4.1 脚本
JSP通过脚本方式来定义java代码
1. <% 代码 %>
脚本片段,生成在service方法中,每次请求的时候都会执行
2. <%! 代码 %>
声明片段,在java代码中声明成员,放在jsp生成java文件中的成员位置
3. <%=代码 %>
输出脚本片段,相当于out.print("代码") 方法,输出到jsp页面
1.4.2 注释
1. html注释
<!-- 注释静态资源 -->
2. JSP注释
<%-- 注释所有 --%>
3. java注释(JSP脚本内使用)
// 单行
/* 多行 */
/**文档 */
注释作用范围
注释 | JSP源码 | java源码 | html源码 |
---|---|---|---|
html | 可见 | 可见 | 可见 |
java | 可见 | 可见 | 不可见 |
JSP | 可见 | 不可见 | 不可见 |
1.5 指令
* 作用
用于配置JSP页面,导入资源文件
* 格式
<%@ 指令名称 属性名1="属性值1" 属性名2="属性值2" ...%>
* 三大指令
1. page:配置JSP页面
2. include:页面包含(静态)
3. taglib:导入资源文件
1.5.1 page指令
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
contentType 相当于 response.setContentType(); 设置响应体的MIME类型和编码方式
language 这哥们有点尴尬,目前仅支持java语言
import 导入jar包
<%@ page import="java.util.Date" %>
errorPage 当前页面报错后,跳转指定错误提示页面
isErrorPage 声明当前jsp页面是一个异常处理页面,打开异常开关
false(默认)
true:可以操作exception异常对象
<%@ page import="java.util.Date" %>
<%@ page import="java.text.SimpleDateFormat" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" errorPage="500.jsp" %>
<html>
<head>
<title>demo2</title>
</head>
<body>
<h3>page指令</h3>
<%
new Date();
new SimpleDateFormat();
Integer age = 1 / 0;
%>
</body>
</html>
500.jsp(异常处理页面)
<%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="true" %>
<html>
<head>
<title>500</title>
</head>
<body>
<h4>服务器繁忙,请稍后重试....</h4>
<%
// 获取错误信息,发送程序员,进行处理。。。
out.print(exception.getMessage());
%>
</body>
</html>
1.5.2 include指令(静态包含)
top.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>top.jsp</title>
</head>
<body>
<div style="border: skyblue dashed 5px;height: 100px">头部</div>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>demo3</title>
</head>
<body>
<%@include file="top.jsp"%>
<div style="border: red solid 5px;height: 400px">我是include静态包含,主体..</div>
</body>
</html>
1.5.3 taglib指令(铺垫明天的知识..)
- 明天我们会讲解apache提供的jstl标准标签库(手动导入)
① 导入jar包
② 通过taglib指令引入
1.6 内置对象
* 作用
在JSP页面中不需要获取和创建,可以直接使用的对象
* JSP一共有9个内置对象
变量名 真实类型 作用
pageContext PageContext 当前页面中共享数据(域对象)
request HttpServletRequest 一次请求中共享数据(域对象)
session HttpSession 一次会话中共享数据(域对象)
application ServletContext 整个web应用共享数据(域对象)
-----------------------------------------------
response HttpServletResponse 响应对象
page(this) Object 当前页面(servlet)对象
out JSPWriter 输出对象
config ServletConfig servlet配置对象
exception Throwable 异常对象(默认关闭...)
* 常用
1. pageContext
1)当前页面的域对象
2)获取其他八个内置对象
2. request
1)接收用户请求(参数)
2)一次请求中域对象
3. response
1)设置响应
字节流
字符流
4. out
1)专门在jsp中处理字符流
print(); // 可以输出一切类型
write(); // 只能输出字符类型
1.7 JSP动作标签
* 作用
简化JSP页面编码
* 常用
<jsp:include>:页面包含(动态)
相当于
request.getRequestDispatcher().include(request,response);
<jsp:forward>:请求转发(页面跳转)
相当于
request.getRequestDispatcher().forword(request,response);
<jsp:param>:参数传递
其实这哥们是forward子标签
使用request.getParameter() 获取参数
1.7.1 动态包含
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>demo6</title>
</head>
<body>
<jsp:include page="top.jsp"></jsp:include>
<div style="border: green solid 5px;height: 400px">jsp的动态包含,主体</div>
</body>
</html>
- 静态包含和动态包含区别
在企业开发时,我们推荐使用静态包含,提升访问性能;注意:不能出现重名的变量。。。
1.7.2 请求转发
a.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>a</title>
</head>
<body>
<%
System.out.println("a.jsp执行了");
request.setAttribute("username", "request域存值了");
%>
<jsp:forward page="b.jsp">
<jsp:param name="name" value="jack"></jsp:param>
<jsp:param name="age" value="18"></jsp:param>
</jsp:forward>
</body>
</html>
b.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>b</title>
</head>
<body>
<%
System.out.println("b.jsp执行了");
// request域传递
System.out.println(request.getAttribute("username"));
// param标签传递
System.out.println(request.getParameter("name"));
System.out.println(request.getParameter("age"));
%>
</body>
</html>
二 MVC模式【思想】
2.1 JSP发展史
- 早期只有servlet,只能使用response输出html标签,非常麻烦。
- 后来有了JSP,简化了servlet开发;如果过度使用JSP,在JSP页面中写了大量的java代码和html标签,造成难于维护,难于分工协作的场景。
- 再后来为了弥补过度使用jsp的问题,我们使用servlet+jsp这套组合拳,利于分工协作。
2.2 MVC介绍
MVC设计模式: Model-View-Controller简写。
MVC是软件工程中的一种软件架构模式,它是一种分离业务逻辑与显示界面的设计方法。
简单来说:前辈们总结的一套设计经验,适合在各种软件开发领域,目的:高内聚,低耦合
* M:model(模型) JavaBean(1.处理业务逻辑、2.封装实体)
* V:view(视图) Jsp(展示数据)
* C:controller(控制器)Servlet(1.接收请求、2.调用模型、3.转发视图)
* 优缺点
优点
降低耦合性,方便维护和拓展,利于分工协作
缺点
使得项目架构变得复杂,对开发人员要求高
- 课下作业
老师下午总结
面试题目:说出jsp的四大域对象,并且说出其作用范围
- PageContext 在当前jsp页面去使用
- request 一次请求内去去使用
- session 一次会话内去使用
- ServletContext 项目模块中去使用
四大域的应用场景
-
PageContext : 这个域是在当前jsp页面上共享数据,这个域往往是用于jstl标签库
-
request域: 一次请求内去共享数据,如果某个数据仅用于本次请求的时候我们即可使用request
域。 以后一般都是servlet存储数据的时候使用,然后转发给jsp.
-
session域 : 一次会话中共享数据, 一般用于存储登陆者信息。
-
servletContext : 服务器启动的时候存在,服务器关闭的时候销毁。 都没有使用该域的场景。 因为
该域共享数据的生命周期太长了。 非常消耗内存
网友评论