JSP隐式对象:
JSP隐式对象是可以直接在jsp页面使用的对象,不用使用"new"来获取实例
JSP九大内置对象:
1 | 对象名称 | 类型 | 中文名称 |
---|---|---|---|
1 | request | HttpServletRequest | 请求对象 |
2 | response | HttpServletResponse | 响应对象 |
3 | session | HttpSession | 会话对象 |
4 | application | ServletcContext | 全局对象 |
5 | config | ServletConfig | 配置对象 |
6 | exception | 异常对象 | |
7 | page | this | 本JSP页面 |
8 | out | JspWriter | 输出对象 |
9 | pageContext | JSP页面容器 |
常用的有五个内置对象
request ,response, session,application,out (在这里只说4个)
request(请求对象)
request里重要的方法是setAttribute和getAttribute
<%
//存储request对象
request.setAttribute("name","这里是名字");
//返回name属性的值
String name = (String)request.getAttribute("name");
%>
<%= name %>
页面效果
response(响应对象)
response对象的转发和重定向
转发:
张三(客户端) 到 -> 【窗口 A (服务端 ) -> 窗口B 】
比如张三去问A借某个东西,A没有,于是A问B借。B把东西给A,A又把东西给张三。张三和B之间没有任何交集
重定向:
张三(客户端) -> 窗口 A (服务端 ) ->去找B
张三(客户端) -> 窗口 B (服务端 ) ->结束
例:张三问A借东西,A没有,A给张三说:你去问B借。然后张三就又去问B借,借到之后结束
// 转发,地址栏不会改变
request.getRequestDispatcher("two.jsp").forward(request,response);
//重定向,地址栏会发生改变
response.sendRedirect("MyJsp2.jsp");
转发 | 重定向 | |
---|---|---|
地址栏是否改变 | 不变 | 改变 |
是否保留第一次 | 保留 | 不保留 |
请求的次数 | 1 | 2 |
跳转发生的位置 | 服务端 | 客户端发出的第二次跳转 |
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次 存包:商场 判断此人是 之前已经存过包(通过你手里是否有钥匙)
如果是老顾客(有钥匙),则不需要分配;该顾客手里的钥匙 会 和柜子 自动一一对应。
session方法:
String getId() :获取sessionId
boolean isNew() :判断是否是 新用户(第一次访问)
void invalidate():使session失效 (退出登录、注销)
void setAttribute()
Object getAttribute();
void setMaxInactiveInterval(秒) :设置最大有效 非活动时间
int getMaxInactiveInterval():获取最大有效 非活动时间
application全局变量
String getContextPath() 虚拟路径
String getRealPath(String name): 绝对路径(虚拟路径 相对的绝对路径)