servlet的4大作用域和9大内置对象

序号隐式对象说明描述作用域
1request转译后对应HttpServletRequest/ServletRequest对象得到用户信息Request
2response转译后对应HttpServletRespons/ServletResponse对象服务器向客户端的回应信息Page
3session转译后对应HttpSession对象用来保存用户信息Session
4application转译后对应ServletContext对象所有用户的共享信息Application
5out转译后对应JspWriter对象,其内部关联一个PringWriter对象用于页面输出Page
6page转译后对应this指当前页面转换后的servlet类的实例Page
7config转译后对应this服务器配置,可以取得初始化参数Page
8exception转译后对应Throwable对象,代表由其他JSP页面抛出的异常对象,只会出现于JSP错误页面(isErrorPage设置为true的JSP页面)表示jsp页面所发生的异常,在错误页中才起作用Page
9pageContext转译后对应PageContext对象,它提供了JSP页面资源的封装,并可设置页面范围属性jsp页面容器Page

只有在jsp脚本和jsp表达式中,才能使用内置对象!
流转对象:request,response,out
作用域对象:application,session,request,pageContext。
在这里插入图片描述

Jsp隐含变量

1、out来源于Java.io.Writer类,它用于发送输出流到客户端。
2、request来源于javax.servlet.http.HttpServletRequest接口。它被关联到每一个HTTP请求。
3、response 来源于javax.servlet.http.HttpServletResponse。response对象用于把取得的数据返回到客户端。
4、pageContext 提供访问JSP页面的命名空间。它也提供用来访问其他的JSP隐含对象。
5、session 来源于javax.servlet.http.HttpSession。它用于存储客户端请求的信息,因此它是有状态交互式的。
6、application 来源于javax.servlet.ServletContext。
7、config 来源于ServletConfig,它包含了当前JSP/Servlet所在的WEB应用的配置信息。
8、page 来源于当前被访问JSP页面的实例化。它实际使用的是JSP转换成的Servlet。
9、exception 用于捕获JSP抛出的异常。它只有在JSP页面属性isErrorPage=true时才可用。

out对象:

out.jsp:

<body>
	<%
	out.println("first line <br />");
	response.getWriter().println("second line <br />");
	%>
</body>

结果:

second line 
 first line 

out对象的数据放在缓冲区中,等jsp页面加载完毕才会加载处理

pageContext对象

①javax.servlet.jsp.PageContext(抽象类)类型,pageContext 对象直译时可以称作“页面上下文”对象,代表的是当前页面运行的一些属性。此对象提供自身和其他3个作用域层次的属性查询和修改能力,同时可以获取其他8个内置对象。它也提供了转发请求到其它资源和包含其他资源的方法:该对象的方法都是抽象方法。作用域为page(页面执行期)。
②常用的方法有 :findAttribute、getAttribute、getAttributesScope 和getAttributeNamesInScope,一般情况下pageContext对象用到得也不是很多,只有在项目所面临的情况比较复杂的情况下,才会利用到页面属性来辅助处理。

他有4个作用范围:

pageContext.PAGE_SCOPE:表示页面范围
pageContext.REQUEST_SCOPE:表示请求范围
pageContext.SESSION_SCOPE:表示会话范围
pageContext.APPLICATION_SCOPE:表示web应用程序范围

pageContex.jsp:

	<%
		//获取request对象
		HttpServletRequest req=(HttpServletRequest)pageContext.getRequest();
		//设置page范围内属性
		pageContext.setAttribute("str", "java",pageContext.PAGE_SCOPE);
		//设置request范围属性
		req.setAttribute("str", "java web");
		//获得page范围属性
		String str1=(String) pageContext.getAttribute("str",pageContext.PAGE_SCOPE);
		String str2=(String) pageContext.getAttribute("str",pageContext.REQUEST_SCOPE);	
	%>
	<%="page范围:"+str1 %><br />
	<%="request范围:"+str2 %><br />

结果:

page范围:java
request范围:java web

request对象

①javax.servlet.ServletRequest的子类型,equest 对象代表的是来自客户端的请求,例如我们在FORM表单中填写的信息等,封装了由WEB浏览器或其它客户端生 成地HTTP请求的细节(参数,属性,头标和数据等),是最常用的对象。作用域为request(用户请求期)。
②常用的方法有:getParameter、getParameterNames 和getParameterValues等,通过调用这几个方法来获取请求对象中所包含的参数的值,方法可查看API。

response对象

①javax.servlet.ServletResponse的子类型,response 对象代表的是对客户端的响应,此对象封装了返回到HTTP客户端的输出,向页面作者提供设置响应头标和状 态码的方式。经常用来设置HTTP标题,添加cookie,设置响应内容的类型和状态,发送HTTP重定向和编码URL等。作用域为page(页面执行期)。
②也就是说可以通过response 对象来组织发送到客户端的数据。但是由于组织方式比较底层,所以不建议普通读者使用,需要向客户端发送文字时直接使用。
③常用方法有:sendRedirect、setContentType、encodeRedirectURL、addHeader、addCookie、getWriter等

session对象

