请求转发,重定向
Posted zxq6
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请求转发,重定向相关的知识,希望对你有一定的参考价值。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
pageEncoding="UTF-8"%>
//page:指定的属性;
//language:jsp页面使用的脚本语言;
//import:导入类;
//pageEncoding:jsp文件自身编码;
//contentType:浏览器解析jsp的编码;
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
</body>
</html>
</html>
jsp内置对象:
1.out:向客户端输出内容;
2.pageContext:
3.request:请求对象,存储客户端向服务端发送的请求信息;
常见方法:
String getParameter(String name):根据请求的字段名key,返回字段值value;
String[] getParameterValues(String name):根据请求的字段名key,返回多个字段值value(checkbox)
void setCharacterEncoding("编码格式"):设置请求编码;
getRequestDispatcher("b.jsp").forward(request,response):请求转发的方式跳转页面 a跳转到b;
ServerletContext getServerContext():通过项目的ServerletContext对象;
4.response:响应对象;
提供的方法:
1.void addCookie(Cookie cookis);服务端向客户端增加cookie对象;
2.void sebdRedirect(String locstion) throws IOException;页面跳转的一种方式(重定向);
3.void setContentType(String type):设置服务端响应的编码(设置服务端的ContentType类型)
请求转发 | 重定向 | |
地址栏是否发生改变 | 不变(check.jsp) | 改变(success.jsp) |
是否保留第一次请求时的数据 | 保留 | 不保留 |
请求的次数 | 1 | 2 |
转发:
张三(客户端)-服务窗口(a)-服务窗口(B)
重定向:
张三(客户端)-服务窗口(A)-去找B
张三(客户端)-服务窗口(B)-结束
5.session:
- Cookie(客户端,不是内置对象):Cooki是由服务端生成的,再发给客户端保存;
相当于本地缓存,客户端(hello.mp4,zs/abc)-服务端(hello.mp4;zs/abc)
作用:提高访问服务端的效率,但是安全行较差。
Cookie:name=value
javax.servlet.http.Cookie
public Coookie(String nsme,String value)
String getName()
String getValue()
void setMaxAge(int expiry);最大有效期(秒)
服务端准备Cookie:
response.addCookie(Cookie cookie)
页面跳转(转发,重定向)
客户获取cookie:request.getCookies();
建议cookie只保存英文数字,否则需要进行编码、解码
使用Cookie实现 记住用户名 功能
2.session:会话
a.浏览网站:开始-关闭
b.购物:浏览-付款-退出
c.电子邮件:浏览、写邮件、退出
开始-结束
session机制:
客户端第一次请求服务端时,服务端会产生一个session对象(用于保存该客户的的信息);
并且每个session对象都会有一个唯一的sessionID(用于区分其他session);
服务端又会产生一个cookie,并且该cookie的name=JESSIONID,value=服务端sessionID的值;
然后服务端会在响应客户端的同时,将该cookie发送给客户端,至此客户端就有了一个cookie(JESSIONID);
因此,客户端的cookie就可以和服务端的session一一对应(JESSIONID-sessionID)
客户端在第二次请求服务端时:服务端会先用客户端的cookie中的JESSIONID去服务端的session中匹配sessionid,如果匹配成功(cookie jessionid和session sessionid),说明用户不是第一次访问;
session方法:
String getId():获取sessionid
boolean isNew():判断是否为新用户(第一次访问)
void invalidate():使session失效(退出登录、注销)
setAttribute();
getAttribute();
void setMaxInactiveInterval(秒):设置最大有效非活动时间;
int getMaxInactiveInterval(秒):获取最大有效非活动时间;
Cookie:
不是内置对象,要使用必须要new;
但是,服务端会自动产生一个(服务端自动new一个cookie)name=JESSIONID的cookie,并返回给客户端
cookie和session的区别:
session | cookie | |
保存的位置 | 服务端 | 客户性 |
安全性 | 较安全 | 较不安全 |
保存的内容 | Object | String |
JSP0大内置对象:
pageContext JSP页面内容
request 请求对象
response 响应对象
session 会话对象
application 全局对象
config 配置对象(服务器配置信息)
out 输出对象
page 当前JSP页面对象(相当于java中的this)
exception 异常对象
四种范围对象:
pageContext JSP页面内容 当前页面有效 页面跳转后无效
request 请求对象 同一次请求有效 其他请求无效(请求转发后有效;重定向后无效)
session 会话对象 同一次会话有效 无论怎么跳转,都有效;关闭/切换浏览器后无效;从登录-退出之间全部有效
application 全局对象 全局有效(整个项目有效) 整个项目运行期间都有效(切换浏览器任然有效);关闭服务、其他项目无效;
以上四个范围对象,通过setAttribute()赋值,通过getAttribute()取值;
以上四个范围对象,尽量使用最小的范围。因为范围越大,造成的性能损耗就越大;
以上四个对象共有的方法:
Object getAttribute(String name):根据属性名,或者属性值;
void setAttribute(String name ,Object obj):设置属性值(新增,修改)
setAttribute("a","b");如果a对象之前不存在,则新建一个a对象;
如果a之前已经存在,则将a的值改为b
void removeAttribute(String name):根据属性名,删除对象
6.application:全局对象
String getContextPath()虚拟路径;
String getRealPath(String name):绝对路径(虚拟路径 相对的绝对路径)
7.config:
8.page:
9.exception:
以上是关于请求转发,重定向的主要内容,如果未能解决你的问题,请参考以下文章