pageContext可以获取其他八个内置对象,本身作为域对象来使用
pageContext.getRequest();
pageContext.getResponse();
pageContext.getOut() ;
jsp内置对象,就是在编写jsp页面时,不需要做任何声明就可以直接使用的对象。
JSP内置对象——out
out
对象是
jspWriter
类的实例
out对象常用的方法
void print(Object c) 向客户端打印数据
(
将各种类型的数据转换成字符串
)
void write(charser) 向客户端打印数据
(
字符、字符数组、字符串
)
void println(Object c) 向客户端打印数据(将各种类型的数据转换成为字符串)并
换行
JSP内置对象——request
request对象只要用于处理客户端请求
request
对象的常用方法
方法名称
说明
String getParameter(String name) 根据页面表单组件名称获取页面提交方式
String[] getParameterValues(String name) 获取一组以上相同名称命名的表单组件提交的数据
void setCharacterEncoding(String charset) 指定每个请求的编码,在调用
request.getParameter()
方法之前进 行设定,可以解决中文乱码的问题
RequestDispatcher getRequestDispatcher(String path) 返回一个javax.servlet.RequestDispatcher对象,该对象的forward()方法用于转发请求
产生乱码的原因
1
、
jsp
页面本身的编码
pageEncoding="utf-8"
2
、浏览器渲染页面采用的编码
contentType= "text/html; charset=utf-8"
3
、服务器保存数据采用的编码
(request)
//post
提交方式 解决乱码
request.setCharacterEncoding("utf-8");
//get
提交方式 解决乱码
name=
new
String(name.getBytes(
"ISO-8859-1"
),
"utf-8"
);
//
修改配置文件
server.xml
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="UTF-8"
/>
get
和
post
的区别
1.get是从服务器上获取数据,
post
是向服务器传送数据,
2.get传送的数据量较小,不能大于
2KB
。
post
传送的数据量较大,一般被默认为不受限
制。
3.get安全性非常低,
post
安全性较高。但是执行效率却比
Post
方法好。
4.在进行文件上传时只能使用
post
而不能是
get
。
Jsp页面中的
form
标签里的
method
属性为
get
时调用
doGet()
,为
post
时调用
doPost()
。
GET方式提交
:地址栏(URL)会跟上参数数据。并以?开头,多个参数之间以&分割
http://localhost:8080/项目名/路径地址?userName=admin&pwd=123456
POST方式提交
:参数不会跟在URL后面,参数而是跟在请求的实体内容中(应该就是输入框之类
的),没有?开头,多个参数之间以&分割
JSP内置对象——response
response
对象用于响应客户请求并向客户端输出信息
response.sendRedirect(
"loginSuccess.jsp?userName="
+name);
//
重定
向
request.getRequestDispatcher(
"loginSuccess.jsp"
).forward(request, re
sponse);
//
转发
转发跟重定向的区别
1、从数据共享上
转发是在服务器端发挥作用,将同一请求在服务器资源之间进行传递
重定向是在客户端发挥作用,通过发送一个新的请求实现页面跳转
Forword是一个请求的延续,可以共享
request
的数据
Redirect开启一个新的请求,不可以共享
request
的数据
在重定向方式下传递数据需要使用
“
?
”
连接在
URL
地址后面,多个值的使用采用
&
进行分
隔
2、从地址栏
Forword转发地址栏不发生变化
Redirect重定向地址栏发生变化
3、从运行方面来说
Forword一般用于用户登陆的时候,根据角色转发到相应的模块
Redirect一般用于用户注销登陆时返回主页面或跳转到其它的网站等
4、从效率来说
Forword:高
Redirect:低
转发Forword只能转发到当前的
web
应用内的资源
重定向Redirect可以跳转到当前的
web
应用中,或其他
web
应用,甚至是外部域名网站
JSP内置对象——session
一个会话就是用户通过浏览器与服务器之间进行的一次通话,它可以包含浏览器与
服务器之间的多次请求,响应过程。简单地说就是在一段时间内,一个用户与
web
服务器的一连串的交互过程。
会话技术:
1.cookie
技术
——
会话数据保存在浏览器客户端
2.session
技术
——
会话数据保存在服务器端
session技术
session
对象常用的方法
String getId()
获取
sessionid
void setMaxInactiveInterval(int interval)
设定
session
的非活动时间
int getMaxInactiveInterval() 获取session
的非活动时间,以秒为单位
void invalidate() 设置session
对象失效
void setAttribute(String key,Object value) 以
key/value
的形式将对象保存到
session
Object getAttribute(String key) 通过key
获取
session
中保存的对象
void removeAttribute(String key) 从session
中删除指定名称
(key)
所对应的
HttpSession
类,用于保存会话数据
session
特点:会话数据保存在服务器端的内存中
1
、创建
session
对象
HttpSession session=request.getSession(true);
HttpSession session=request.getSession();
HttpSession session=request.getSession(false);
前两者一样,去内存当中找对应的
session
对象,找到了就取出来,找
不到的话就重新创建;第三个也是去内存中找对应的
session
对象,找
到就取出,没有就返回
null
服务器判断是否创建了
session
对象,是通过一个唯一的表示
sessionid
来实现的。
在客户端保存用户信息使用的是
cookie
,因此保存
sessionid
的方式也是
使用
cookie
来实现的。
通过超链接的打开的新窗口,新窗口的
session
与其父窗口的
session
相
同
cookie
技术
补充知识
cookie
的值默认保存在浏览器端的内存中
cookie
类用于存储会话数据
1
、创建
cookie
对象
Cookie cookie=new Cookie("name","zhaojian");
Cookie cookie=new Cookie("age","18");
2
、将
cookie
发送给客户端
response.addCookie(cookie);
3
、获取客户端请求过来的
cookie
数据
request.getCookie(cookie);
例如:
Cookie[] cookies= request.getCookies( );
for(Cookie coo:cookies){
System.out.println(coo.getName()+"="+coo.getValue());
}
4
、
setMaxAge()
设置
cookie
保存的有效时间 单位是秒
cookie.setMaxAge()
正整数:表示
cookie
数据保存浏览器的缓存目录
(
硬盘中
)
,数值表示保
存的时间
负整数:表示
cookie
数据保存浏览器的内存中。浏览器关闭
cookie
就没
了
零:表示删除同名的
cookie
数据
5
、
setPath()
设置有效路径,只有在有效路径,客户端才会把
cookie
数据带过
来
cookie.setPath("
路径
")
6
、
cookie
保存数据不能保存中文的字符串
include指令
可以将一些共性的内容写入一个单独的文件中,然后通过
include
指令引用该文件,
从而降低代码的冗余问题,并且修改也更加方便。
报错的状态码:
301 永久重定向
302 临时重定向
304 服务端 未改变
403 访问无权限
200 正常
404 路径
500 内部错误
400
请求错误
-
客户端的错误