目录

  • 1.response :响应对象
  • 2.session(服务端)
  • 3.使用Cookie实现 记住用户名 功能
  • 4.session :会话
  • 5.session机制:
  • 6.session:
  • 7.session方法:
  • 8.cookie和session的区别:
  • 9.appliation 全局对象
  • 10.JSP9大内置对象
  • 11.四种范围对象(小1->大4)
    • a.pageContext
    • b.request
    • c.session
    • d.application
  • 12.源码如何关联

1.response :响应对象

提供的方法:
void addCookie( Cookie cookie ); 服务端向客户端增加cookie对象
void sendRedirect(String location ) throws IOException; :页面跳转的一种方式(重定向)
void setContetType(String type):设置服务端响应的编码(设置服务端的contentType类型)

示例:登陆
login.jsp -> check.jsp ->success.jsp

请求转发 重定向
地址栏是否改变 不变(check.jsp) 改变(success.jsp)
是否保留第一次请求时的数据 保留 不保留 –4种范围对象
请求的次数 1 2
跳转发生的位置 服务端 客户端发出的第二次跳转

转发、重定向:

转发:

张三(客户端)     ->    【 服务窗口 A (服务端 )    ->  服务窗口B  】

重定向:

 张三(客户端)     ->     服务窗口 A (服务端 ) ->去找B
张三(客户端)    ->   服务窗口 B (服务端 ) ->结束

2.session(服务端)

Cookie(客户端,不是内置对象):Cookie是由 服务端生成的 ,再发送给客户端保存。相当于 本地缓存的作用: 客户端(hello.mp4,zs/abc)->服务端(hello.mp4;zs/abc)

作用:提高访问服务端的效率,但是安全性较差。

Cookie:   name=value   javax.servlet.http.Cookiepublic Cookie(String name,String value)String getName():获取nameString getValue():获取valuevoid setMaxAge(int expiry);最大有效期 (秒)

服务端准备Cookie:

​ response.addCookie(Cookie cookie)

页面跳转(转发,重定向)

客户端获取cookie: request.getCookies();

a.服务端增加cookie :response对象;客户端获取对象:request对象

b.不能直接获取某一个单独对象,只能一次性将 全部的cookie拿到

通过F12可以发现 除了自己设置的Cookie对象外,还有一个name为 JSESSIONID的cookie

建议 cookie只保存 英文数字,否则需要进行编码、解码

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body><%
//客户端获取cookie
Cookie[] cookies= request.getCookies();
for(Cookie cookie:cookies){out.print(cookie.getName()+"----"+cookie.getValue()+"<br/>");}
%>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body><%//服务端Cookie cookie1 = new Cookie("name","zx");Cookie cookie2 = new Cookie("pwd","abc");response.addCookie(cookie1);response.addCookie(cookie2 );//页面跳转到客户端(转发,重定向)response.sendRedirect("result.jsp");%></body>
</html>

3.使用Cookie实现 记住用户名 功能

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%!//登陆
String uname;%>
<%
boolean falg=false;Cookie [] cookies=  request.getCookies()   ;
for(Cookie cookie: cookies ){if(cookie.getName().equals("uname")){uname=cookie.getValue();falg=true;}
}
if(!falg){out.print("cookie失效");
}else{out.print("cookie"+uname);
}%><form action="check.jsp" method="post">
用户名:<input type="text" name="uname" value="<%=(uname==null?"":uname) %>"><br/>
密码:<input type="password" name="upwd"><br/>
提交:<input type="submit" value="登陆"><br/>
</form></body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body><%request.setCharacterEncoding("utf-8");String name = request.getParameter("uname");String pwd = request.getParameter("upwd");//将用户名放到Cookie里面Cookie cookie = new Cookie("uname", name); //建议 cookie只保存  英文数字,否则需要进行编码、解码cookie.setMaxAge(10) ;response.addCookie(cookie);response.sendRedirect("A.jsp");%></body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body></body>
</html>

4.session :会话

a.浏览网站:开始-关闭
b.购物: 浏览、付款、退出<%@ page language=“java” contentType=“text/html; charset=UTF-8”
pageEncoding=“UTF-8”%>

Insert title here <% request.setCharacterEncoding("utf-8"); String name = request.getParameter("uname"); String pwd = request.getParameter("upwd"); //将用户名放到Cookie里面 Cookie cookie = new Cookie("uname", name); //建议 cookie只保存 英文数字,否则需要进行编码、解码 cookie.setMaxAge(10) ; response.addCookie(cookie); response.sendRedirect("A.jsp"); %> c.电子邮件:浏览、写邮件、退出 开始-结束

