servlet的三大作用域
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了servlet的三大作用域相关的知识,希望对你有一定的参考价值。
参考技术A java web开发中servlet三大作用域对象为request、session和application(ServletContext)request表示一个请求,只要发出一个请求就会创建一个request。
仅在当前请求中有效。
常用于服务器间同一请求不同页面之间的参数传递。常用于表单的控件值传递。
request.setAttribute();request.getAttribute();request.removeAttribute();request.getParameter().
服务器会为每个会话创建一个session对象,所以session中的数据可供当前会话中所有Servlet共享。
用户打开浏览器会话开始,直到关闭浏览器会话才结束。一次会话期间只会创建一个session对象。
常用于web开发中的登录验证页面(当用户登录成功后浏览器分配其一个session键值对)
session.setAttribute(); session.getAttribute(); session.removeAttribute();
获得session对象方法:
在Servlet中:HttpSession session = request.getSession();
由于session属于jsp九大内置对象之一,当然可以直接使用。例如:<%session.serAttribute("name","admin")%>。
session是服务器对象,保存在服务器端。并且服务器可以将创建session后产生的sessionId通过一个cookie返回给客户端,方便下次验证。
所有的用户都可以取得这个信息,此信息在整个服务器中被保留。application属性范围值,只要设置一次,则所有的网页窗口都可以取得数据。
ServletContext在服务器启动时创建,在服务器关闭时销毁,一个javaweb应用只能创建一个ServletContext对象。所有客户端在访问服务器时共享同一个ServletContext对象。
获取application对象方法(Servlet中):
ServletContext app01 = this.getServletContext();
app01.setAttribute("name", "kaixuan"); //设置一个值进去
ServletContext app02 = this.getServletContext();
app02.getAttribute("name"); //获取键值对
*(1) request:跟当前操作功能相关
* (2) session: 跟用户信息相关
* (3) application:跟项目全局信息相关----》淘宝配送地址
JavaWeb 测试题
目录
2.写出 Servlet 中的三大作用域,并分别说明各自的特点?
1.自定义 servlet 的三种方式,及区别?
- 实现Servlet接口,实现所有抽象方法。该方式支持最大程度的自定义。
- 继承 GenericServlet 抽象类,必须重写 service 方法,其他方法可选择重写。该方式让我们开发 Servlet 变得简单。但是这种方式与 HTTP 协议无关。
- 继承 HttpServlet 抽象类,需要重写 doGet方法和 doPost 方法,该方式表示请求和响应都需要和 HTTP 协议相关。
2.写出 Servlet 中的三大作用域,并分别说明各自的特点?
- request,特点:request作用域为一次请求,它的变量有效范围是当前请求周期。所谓请求周期,就是指从http请求发起,到服务器处理结束,返回响应的整个过程。在这个过程中可能使用forward的方式跳转了多个jsp页面,在这些页面里你都可以使用这个变量。
- session,特点:如果把变量放到session里,就说明它的作用域是session,它的有效范围是当前会话。所谓当前会话,就是指从用户打开浏览器开始,到用户关闭浏览器这中间的过程。这个过程可能包含多个请求响应。也就是说,只要用户不关浏览器,服务器就有办法知道这些请求是一个人发起的,整个过程被称为一个会话(session),而放到会话中的变量,就可以在当前会话的所有请求里使用。
- application,特点:如果把变量放到application里,就说明它的作用域是application,它的有效范围是整个应用。整个应用是指从应用启动,到应用关闭结束。我们没有说“从服务器启动,到服务器关闭”,是因为一个服务器可能部署多个应用,当然你关闭了服务器,就会把上面所有的应用都关闭了。
总结:
- request是一次请求
- session是一个会话
- application是多次会话(Tomcat开启到关闭)
3.filter 和 servlet 在生命周期上的区别?
- filter是在系统启动的时候通过init()初始化的,每次请求都只会调用dofliter方法进行处理,服务器停止的时候调用destroy()进行销毁!
- servlet 是在系统启动或者请求到达servlet时,通过init()方法进行初始化,一旦被装入了web服务器,一般不会从服务器删除,直到服务器关闭才会调用destroy()方法进行销毁。每次请求,Request都会被初始化,响应请求后,请求被销毁。但是servlet不会随着请求而销毁;如果某个Servlet配置了<load-on-startup>1</load-on-startup>,该Servlet也是在Tomcat(Servlet容器)启动时初始化。
【注意】服务器关闭时,servlet和filter依次被销毁!
4.表单提交的 2 种方式?及区别?
form表单中method有两种提交方法,get和post分别对应HttpServlet中的doGet()和doPost()方法,这两种提交方式其实有很大的区别:
- form表单默认提交方式为get方式,get方式发送数据.
- 数据回传方式不同:get是从服务器上获取数据,post是向服务器发送数据。
- 用户看到过程不同:get是把参数数据队列加到提交表单的action属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到;post是通过HTTPpost机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
- 服务器端回传方式不同:对于get方式,服务器端用Request.QueryString获取变量的值;对于post方式,服务器端用Request.Form获取提交的数据。、
- 传送大小不同:get传送的数据量较小,不能大于2KB;post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。
- 安全性不同:get安全性非常低,post安全性较高。
5.jsp 有哪些内置对象? 作用分别是什么?
- HttpServletRequet类的Request对象:代表请求对象,主要用于接受客户端通过HTTP协议连接传输服务器端的数据;
- HttpSevletResponse类的Response对象:代表响应对象,主要用于向客户端发送数据;
- JspWriter类的out对象:主要用于向客户端输出数据,out的基类是jspWriter;
- HttpSession类的session对象:主要用来分别保存每个月的信息与请求关联的会话;会话状态的维持是web应用开发者必须面对的问题;
- ServletContext类的application对象:主要用于保存用户信息,代码片段的运行环境;它是一个共享的内置对象,即一个容器中的多个用户共享一个application,故其保存的信息被所有用户所共享;
- PageContext类的PageContext对象:管理网页属性,为jsp页面包装页面的上下文,管理对属于jsp的特殊可见部分中已经命名对象的访问,它的创建和初始化都是由容器来完成的;
- ServletConfig类的Config对象:代码片段配置对象,标识Servlet的配置;
- Object类的Page对象,处理jsp页面,是object类的一个实例,指的是jsp实现类的实例;
- Exception对象:处理jsp文件执行时发生的错误和异常,只有在错误页面里才使用,前提是在页面指令里要有isErrorPage=true;
记录和复习Java基础知识点冲冲冲!
以上是关于servlet的三大作用域的主要内容,如果未能解决你的问题,请参考以下文章