超级详细JSP 九大隐式对象

超级详细JSP 九大隐式对象

JSP内置对象是JSP事先创建好的一组对象,不使用new关键字就可以直接使用。
所有JSP页面均可使用(只要你是JSP页面,就可以使用JSP九大内置对象)
只有在JSP表达式(<%=%>)或JSP脚本(<%%>)中才可使用
在这里插入图片描述
输入输出对象

1.request
request对象是javax.servlet.http.HttpServletRequest类的实例 (HttpServletRequest request = new HttpServletRequest();),每当用户请求一个jsp页面的时候,jsp引擎就会制造一个新的request对象来代表这个新的请求
如何向一个JSP页面发起请求?
1.当用户在浏览器地址栏输入URL
2.单击Web页面中的超链接(a标签)
3.提交表单可以向一个JSP页面发起请求
request主要用于获取页面元素信息:
getParameter() 获取单个的页面元素的值
e.g.文本框(text)、单选按钮(radio)、密码框(password)、隐藏域(hidden)、下拉框(select)、文本域(textarea)等,一般都会使用getParameter()方法进行接收,因为这些控件在使用时参数的名称都只有一个不会重复
getParameterValues 获得页面提交的数组(多个值,类似于多选)
e.g.像复选框(checkbox),一般参数的名称都是重复的,是一组参数,所以只能使用getParameterValues()接收,如果不小心使用了getParameter()方法,则只会接收第一个选中的内容。
setCharacterEncoding 设置字符编码
request.getContextPath() 获得项目路径
如图:
在这里插入图片描述
2.response
response对象是javax.servlet.http.HttpServletResponse类的实例
当服务器创建request对象时会同时创建用于响应这个客户端的response对象,所有服务端对客户端的响应信息都应该通过response输出
页面的两种方式跳转
response .sendRedirect(“路径”);
request.getRequestDispatcher(“路径”).forward(request, response);

3.out
out是javax.servlet.jsp.JspWriter类的实例化对象,主要功能就是完成页面的输出操作,使用println()或print()方法输出,但是从实际的开发来看,直接使用out对象的几率较小,一般使用表达式(<%=%>)完成输出的操作。
常用方法:
out.print(内容) 向页面中输出内容
out.println (内容) 向页面中输出内容并换行,这里的换行指的是浏览器源代码的换行。

out是向浏览器输出数据
System.out.println()是向控制台输出数据

作用域通信对象(四大作用域)

1.pageContext
作用域:当前页面 一个page
request
作用域:当前请求
一旦请求发生改变,那么存在于request中的数据将不会找到
pageContext对象是javax.servlet.jsp.PageContext类的实例,主要表示一个JSP页面的上下文。pageContext对象中放置的属性只能作用于当前页面。这个对象存储了request对象、application对象、config对象、session对象、out对象、response对象的引用。
void setAttribute(String name,Object value); 往pageContext对象中设置一个属性,请注意,如果多次调用该方法,并且使用相同的name,那么会覆盖上一次的值。
Object getAttribute(String name); 从pageContext对象中通过属性名取出对应属性值,如果指定属性名不存在则返回null
void removeAttribute(String name); 从pageContext对象中移除指定属性名的属性,如果指定属性名不存在,什么也不做
void setAttribute(String name,Object value,int scope) 往指定作用域对象中设置一个属性
Object getAttribute(String name, int scope) 从指定作用域对象中通过属性名获得对应属性值
removeAttribute(String 属性名,int 作用域范围),从指定作用域对象中移除指定属性名的属性
Object findAttribute(String name) 在所有作用域对象中通过属性名查找对应的属性值

2.session
作用域:当前会话:只要浏览器不关闭值一直存在;不论发送的是什么请求
// 设置session的超时时间;默认超时时间为30分钟;session超时是在当前页面不访问不操作30分
session表示一个会话,我们可以把一个会话内需要共享的数据保存到session对象中!
什么是会话?
可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应。例如你给10086打个电话,你就是客户端,而10086服务人员就是服务器了。从双方接通电话那一刻起,会话就开始了,到某一方挂断电话表示会话结束。在通话过程中,你会向10086发出多个请求,那么这多个请求都在一个会话中。

常用方法:
String getId() 获取当前session会话的唯一id
void setAttribute(String name,Object value); 往session对象中设置一个属性,请注意,如果多次调用该方法,并且使用相同的name,那么会覆盖上一次的值。
Object getAttribute(String name); 从session对象中通过属性名取出对应属性值,如果指定属性名不存在则返回null
Void removeAttribute(String name); 从session对象中移除指定属性名的属性,如果指定属性名不存在,什么也不做
setMaxInactiveInterval(秒数) 设置session超时时间,注:tomcat默认session超时时间为30分钟
3.aplication
作用域:当前服务;只要服务不重启,那么作用域一直存在

javax.servlet.ServletContext 类的实例。通过向application中添加属性,则在web应用中的所有JSP文件都能访问到这些属性。application对象实现了用户间数据的共享,可存放全局变量。application对象开始于web服务器(tomcat)的启动,结束于web服务器(tomcat)的关闭。
常用方法:
void setAttribute(String name,Object value); 往application对象中设置一个属性,请注意,如果多次调用该方法,并且使用相同的name,那么会覆盖上一次的值。
Object getAttribute(String name); 从application对象中通过属性名取出对应属性值,如果指定属性名不存在则返回null
Void removeAttribute(String name); 从application对象中移除指定属性名的属性,如果指定属性名不存在,什么也不做
Servlet 对象

1.Page对象
代表当前对象
page对象就是指向当前JSP页面本身,有点像类中的this指针,它是java.lang.Object类的实例。

2.Config对象
获得servlet的配置信息
config是对象是javax.servlet.ServletConfig接口的实例化对象,主要功能是取得一些初始化的配置信息

错误对象
Exception
exception对象是一个异常对象,当一个页面在运行过程中发生了异常,就产生这个对象。如果一个JSP页面要应用此对象,就必须把isErrorPage设置为true,否则无法编译。
errorPage=“error.jsp” 用来指向错误页面(友好页面)
isErrorPage=“true” 规定当前页面是错误页面
在这里插入图片描述

四大作用域:
在这里插入图片描述
page作用域对应的作用域对象是pageContext:作用域仅限于当前页面对象,离开当前JSP页面(无论是redirect还是forward),则pageContext中的所有属性值就会丢失。
request作用域对应的作用域对象是request:作用域是同一个请求之内,在页面跳转时,如果通过forward方式跳转,则forward目标页面仍然可以拿到request中的属性值。
如果通过redirect方式进行页面跳转,由于redirect相当于重新发出的请求,此种场景下,request中的属性值会丢失。
session作用域对应的作用域对象是session:session的作用域是在一个会话的生命周期内,会话失效(关闭浏览器或session超时),则session中的数据也随之丢失。
application作用域对应的作用域对象是application:作用域是最大的,只要服务器不停止,则application对象就一直存在,并且为所有会话所共享。

forward和redirect的区别:
forward跳转:
request.getRequestDispatcher(“路径”).forward(request, response);
地址栏不会发生改变,数据共享,一次请求,执行效率高。

redirect跳转:
response .sendRedirect(“路径”)
地址栏会发生改变,数据不共享,多次请求,执行效率低。

猜你喜欢

转载自blog.csdn.net/sunrj_niu/article/details/106124116