5.session机制:

客户端第一次请求服务端时,(jsessionid-sessionid)服务端会产生一个session对象(用于保存该客户的信息);
并且每个session对象 都会有一个唯一的 sessionId( 用于区分其他session);
服务端由会 产生一个cookie,并且 该cookie的name=JSESSIONID ,value=服务端sessionId的值;
然后 服务端会在 响应客户端的同时 将该cookie发送给客户端,至此 客户端就有了 一个cookie(JSESSIONID);
因此,客户端的cookie就可以和服务端的session一一对应(JSESSIONID - sessionID)

客户端第二/n次请求服务端时:服务端会先用客户端cookie种的JSESSIONID 去服务端的session中匹配sessionid,如果匹配成功(cookie jsessionid和sesion sessionid),说明此用户 不是第一次访问,无需登录;

例子:
客户端: 顾客(客户端)
服务端: 存包处 - 商场(服务端)

顾客第一次存包:商场 判断此人是 之前已经存过包(通过你手里是否有钥匙)。
如果是新顾客(没钥匙) ,分配一个钥匙 给该顾客; 钥匙 会和 柜子 一一对应;

第二/n次 存包:商场 判断此人是 之前已经存过包(通过你手里是否有钥匙)
如果是老顾客(有钥匙),则不需要分配;该顾客手里的钥匙 会 和柜子 自动一一对应。

6.session:

a. session存储在服务端(同一次会话共享,比如浏览同一个网页)

b. session是在 同一个用户(客户)请求时 共享

c. 实现机制:第一次客户请求时 产生一个sessionid 并复制给 cookie的jsessionid 然后发给客户端。最终 通过session的sessionid-cookie的jsessionid

7.session方法:

String getId() :获取sessionId  boolean isNew() :判断是否是 新用户(第一次访问)void invalidate():使session失效  (退出登录、注销)void setAttribute()Object getAttribute();void setMaxInactiveInterval(秒) :设置最大有效 非活动时间 int getMaxInactiveInterval():获取最大有效 非活动时间  比如你设置的是一小时,在这期间你一直在浏览该页面,不会有影响,但是如果你去吃个饭回来,会让你重新登陆。

示例:
登录

客户端在第一次请求服务端时,如果服务端发现 此请求没有 JSESSIONID,则会创建一个 name=JSESIONID的cookie 并返回给客户端

Cookie:

a.不是内对对象,要使用必须new

b.但是,服务端会 自动生成一个(服务端自动new一个cookie) name=JSESIONID的cookie 并返回给客户端

8.cookie和session的区别:

session cookie
保存的位置 服务端 客户端
安全性 较安全 较不安全
保存的内容 Object String

9.appliation 全局对象

String getContextPath() 虚拟路径
String getRealPath(String name): 绝对路径(虚拟路径 相对的绝对路径)

10.JSP9大内置对象

pageContext JSP页面容器
request 请求对象
session 会话对象
appliation 全局对象

response 响应对象

config 配置对象(服务器配置信息)
out 输出对象
page 当前JSP页面对象(相当于java中的this)
exception 异常对象

11.四种范围对象(小1->大4)

2request 请求对象 同一次请求有效
3session 会话对象 同一次会话有效
4appliation 全局对象 全局有效(整个项目有效)
1pageContext JSP页面容器 (page对象) 当前页面有效

以上4个对象共有的方法:
Object getAttribute(String name):根据属性名,或者属性值
void setAttribute(String name,Object obj) :设置属性值(新增,修改)
setAttribute(“a”,“b”) ;//如果a对象之前不存在,则新建一个a对象 ;
如果a之前已经存在,则将a的值改为b
void removeAttribute(String name):根据属性名,删除对象

a.pageContext

pageContext 当前页面有效 (页面跳转后无效)

<%=pageContext.getAttribute("hello")   %>

b.request

request 同一次请求有效;其他请求无效 (请求转发后有效;重定向后无效)

response.sendRedirect("rq1.jsp");
request.getRequestDispatcher("rq1.jsp").forward(request, response);

c.session

session 同一次会话有效 (无论怎么跳转,都有效;关闭/切换浏览器后无效 ; 从 登陆->退出 之间 全部有效)

session.setAttribute("hello", "word");
response.sendRedirect("ss1.jsp");

d.application