①avax.servlet.http.HttpSession类型,主要用于跟踪对话。HttpSession是一个类似哈希表的与单一WEB浏览器会话相关的对象,它存在于HTTP请求之间,可以存 储任何类型的命名对象。作用域session(会话期)。若不需要在请求之间跟踪会话对象,可以通过在page指令中指定session=“false”。

②session对象代表服务器与客户端所建立的会话,当需要在不同的JSP页面中保留客户信息的情况下使用,比如在线购物、客户轨迹跟踪等。“session” 对象建立在 cookie的基础上,所以使用时应注意判断一下客户端是否打开了cookie。注意:不要把cookie也理解为九大内置对象之一,cookie主要是实现了session的作用。

概要:
HTTP是无状态(stateless)协议;
Web Server 对每一个客户端请求都没有历史记忆;
Session用来保存客户端状态信息;
由Web Server 写入;
存于客户端;
客户端的每次访问都把上次的session记录传递给Web Server;
Web Server读取客户端提交的session来获取客户端的状态信息。

③常用方法有:getAttribute、setAttribute、removeAttribute、setMaxInactiveInterval、getId、 getValue、 getValueNames和putValue等。

application对象

①javax.servlet.ServletContext类型,作用域是application(整个程序运行期)。它提供了关于服务器版本,应用级初始化参数和应用内资源绝对路径,注册信息的方 式,负责提供应用程序在服务器中运行时的一些全局信息。

②常用的方法有:getMimeType、getRealPath、getResourceAsStream等。

③获取ServletContext对象的途径:

方法一:通过GenericServlet提供的 getServletContext()

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext servletContext3 = getServletContext();
}

方法二:通过ServletConfig提供的getServletContext()
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext servletContext2 = getServletConfig().getServletContext();
}

方法三:通过HttpServletRequest获取
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext servletContext1 = req.getServletContext();
}

方法四:通过HttpSession获取。
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext servletContext = req.getSession().getServletContext();
}

servlet的环境通过调用getServletConfig().getContext()方法获得。

config对象

①javax.servlet.ServletConfig类型,“config” 对象提供一些配置信息,作用域为page(页面执行期)。

②常用的方法有:getInitParameter和getInitParameterNames,以获得Servlet初始化时的参数。

exception对象

exception.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" errorPage="error.jsp" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
   <%
    int a=4;
    int b=0;
   %>
输出结果为:<%=(a/b) %> <%--此处会产生异常--%>
</body>
</html>

error.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="true" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%=exception.getMessage()%><br>
</body>
</html>

page对象

①java.lang.Object类型,指向页面自身的方式。作用域为page(页面执行期)。

②“page” 对象代表了正在运行的由JSP文件产生的类对象,不建议一般读者使用。

四个作用域:

四个域对象:

pageContext  --  page域   (本jsp对象)                           

request  --  request域(本请求)

session  -- session域(本会话)

application  --  context域(web工程)

1)域对象作用:保存数据和获取数据,用于数据共享。

2)域对象方法:

setAttribute("name",Object) 保存数据

getAttribute("name")  获取数据

removeAttribute("name") 清除数据

3)域对象作用范围:

page域: 只能在当前jsp页面中使用(当前页面)

request域: 只能在同一个请求中使用(转发)

session域: 只能在同一个会话(session对象)中使用(私有的)

 context域: 只能在同一个web应用中使用。(全局的)

1、如果把变量放到pageContext里,就说明它的作用域是page,它的有效范围只在当前jsp页面里。 从把变量放到pageContext开始,到jsp页面结束,你都可以使用这个变量。
2、如果把变量放到request里,就说明它的作用域是request,它的有效范围是当前请求周期。所谓请求周期,就是指从http请求发起,到服务器处理结束,返回响应的整个过程。就算在这个过程中,使用request对象的getRequestDispatcher(“path”).forward(request, response)的请求转发方式跳转了多个jsp页面,在这些页面里你都可以使用这个变量,但如果使用了response对象的sendRedirect(“path”)重定向方式,那这个request域就会失去效果。因为response的sendRedirect(“path”)重定向方式,跟request对象的getRequestDispatcher(“path”).forward(request, response)的请求转发方式是有区别的,因为重定向涉及到浏览器的两次请求和两次响应,故第二次的request会将第一次的request域刷新。
3、如果把变量放到session里,就说明它的作用域是session,有效范围是当前会话。所谓当前会话,是指从用户打开浏览器开始,到用户关闭浏览器这中间的过程。这个过程可能包含多个请求响应。也就是说,只要用户不关浏览器,服务器就有办法知道这些请求是一个人发起的,整个过程被称为一个会话(session),而放到会话中的变量。
4、如果把变量放到application里,就说明它的作用域是application,它的有效范围是整个应用。整个应用是指从应用启动,到应用结束。我们没有说“从服务器启动,到服务器关闭”是因为一个服务器可能部署多个应用,当然你关闭了服务器,就会把上面所有的应用都关闭了。application作用域里的变量,它们的存活时间是最长的,如果不进行手工删除,它们就一直可以使用。与上述三个不同的是,application里的变量可以被所有用户共用。如果用户甲的操作修改了application中的变量,用户乙访问时得到的是修改后的值。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

java后端指南

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值