我们可以在_jspservice方法中找到对应的局部变量,这些变量我们称之为隐式对象
n 提供内部隐式对象的目的是为了简化JSP开发
n JSP 隐式对象是 Web 容器加载的一组类
n 不需要由JSP的编写者实例化,它们由JSP容器实现和管理。在所有JSP页面中都能使用内部对象。
n 内部对象只对表达式和Scriptlet有用,在声明中不能使用。
隐式对象的名称是 JSP 的保留字
JSP页面通信作用域
页面(page) 请求(request) 会话(session) 应用(application)
页面(page)
n 对应的隐式对象pageContext
n 在这个范围内定义的对象只与当前页面相关,当加载新页面时,就将其销毁(默认为此作用域)
request对象
n 请求(request)在用户本次请求过程中存在
¨ 对应的隐式对象request
request.setAttribute(“key”, value); request.getAttribute(“key”);
会话(session)
n Session常用方法: 一直存在于会话中,直至其终止或被删除
voidsetAttribute(name); ObjectgetAttribute(name);
voidremoveAttribute(name); voidinvalidate();
application对象
n 应用(application) 对应的隐式对象application
表示JSP 页面所属的应用程序
应用程序的 JSP 页面组合起来形成一个应用程序,是使用范围最广的上下文状态。它允许 JSP 页面的 servlet 与包括在同一应用程序中的任何 Web 组件
共享信息 ,在整个页面中均可使用
n javax.servlet.ServletContext接口实例
n application对象最常用的方法有:
¨ void setAttribute(String name,Object value)
以键/值的方式,将一个对象的值存放到application中
¨ Object getAttribute(String name)
根据名称去获取application中存放对象的值
request对象
n 接收客户端的请求参数,包括来自GET/POST方法的参数
n 实现javax.servlet.http.HttpServletRequest接口
n request对象的常用方法
¨ String getParameter(String name)
¨ String[] getParameterValues(String name)
¨ void setAttribute(String key, Object value)
¨ Object getAttriubte(String key)
¨ void setCharacterEncoding(String enc)
¨ getSession()
get请求
String userName = request.getParameter(“userName”);
此时服务器将客户端传来的编码当成了iso8859-1,然后解析成了错误的字符串
我们先得到传来的编码:
byte[] data =userName.getBytes(“iso8859-1”);
然后重新指定编码的真实类型:userName = new String(data, “gbk”);
如果post请求,我们可以采用以下方案:
request.setCharacterEncoding(“gbk”);
String userName = request.getParameter(“userName”);
n 假定存在一个请求需要多个jsp页面合作完成
request.getRequestDispatcher(“”).forward()
request其它应用
String clientIP = request.getRemoteHost(); //IP地址
int clientPort = request.getRemotePort(); //端口号
HttpSession mySession =request.getSession(); //会话
String uri = request.getRequestURI(); //URI
String method = request.getRequestMethod(); //请求方法
int length = request.getContentLength(); //数据的数量
InputStream is = request.getInputStream(); //得到输入流
response对象
n 常用方法
¨ void setContentType (String name)
设置作为响应生成的内容的类型和字符编码
¨ void sendRedirect (String name)
发送一个响应给浏览器,指示其应请求另一个URL
¨ void setCharacterEncoding(String charset)
设置响应内容的字符集
request.getRequestDispatcher(“”).forward(request,response);
VS
response.sendRedirect(“”);
转发是在服务器端发挥作用,通过forward方法将提交信息在多个页面间进行传递。是在服务器内部控制权的转移,客户端浏览器的地址栏不会显示出转向后的地址
重定向是在客户端发挥作用,通过请求新的地址实现页面转向,是通过浏览器重新请求地址,在地址栏中可以显示转向后的地址
当服务器端调用response.sendRedirect (“http://www.g.cn”)时,服务器将向客户端发出如下响应结果:
HTTP/1.1 302 Moved Temporarily
Server: Apache-Coyote/1.1
Location: http://www.g.cn
Content-Length: 0
Date: Fri, 17 Apr 2009 04:18:05 GMT
客户端收到响应后重新请求Location指定的位置
out对象
n 用于向客户端输出内容
n 也可以通过response.getWriter()得到
n write()、print()、println()
<% out.print(“欢迎来到 JSP:隐式对象”) ;
out.write(“欢迎来到 JSP:隐式对象”) ;
out.writ(48);
out.print(48);
out.println(48);%>
exception对象
n exception对象用于处理 JSP 页面中的错误
n exception 对象用于访问执行 JSP 的过程中引发的异常
n exception 对象是 java.lang.Throwable 类的实例
状态管理(Session)
Cookie是Web服务器保存在客户端的一系列文本信息
Cookie的作用
对特定对象的追踪
统计网页浏览次数
简化登录
安全性能:容易信息泄露
导入包:import="javax.servlet.http.Cookie"
创建Cookie
Cookie newCookie=newCookie("parameter", "value");
parameter:用于代表cookie的名称(key)
value:用于表示当前key名称所对应的值
写入Cookie:response.addCookie(newCookie)
设置Cookie属性的常用方法
类型 | 方法名称 | 说 明 |
void | setMaxAge(int expiry) | 设置Cookie的有效期,以秒为单位 |
void | setValue(String value) | 在Cookie创建后,对Cookie进行赋值 |
String | getName() | 获取Cookie的名称 |
String | getValue() | 获取Cookie的值 |
String | getMaxAge() | 获取Cookie的有效时间,以秒为单位 |
------从登录验证页面表单中获取用户名------
<% Stringusername=reqeust.getParameter("username");
//以key/value的形式创建Cookie
Cookie uname=new Cookie("uname", username);
response.addCookie(uname);
... ... %>
-----在显示页面显示用户名---------------
<%//获取请求中的Cookie,以数组方式保存
Cookie cookies[ ]=request.getCookies();
//循环遍历数组,得到key=uname的Cookie
for(int i=0;i<cookies.length;i++){
Cookie ucookie=cookies[i];
if(ucookie.getName().equals("uname”));//判断Cookie的名称
%>
欢迎你:<%=ucookie.getValue() %>//获取key对应的value,输出显示
<% } %>
Cookie与session的比较
session是在服务器端保存用户信息,Cookie是在客户端保存用户信息
session中保存的是对象,Cookie保存的是字符串
session随会话结束而关闭,Cookie可以长期保存在客户端
Cookie通常用于保存不重要的用户信息,重要的信息使用session保存
Application:多个用户共享该对象,可以做计数器
pageContext:代表JSP页面上下文
page:代表JSP这个实例的本身
config:代表JSP对应的servlet的配置,可以得到web.xml中的参数