application
全局变量;整个项目运行期间 都有效 (切换浏览器 仍然有效);关闭服务、其他项目 无效

->多个项目共享、重启后仍然有效 :JNDI

1.以上的4个范围对象,通过 setAttribute()复制,通过getAttribute()取值;
2.以上范围对象,尽量使用最小的范围。因为 对象的范围越大,造成的性能损耗越大。

12.源码如何关联

1.进入官网,下载对应版本源码

官网(https://www.apache.org/)

Tomcat官网(https://tomcat.apache.org/download-90.cgi)

下载源代码

然后导入即可!

JSP中response,session,cookie,application的作用及区别相关推荐

  1. JSP中response.sendRedirect()与request.getRequestDispatcher().forward(request,respon 区别

    JSP中response.sendRedirect()与request.getRequestDispatcher().forward(request,response)这两个对象都可以使页面跳转,但是 ...

  2. jsp中引入css文件不起作用

    jsp中引入css文件不起作用 笔者遇到的问题所在是jsp页面引入css文件后,样式无法加载,在SpringMVC的配置文件dispatcherServlet.xml中引入如下代码后解决: <m ...

  3. 浅谈JSP中include指令与include动作标识的区别

    JSP中主要包含三大指令,分别是page,include,taglib.本篇主要提及include指令. include指令使用格式:<%@ include file="文件的绝对路径 ...

  4. JSP中的include指令和include动作的区别

    我们都知道在jsp中include有两种形式,分别是Include指令:<%@ include file=""%>和include动作:<jsp:include ...

  5. jsp中String path = request.getContextPath()的作用

    <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+ ...

  6. JSP request response session

  7. IDAE中Modules, Facets 和 Artifacts 的作用及区别

    可以先看另一篇文章 "理解 IntelliJ IDEA 的项目配置和Web部署" 一.Modules Content Root:是包含组成Module的所有文件的文件夹.一个Mod ...

  8. spring中的BeanFactory与ApplicationContext的作用和区别?

    作用:1. BeanFactory负责读取bean配置文档,管理bean的加载,实例化,维护bean之间的依赖关系,负责bean的声明周期. 2. ApplicationContext除了提供上述Be ...

  9. linux中bin与sbin目录的作用及区别介绍

    在linux系统中,有两个重要的目录:bin与sbin,分别包括/bin./usr/bin/与/sbin./usr/sbin/. bin:  bin为binary的简写,主要放置系统的必备执行文件,例 ...

最新文章

  1. windows 10 下部署WCF 一些细节
  2. Repeater分页代码
  3. [转]css选择器优先级深入理解
  4. IDA Pro - 如何得到比较清楚的逆向伪代码
  5. 【概念信息】COPC概览
  6. Android 编译时:m、mm、mmm、mma、mmma的区别
  7. 关闭IOS更新功能(ios4/5/6)
  8. C++学习之路 | PTA乙级—— 1006 换个格式输出整数 (15分)(精简)
  9. Android 五大布局简析
  10. JSK-399 绝对值最小的数【大数】
  11. 动态加载执行 JS 文件、对话框 confirm 方法
  12. 联想笔记本系统重装,联想电脑重装系统
  13. 子网掩码、网络地址、广播地址的计算
  14. 如何查找Steam好友代码(以及添加好友代码)
  15. 一个基于高阶图匹配的多目标跟踪器:Online Multi-Target Tracking with Tensor-Based High-Order Graph Matching
  16. 一份还热乎的蚂蚁金服面经(已拿Offer)!附答案!!
  17. 游戏开发中常见的几种碰撞检测
  18. 计算机关机重启后黑屏,电脑重启黑屏强制关机后才能开怎么办
  19. 手写数字识别(识别纸上手写的数字)
  20. Android使用高德地图地理围栏定位自动发送短信

热门文章

  1. html5 css3 设计模式,html5+css3设计模式
  2. 2、leetcode278 第一个错误的版本**
  3. php form提交跳转,form表单页面跳转方式提交练习
  4. java数组写入excel_求将java中数组内容逐条加进excel中的代码
  5. python颜色库_Python可视化_matplotlib08-palettable颜色库(四)
  6. spring boot pom配置_125 SpringCloud服务配置中心
  7. python代码编辑器下载_编程猫Python编辑器
  8. ccf a类期刊_喜报:我院2篇学生论文被CCFA类会议AAAI(2020)接收
  9. bootstrap与zookeeper区别
  10. python写音乐播放器_python 模拟(简易)音乐播放器