常用的JSP内置对象

request对象主要用于处理客户端请求![]()
![]()

request对象常用方法
方法名称 | 说明 |
String getParameter(String name) | 根据表单组件名称获取提交数据 |
String[ ] getParameterValues(String name) | 获取表单组件对应多个值时的请求数据 |
void setCharacterEncoding(String charset) | 指定每个请求的编码 |
RequestDispatcher getRequestDispatcher(String path) | 返回一个RequestDispatcher对象,该对象的forward( )方法用于转发请求 |

方法名称 | 说明 |
void addCookie(Cookie cookie) | 向客户端添加Cookie |
void setCookie(String type) | 设置Http相应的 contentType类型 |
void setCharacterEncoding(String charset) | 设置相应采用的字符编码类型 |
void sendRedirect | 将请求重新定位带一个新的url上 |
转发
转发是在服务器端发挥作用,将同一请求在服务器资源之间进行传递
客户端浏览器的地址栏不会显示转向后的地址
重定向
重定向是在客户端发挥作用,通过发送一个新的请求实现页面转向
在地址栏中可以显示转向后的地址
HTTP中的重定向和请求转发的区别
一句话,转发是服务器行为,重定向是客户端行为。为什么这样说呢,这就要看两个动作的工作流程:
转发过程:客户浏览器发送http请求----》web服务器接受此请求--》调用内部的一个方法在容器内部完成请求处理和转发动作----》将目标资源发送给客户;在这里,转发的路径必须是同一个web容器下的url,其不能转向到其他的web路径上去,中间传递的是自己的容器内的request。在客户浏览器路径栏显示的仍然是其第一次访问的路径,也就是说客户是感觉不到服务器做了转发的。转发行为是浏览器只做了一次访问请求。
重定向过程:客户浏览器发送http请求----》web服务器接受后发送302状态码响应及对应新的location给客户浏览器--》客户浏览器发现是302响应,则自动再发送一个新的http请求,请求url是新的location地址----》服务器根据此请求寻找资源并发送给客户。在这里location可以重定向到任意URL,既然是浏览器重新发出了请求,则就没有什么request传递的概念了。在客户浏览器路径栏显示的是其重定向的路径,客户可以观察到地址的变化的。重定向行为是浏览器做了至少两次的访问请求的。

Session:对象常用方法:
方法名称 | 说明 |
String getId() | 获取sessionid |
void setMaxInactiveInterval(int interval) | 设定session的非活动时间 |
int getMaxInactiveInterval() | 获取session的有效非活动时间(以秒为单位) |
void invalidate() | 设置session对象失效 |
void setAttribute(String key, Object value) | 以key/value的形式保存对象值 |
Object getAttribute(String key) | 通过key获取对象值 |
void removeAttribute(String key) | 从session中删除指定名称(key)所对应的对象 |
Session与窗口的关系
- 每个session对象都与一个浏览器窗口对应 ,重新开启一个浏览器窗口,可以重新创建 一个session对象(不同版本浏览器可能有所差别)
- 通过超链接打开的新窗口,新窗口的session与其父窗口的session相同

COOKIE和SESSION有什么区别?
cookie保存在客户端,session保存在服务器端,
cookie目的可以跟踪会话,也可以保存用户喜好或者保存用户名密码
session用来跟踪会话
jsp和servlet都是单例多线程的。
简单的登陆案例
主页面:
<div id="container">
<h2>请输入注册信息</h2>
<form action="control.jsp" method="post">
用户名:<input name="uname"/><br/>
密码:<input name="upwd" type="password"/><br/>
<br/><input type="submit" value="Login"/>
</form>
</div>
|
判断登陆证明页面:
String path = request.getContextPath();
Object obj = session.getAttribute("uname");
if (obj == null) { //证明没有登录
if ((String) obj == null) {
//证明没有登录
response.sendRedirect(path + "/computer2/login.jsp");
}
}
|
登陆页面:
String path = request.getContextPath();
//1.request
String name = request.getParameter("uname");
String pwd = request.getParameter("upwd");
if (name.equals("admin") && pwd.equals("admin")) {
//认证成功
//记录当前登录用户,将用户信息保存到session
session.setAttribute("uname", name);
//跳转到主页
request.getRequestDispatcher("index.jsp").forward(request,response);
} else {
response.sendRedirect(path + "/computer2/login.jsp");
}
|
登陆成功页面和注销页面:
<a href="logout.jsp">注销</a><br/>
<%=session.getAttribute("uname")+"你好" %>
|
消除session的服务器的记录:
String path = request.getContextPath();
session.removeAttribute("uname");
response.sendRedirect(path+"/computer2/login.jsp");
|