内置对象
pageContext JSP页面容器
request 请求对象
session 会话对象
appliation 全局对象
response 响应对象
config 配置对象(服务器配置信息)
out 输出对象
page 当前JSP页面对象(相当于java中的this)
exception 异常对象
四种范围对象
范围
pageContext:jsp页面容器(page对象): 当前页面有效(页面跳转无效)
request:请求对象; 同一次请求(请求转发有效,重定向无效)
session 会话对象 同一次会话(从登陆->退出都有效)
applicaton 全局对象 全局有效(当前项目有效)服务器关闭、其他项目无效
多项目共享、重启后任然有效:JNDI技术
以上范围对象,尽量使用最小的范围, 对象范围越大,造成性能损耗越大
request:请求对象;存储“客户端向服务器发送的请求信息
get提交方式:method=“get“ 和地址栏、超链接请求方式默认 都属于get提交
get与post 请求方式上的区别:
a、get 在地址栏显示 请求信息 (但是地址栏能够容纳的信息有限 4~5kb; 如果请求数据存在大文件 )
b、 文件上传 必须是post
推荐post
统一请求编码方式
get:
a、 统一每一个变量 的编码(每一个都改)
name = new String(name.getBytes(“ios-8859-1”),”utf-8”)
tomcat 7(ios-8859-1)
b、 修改 server.xml 一次性的修改
在改端口 的位置后加URIEncoding=”UTF-8”
post:
request.setCharacterEncoding("utf-8") ;
response 响应对象
代码
response.sendRedirect("success.jsp") ;//页面跳转:重定向, 导致数据丢失
//页面跳转:请求转发, 可以获取到数据,并且 地址栏 没有改变(仍然保留 转发时的页面check.jsp)
equest.getRequestDispatcher("success.jsp").forward( request,response);
示例:
login.jsp -> check.jsp ->
两种方式的差别
请求转发 | 重定向 | |
---|---|---|
地址栏是否改变 | 不改变(check.jsp) | 改变(success.jsp) |
是否保留第一次请求时的数据 | 保留 | 不保留 |
请求的次数 | 1 | 2 先check.jsp –> success.jsp |
session(服务端)
Cookie(客户端 ,不是内置对象):
有服务端产生,再发给客户端保存,相当于 本地缓存的作用,提高访问效率 但是安全性较差
Cookie : key = value
javax.servlet.http.Cookie
public Cookie(String name , String value)
String getName();获取name
String getValue();获取value
void sexMaxAge(int expiry);设置最大有效期(秒)
过程
1、服务端准备Cookie:
2、response。addCookie(Cookie cookie)
3、页面跳转(转发、重定向)
4、客户获取cookie:request.getCookies()
特点
a、 服务端增加cookie:response对象: 客户端获取对象:request对象
b、 不能直接获取某一单独对象,只能一次性将 全部cookie拿到
c、 除了自己设置的cookie对象外, 还有一个name为JSESSIONID的cookie
建议cookie只保存 数字英文 否则需要进行编码、解码
3、使用cookie记住 用户名 功能
4、session 会话:
a、浏览网站:开始—结束
b、购物 浏览、付款、退出
session机制:
1、客户端第一次请求服务端时,(jsessionId - sessionid)服务端会产生一个session 对象(用于保存该客户的信息);
、并且每个session对象 都会有唯一的sessionID(用于区分其他的session);
、服务端也会 产生一个cookie ,并且 该cookie 的name= JSEESIONID,value=服端sessionID的值;
、然后 服务端会在 响应客服端的同时 将该cookie发送给客户端 自此 客户端就有了一个cookie(JSESSIONID);
因此,客户端的cookie就可以和服务端的sessionID一一对应 (JSESSIONID-- sessionID)
2、客户端第二n/次请求服务端时:
服务端会先根据客户端cookie 中的JSEESSIONID 去服务端中匹配sessionID如果匹配成功,
说明此用户不是第一次访问,无需登录;
session方法:( 在同一次会话中共享 )
String getID() : 获取sessionID
boolean isNew() : 判断是否是新用户(第一次访问)
void invalidate() : 使session失效;
属性:
getAttribute()
setAttribute()
void setMaxInactiveInterval(秒): 设置最大有效 非活动时间
int getMaxInactiveInterval(); 获取最大有效 非活动时间
Cookie
a、不是内置对象 要使用,必须new
b、但是,服务端会自动生成一个(服务器自动new一个cookie) name = JSESSIONID的cookie 并返回给客户端
cookie 与 session 的区别
session | cookie | |
---|---|---|
保存的位置 | 服务端 | 客户端 |
安全性 | 较安全 | 较不安全 |
保存的内容 | object | string |
applicaton 全局对象
String getContentPath() 虚拟路径
String getRealPath(“虚拟路径”)虚拟路径 相对的 绝对路径
具体方法介绍
四个对象共有的方法
object getAttribute(String name);
void setAttribute(String name,object obj)设置属性值(增加、修改)
void removeAttribute(String name)删除对象
1、request 对象, 获取提交的信息
from action=“JSP页面” method=get (显示地址栏)| post(不显示)
JSP页面String getParameter(String s)
String[] getParameterValues(String s)
设置JSP请求编码 request.setCharacterEncoding("UTF=8");
getRequestDispatcher(“B.jsp”).forword(request,response) (常用写法):请求转发 的方式跳转A -> b
ServletContext getServerContext(); 获取项目的ServletContext 对象
getProtocol() 获取用户向服务器提交信息所使用的通信协议, 比如http/1.1等。
getServletPath() 获取用户请求的JSP页面文件的目录。
getContextPath() 获取用户请求的当前Web服务目录。
getRemoteAddr() 获取用户的IP地址。
getRemoteHost() 获取用户机的名称(如果获取不到,就获取 IP地址)。
getServerName() 获取服务器的名称。
getServerPort() 获取服务器的端口号。
2、response对象 动态响应
void addCookie(Cookie cookie)向服务器增加cookie对象
sendRedirect(Sting location) throws IOException :页面跳转的一种方式(重定向)
void setContentType(String type):设置服务器响应的编码( 服务器contentType) s 可取得值:text/html , text/plain , image/gif等
3、session对象 记录会话(相关链接) 同一个id号是同一个用户 信息留在服务器端
1.Long getCreationTime():返回Session创建时间
2.Public String getid():返回session创建时JSP引擎为其分配的唯一ID
3.public void setAttribute (String key ,Object obj):session对象可以调用 该方法将参数Object指定的对象obj添加到
session对象中,并为添加的 对象指定了一个索引关键字。
4.public Object getAttribute(String key):获取session对象索引关键字是 key的对象。
5.session对象使用setMaxInactiveInterval(int interval)方法设置 最长的“发呆”状态时间。默认发呆时间30分钟
4、application对象 有服务器创建
1、public void setAttribute(String key ,Object obj)
application对 象可以调用该方法将参数Object 指定的对象 obj添加到application 对象中,
并为添加的对象指定了一个索引关键字。
2、public Object getAttribute(String key)获取application对象含 有的关键字是key的对象。
3、public Enumeration getAttributeNames()产生一个枚举对象,
该枚举对象使用nextElemets()遍历application 中的各个对象对应 的关键字
5、out 对象
1.out.println() 向客户端输出字符串
2.out.flush() 将缓冲区内容输出到客户端
3. out.clearBuffer() 清除缓冲区的内容
param标记不能独立使用,需作为jsp:include、 jsp:forward、jsp:plugin标记的子标记来使用。
param动作标记语法格式是:
<jsp:param name= "名字" value= "指定给param的值">用request可以得到传来的值