什么是内置对象?
内置对象:在jsp页面中不需要通过new关键字创建的对象,直接可以使用的对象。
1.request:请求对象,包含客户端的请求信息
需要在jsp中创建一个表单,用于demo
用户名:
篮球
足球
羽毛球
游泳
request对象常用的方法
获取当前资源的根路径
request.getContextPath()
获取客户端的请求地址
request.getRemoteAddr()
获取客户端请求资源路径
request.getRequestURI()
获得表单提交过来的数据
request.getParameter("参数名")
获取表单提交过来的数据集合
String[] s = request.getParameterValues("参数名");
解决request获得表单提交数据出现中文乱码的问题 我们需要打开tomcat中的conf目录,编辑server.xml,在Connector标签中加上URIEncoding="UTF-8"即可。
###2.response:封装jsp的响应
response的常用方法
//用于向页面输出信息
PrintWriter pw = response.getWriter();
pw.println("hello,response");
if(s.length>2)
//页面重定向
response.sendRedirect("sucess.jsp");
%>
3.session:用于长期存储用户信息保持会话的对象
向session中添加信息
//向session中添加信息
session.setAttribute("uname",name);
%>
在另一个jsp页面中获取session值
请求成功,欢迎你:
out.println(name);
%>
4.application:用于用户之间共享的数据对象,它开始于服务器的启动,直到服务器的关闭
向application中添加信息
//向application中添加信息
application.setAttribute("参数名",值);
在另一个jsp页面中获取值
application.getAttribute("参数名");
除此之外,我们可以继续在其他的页面获取到这个值,即使我们关闭当前浏览器,然后用另外一个浏览器打开,还能获取到application的值。对比request,session可以看到,当我们关闭当前浏览器,打开一个新的连接的时候,利用session和request获取到的值都已经丢失,而application的值还存在,所以说只要服务器不断开连接这个值就一直存在。
application的其他方法
//获得服务器引擎信息
String info = application.getServerInfo();
5.out:从response中获取的的字符打印流(PrintWriter)对象,用于向页面输出信息
out实例:实现9*9乘法表
//完成一个九九乘法表,页面输出,java实现
String[] colors = {"red","green","blue"};
for(int i=1;i<10;i++){
for(int j=1;j<=i;j++){
out.print(""+j+"*"+i+"="+(i*j)+" "+"");
}
out.println("
");
}
%>
6.pageContext:提供对jsp页面所有对象的信息的访问
7.page:类似于我们java中对象的this的引用
8.exception:异常对象,当页面中发生异常包装了所有异常信息的对象
9.config:获取当前web.xml配置信息的对象
#jsp内置对象的四大作用域
pageContext:当前页,存储在pageContext中的数据默认只能在当前页面访问和使用;
requeset:只能在一次请求中保存(如果需要持续保存,则需要请求转发,将request继续传递);
session:能够在整次会话中都能保存,只要在session的有效时间之内,并且浏览器未关闭的情况下;
application:能够在应用程序级别保存数据,即使客户端浏览器被关闭,都能长期有效,并且所有用户之间都能够共享数据。除非服务器停止。
请求转发和重定向
请求转发:发生在服务器端的跳转,客户端只发送一次请求,其他请求过程,由服务器完成,在客户端地址栏中显示的客户端发送的请求路径,并且请求转发可以将请求(request)对象继续传递。
request.serAttribute("参数名","值");
request.getRequestDispatcher("请求地址").forward(request,response);
发生在客户端的请求,客户端发送多次请求,寻找对应的资源,在客户端地址栏显示的是客户最后一次请求的地址,重定向无法将请求(request)继续传递。
resposne.sendRedirect("请求的地址")
特要说明的是:如果我们将参数放在request内置对象中进行传递,那么我们只能采用请求转发的方式,因为请求转发只发生一次请求,而重定向会发送多次请求,而request对象的值,只能在一次请求中进行传递,所以,只能是请求转发的方式。而且,请求转发之后网页栏中显示的是发送请求的页面的地址,重定向显示的是最后一次请求的地址,而且request对象丢失。