pageContext JSP页面容器(page对象) 当前页面有效
request 请求对象 同一次请求有效
session 会话对象 同一次会话有效
appliation 全局对象 全局有效(整个项目有效)
以上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 当前页面有效 (页面跳转后无效)
b.
request 同一次请求有效;其他请求无效 (请求转发后有效;重定向后无效)
c.
session 同一次会话有效 (无论怎么跳转,都有效;关闭/切换浏览器后无效 ; 从 登陆->退出 之间 全部有效)
d.
application
全局变量;整个项目运行期间 都有效 (切换浏览器 仍然有效);关闭服务、其他项目 无效
->多个项目共享、重启后仍然有效 :JNDI
1.以上的4个范围对象,通过 setAttribute()复制,通过getAttribute()取值;
2.以上范围对象,尽量使用最小的范围。因为 对象的范围越大,造成的性能损耗越大。
1、out:输出对象,向客户端输出内容
2、request:请求对象;存储“客户端向服务端发送的请求信息”
request对象的常见方法:
String getParameter(String name) :根据请求的字段名key (input标签的name属性值) ,返回字段值value (input标签的value属性值)
String[] getParameterValues(String name): 根据请求的字段名key ,返回多个字段值value (checkbox)
void setCharacterEncoding("编码格式utf-8") :设置post方式的请求编码 (tomcat7以前默认iso-8859-1,tomcat8以后改为了utf-8)
getRequestDispatcher("b.jsp").forward(request,response) ; :请求转发 的方式跳转页面 A - > B
ServletContext getServerContext():获取项目的ServletContext对象
3、pageContext JSP页面容器
4、session 会话对象
5、appliation 全局对象
6、response 响应对象
7、config 配置对象(服务器配置信息)
8、page 当前JSP页面对象(相当于java中的this)
9、exception 异常对象
public void sendRedirect(String location)throws java.io.IOException
response.sendRedirect("/chapter02/index.jsp");
表示重定向到当前应用程序(chapter02)的根目录下的index.jsp页面
RequestDispatcher dispatcher = request.getRequestDispatcher(String path);
dispatcher.forward(ServletRequest request,ServletResponse response);
其中:
1、path参数用以指定转发的URL,只能是相对路径;
2、request和response参数取值为当前请求所对应的HttpServletRequest和HttpServletResponse对象。
请求转发示例
RequestDispatcher dispatcher = request.getRequestDispatcher("index.jsp).forward(request,response);
表示请求转发到当前项目站点的根目录下的index.jsp页面
重定向和请求转发都可以让浏览器获得另外一个URL所指向的资源,但俩者的内部运行机制有很大的区别:
1、转发只能将请求转发给同一个Web应用中的组件;而重定向不仅可以重定向到当前应用程序中的其他资源,还可以重定向到同一个站点上的其他应用程序中的资源,或者重定向到其他站点的资源;
2、重定向的访问过程结束后,浏览器地址栏中显示的URL会发生改变,由初始的URL地址变成重定向的目标URL;而请求转发过程结束后,浏览器地址栏保持初始的URL地址不变;
3、重定向对浏览器的请求直接作出响应,响应的结果就是告诉浏览器去重新发出对另外一个URL的访问请求;请求转发在服务器端内部将请求转发给另外一个资源,浏览器只知道发出了请求并得到了响应结果,并不知道在服务器程序内部发生了转发行为;
4、请求转发调用者与被调用者之间共享相同的request对象和response对象,它们属于同一个访问请求和响应过程;重定向调用者与被调用者使用各自的request对象和response对象,它们属于俩个独立的访问请求和响应过程。
请求转发 重定向
地址栏是否改变 不变 改变
是否保留第一次 保留 不保留 --4种范围对象
请求时的数据
请求的次数 1 2
跳转发生的位置 服务端 客户端发出的第二次跳转
转发:
张三(客户端) -> 【 服务窗口 A (服务端 ) -> 服务窗口B 】
重定向:
张三(客户端) -> 服务窗口 A (服务端 ) ->去找B
张三(客户端) -> 服务窗口 B (服务端 ) ->结束
session(服务端)
Cookie(客户端,不是内置对象):Cookie是由 服务端生成的 ,再发送给客户端保存。
相当于 本地缓存的作用: 客户端(hello.mp4,zs/abc)->服务端(hello.mp4;zs/abc)
作用:提高访问服务端的效率,但是安全性较差。
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),说明此用户 不是第一次访问,无需登录;
cookie和session的区别:
session cookie
保存的位置 服务端 客户端
安全性 较安全 较不安全
保存的内容 Object String
原文:https://www.cnblogs.com/wt9866/p/13628994.html