四种作用域
JSP的四大作用域:page、request、session、application
- page(本页面):代表变量只能在当前页面上生效。
- request(两个页面之间):代表变量能在一次请求中生效,一次请求可能包含一个页面,也可能包含多个页面,比如页面A请求转发到页面B
- session(服务端和客户端交互期间):代表变量能在一次会话中生效,基本上就是能在web项目下都有效,session的使用也跟cookie有很大的关系。一般来说,只要浏览器不关闭,cookie就会一直生效,cookie生效,session的使用就不会受到影响。
- application(ServletContext:服务器开启与关闭期间):代表变量能一个应用下(多个会话),在服务器下的多个项目之间都能够使用。比如baidu、wenku等共享帐号。
九大内置对象
JSP的九大内置对象:page、config、application、request、response、session、out、exception、pageContext。
JSP九大内置对象分为四类:
输入输出对象:out对象、response对象、request对象
通信控制对象:pageContext对象、session对象、application对象
Servlet对象:page对象、config对象
错误处理对象:exception对象
名称 | 对象 | 类型 | 作用域 | 解释 |
---|---|---|---|---|
page | 页面 | Objext | page | 指向了当前jsp程序本身。相当于this。 |
session | 会话 | HttpSession | Session | 用来保存会话信息。也就是说,可以实现在同一用户的不同请求之间共享数 |
config | 配置 | ServletConfig | page | 封装了应用程序的配置信息 |
application | 应用程序 | ServletContext | Application | 代表了当前应用程序的上下文。可以在不同的用户之间共享信息 |
request | 请求 | httpServletRequest | Request | 封装了来自客户端、浏览器的各种信息 |
response | 响应 | httpServletResponse | page | 封装了服务器的响应信息 |
out | 输出 | JspWriter | page | 用于向客户端、浏览器输出数据 |
exception | 异常 | Throwable | page | 封装了jsp程序执行过程中发生的异常和错误信息 |
pageContext | 页面上下文 | PageContext | page | 提供了对jsp页面所有对象以及命名空间的访问 |
简单介绍
-
page 对象代表了正在运行的由JSP文件产生的类对象,不建议一般读者使用。
-
session 对象代表服务器与客户端所建立的会话,当需要在不同的JSP页面中保留客户信息的情况下使用,比如在线购物、客户轨迹跟踪等。“session” 对象建立在cookie的基础上,所以使用时应注意判断一下客户端是否打开了cookie。常用的方法包括getId、 getValue、 getValueNames和putValue等。
-
config 对象提供一些配置信息,常用的方法有getInitParameter和getInitParameterNames,以获得Servlet初始化时的参数。
-
application 对象负责提供应用程序在服务器中运行时的一些全局信息,常用的方法有getMimeType和getRealPath等。
-
request 对象代表的是来自客户端的请求,例如我们在FORM表单中填写的信息等,是最常用的对象。常用的方法有:getParameter、getParameterNames 和getParameterValues 通过调用这几个方法来获取请求对象中所包含的参数的值。
-
response 对象代表的是对客户端的响应,也就是说可以通过response 对象来组织发送到客户端的数据。但是由于组织方式比较底层,所以不建议普通读者使用,需要向客户端发送文字时直接使用。
-
out 对象代表了向客户端发送数据的对象,与“response” 对象不同,通过“out” 对象发送的内容将是浏览器需要显示的内容,是文本一级的,可以通过“out” 对象直接向客户端写一个由程序动态生成HTML文件。常用的方法除了pirnt和println之外,还包括clear、clearBuffer、flush、getBufferSize和getRemaining,这是因为“out” 对象内部包含了一个缓冲区,所以需要一些对缓冲区进行操作的方法。
-
exception 对象则代表了JSP文件运行时所产生的例外对象,此对象不能在一般JSP文件中直接使用,而只能在使用了“<%@ page isErrorPage="true "%>”的JSP文件中使用。
-
pageContext 对象直译时可以称作“页面上下文”对象,代表的是当前页面运行的一些属性。
常用的方法有 :findAttribute、getAttribute、getAttributesScope 和getAttributeNamesInScope
一般情况下pageContext对象用到得也不是很多,只有在项目所面临的情况比较复杂的情况下,才会利用到页面属性来辅助处理。
其他介绍
-
HTTP是无状态(stateless)协议
无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。从另一方面讲,打开一个服务器上的网页和你之前打开这个服务器上的网页之间没有任何联系。 个人简单理解,就是服务器记不住你。 -
如何解决无状态
Cookie和Session有以下明显的不同点:
1)Cookie将状态保存在客户端,Session将状态保存在服务器端;
2)Cookies是服务器在本地机器上存储的小段文本并随每一个请求发送至同一个服务器。Cookie最早在RFC2109中实现,后续RFC2965做了增强。网络服务器用HTTP头向客户端发送cookies,在客户终端,浏览器解析这些cookies并将它们保存为一个本地文件,它会自动将同一服务器的任何请求缚上这些cookies。Session并没有在HTTP的协议中定义;
3)Session是针对每一个用户的,变量的值保存在服务器上,用一个sessionID来区分是哪个用户session变量,这个值是通过用户的浏览器在访问的时候返回给服务器,当客户禁用cookie时,这个值也可能设置为由get来返回给服务器;
4)就安全性来说:当你访问一个使用session 的站点,同时在自己机子上建立一个cookie,建议在服务器端的SESSION机制更安全些。因为它不会任意读取客户存储的信息。 -
转发和重定向
需要带对象的需求,用转发,如果只需要带简单的字符串,选用重定向。
重定向是客户端行为,转发是服务端行为。
重定向是发送两次请求,转发只发送一次请求。
重定向会更改地址栏路径,转发不会更改地址栏路径。
代码:// 域名重定向 response.sendRedirect("dvd"); //请求转发 request.getRequestDispatcher("add.jsp").forward(request, response);
存值:
//将值放求session 会话中 HttpSession session = request.getSession(); session.setAttribute("obj", JavaObj); //将值放入请求中 request.setAttribute("msg", "添加失败,请重新添加!!!");
取值:
//取request域中的值 //jsp取值 <% String msg=request.getParameter("msg"); out.println("接收到:"+msg); %> //js取值 <script> //获取后端设置的值 javascript方式获取 var msg=document.getElementById("msg").value; //获取后端设置的值 jquery方式获取 var msg=$("input[name='msg']").val(); </script> //EL取值 <div> <input type="hidden" name="msg" id="role" value="${msg}"> </div> ${requestScope.msg} //取session域中的值 //用struts标签获取: <s:property value="#session.sessionid"/> //session也是内置对象 <%=request.getSession.getAttribute("sessionid");> //EL语句 ${sessionScope.sessionid}