开发人员面试题

20.JSP的九大内置对象?

Request Response Session Application out pageContext  config  page  exception

【1.1 request对象

request 对象是 javax.servlet.httpServletRequest类型的对象。 该对象代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的数据。(包括头信息、系统信息、请求方式以及请求参数等)。request对象的作用域为一次请求。

1.2 response对象

response 代表的是对客户端的响应,主要是将JSP容器处理过的对象传回到客户端。response对象也具有作用域,它只在JSP页面内有效。

1.3 session对象

session 对象是由服务器自动创建的与用户请求相关的对象。服务器为每个用户都生成一个session对象,用于保存该用户的信息,跟踪用户的操作状态。session对象内部使用Map类来保存数据,因此保存数据的格式为 “Key/value”。 session对象的value可以使复杂的对象类型,而不仅仅局限于字符串类型。

1.4 application对象

application 对象可将信息保存在服务器中,直到服务器关闭,否则application对象中保存的信息会在整个应用中都有效。与session对象相比,application对象生命周期更长,类似于系统的“全局变量”。

1.5 out 对象

out 对象用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。在使用 out 对象输出数据时,可以对数据缓冲区进行操作,及时清除缓冲区中的残余数据,为其他的输出让出缓冲空间。待数据输出完毕后,要及时关闭输出流。

1.6 pageContext 对象

pageContext 对象的作用是取得任何范围的参数,通过它可以获取 JSP页面的out、request、reponse、session、application 等对象。pageContext对象的创建和初始化都是由容器来完成的,在JSP页面中可以直接使用 pageContext对象。

1.7 config 对象

config 对象的主要作用是取得服务器的配置信息。通过 pageConext对象的 getServletConfig() 方法可以获取一个config对象。当一个Servlet 初始化时,容器把某些信息通过 config对象传递给这个 Servlet。 开发者可以在web.xml 文件中为应用程序环境中的Servlet程序和JSP页面提供初始化参数。

1.8 page 对象

page 对象代表JSP本身,只有在JSP页面内才是合法的。 page隐含对象本质上包含当前 Servlet接口引用的变量,类似于Java编程中的 this 指针。

1.9 exception 对象

exception 对象的作用是显示异常信息,只有在包含 isErrorPage=“true” 的页面中才可以被使用,在一般的JSP页面中使用该对象将无法编译JSP文件。excepation对象和Java的所有对象一样,都具有系统提供的继承结构。exception 对象几乎定义了所有异常情况。在Java程序中,可以使用try/catch关键字来处理异常情况; 如果在JSP页面中出现没有捕获到的异常,就会生成 exception 对象,并把 exception 对象传送到在page指令中设定的错误页面中,然后在错误页面中处理相应的 exception 对象。】


21.JSP的作用域有哪些?

Application、session、request、page

【application 作用域

     如果把变量放到application里,就说明它的作用域是application,它的有效范围是整个应用。 整个应用是指从应用启动,到应用结束。我们没有说“从服务器启动,到服务器关闭”,是因为一个服务器可能部署多个应用,当然你关闭了服务器,就会把上面所有的应用都关闭了。 application作用域里的变量,它们的存活时间是最长的,如果不进行手工删除,它们就一直可以使用。

application作用域上的信息传递是通过ServletContext实现的,它提供的主要方法如下所示:

Object getAttribute(String name)  //从application中获取信息;

void setAttribute(String name, Object value)  //向application作用域中设置信息。

session作用域

       session作用域比较容易理解,同一浏览器对服务器进行多次访问,在这多次访问之间传递信息,就是session作用域的体现。如果把变量放到session里,就说明它的作用域是session,它的有效范围是当前会话。所谓当前会话,就是指从用户打开浏览器开始,到用户关闭浏览器这中间的过程。这个过程可能包含多个请求响应。也就是说,只要用户不关浏览器,服务器就有办法知道这些请求是一个人发起的,整个过程被称为一个会话(session),而放到会话中的变量,就可以在当前会话的所有请求里使用。 
 session是通过HttpSession接口实现的,它提供的主要方法如下所示:

Object HttpSession.getAttribute(String name)   //从session中获取信息。

void HttpSession.setAttribute(String name, Object value)//向session中保存信息。

HttpSession HttpServletRequest.getSessio()  //获取当前请求所在的session的对象。

 session的开始时刻比较容易判断,它从浏览器发出第一个HTTP请求即可认为会话开始。但结束时刻就不好判断了,因为浏览器关闭时并不会通知服务器,所以只能通过如下这种方法判断:如果一定的时间内客户端没有反应,则认为会话结束。Tomcat的默认值为120分钟,但这个值也可以通过HttpSession的setMaxInactiveInterval()方法来设置:

void setMaxInactiveInterval(int interval)

如果想主动让会话结束,例如用户单击“注销”按钮的时候,可以使用 HttpSession 的 invalidate()方法,用于强制结束当前session:void invalidate()

request作用域

     一个HTTP请求的处理可能需要多个Servlet合作,而这几个Servlet之间可以通过某种方式传递信息,但这个信息在请求结束后就无效了。request里的变量可以跨越forward前后的两页。但是只要刷新页面,它们就重新计算了。如果把变量放到request里,就说明它的作用域是request,它的有效范围是当前请求周期。 所谓请求周期,就是指从http请求发起,到服务器处理结束,返回响应的整个过程。在这个过程中可能使用forward的方式跳转了多个jsp页面,在这些页面里你都可以使用这个变量。

Servlet之间的信息共享是通过HttpServletRequest接口的两个方法来实现的:

void setAttribute(String name, Object value)   //将对象value以name为名称保存到request作用域中。

Object getAttribute(String name) //从request作用域中取得指定名字的信息。

     JSP中的doGet()、doPost()方法的第一个参数就是HttpServletRequest对象,使用这个对象的 setAttribute()方法即可传递信息。那么在设置好信息之后,要通过何种方式将信息传给其他的Servlet呢?这就要用到RequestDispatcher接口的forward()方法,通过它将请求转发给其他Servlet。

 RequestDispatcher ServletContext.getRequestDispatcher(String path) //取得Dispatcher以便转发,path为转发的目的Servlet。

 void RequestDispatcher.forward(ServletRequest request, ServletResponse response)//将request和response转发

     因此,只需要在当前Servlet中先通过setAttribute()方法设置相应的属性,然后使用forward()方法进行跳转,最后在跳转到的Servlet中通过使用getAttribute()方法即可实现信息传递。

  需要注意两点:

1、转发不是重定向,转发是在Web应用内部进行的。

2、转发对浏览器是透明的,也就是说,无论在服务器上如何转发,浏览器地址栏中显示的仍然是最初那个Servlet的地址。

page作用域

page对象的作用范围仅限于用户请求的当前页面,对于page对象的引用将在响应返回给客户端之后被释放,或者在请求被转发到其他地方后被释放。page里的变量只要页面跳转了,它们就不见了。如果把变量放到pageContext里,就说明它的作用域是page,它的有效范围只在当前jsp页面里。从把变量放到pageContext开始,到jsp页面结束,你都可以使用这个变量。

以上介绍的作用范围越来越小,request和page的生命周期都是短暂的,它们之间的区别:一个request可以包含多个page页(include,forward及filter)。】


22.HTTP的请求方式有哪些?

1、OPTIONS

返回服务器针对特定资源所支持的HTTP请求方法,也可以利用向web服务器发送‘*’的请求来测试服务器的功能性

2、HEAD

向服务器索与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以再不必传输整个响应内容的情况下,就可以获取包含在响应小消息头中的元信息。

3、GET

向特定的资源发出请求。注意:GET方法不应当被用于产生“副作用”的操作中,例如在Web Application中,其中一个原因是GET可能会被网络蜘蛛等随意访问。Loadrunner中对应get请求函数:web_link和web_url

4、POST

向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 Loadrunner中对应POST请求函数:web_submit_data,web_submit_form

5、PUT

向指定资源位置上传其最新内容

6、DELETE

请求服务器删除Request-URL所标识的资源

7、TRACE

回显服务器收到的请求,主要用于测试或诊断

8、CONNECT

HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。


23.常用的会话跟踪技术有哪些?

URL重写,隐藏表单域,cookie,session

【1>.URL重写技术:

就是在URL结尾添加一个附加数据来标识该会话,把会话id通过URL的信息传递过去,以便在服务端进行识别不同的用户。

2>.隐藏表单域:

2>.隐藏表单域:将会话id添加到HTML中提交到服务器,此表单不在客户端显示。

3>.cookie的方式:

cookie是Web服务器发送给客户端的信息,客户请求时可以读取该信息发送到服务器端,从而进行用户的识别。对于客户端的每次请求,服务器都会将cookie发送到客户端,在客户端可以进行保存,以便下次使用。

4>Session的方式:

在服务器端创建一个session对象,就会产生一个sessionID来标识这个session对象,然后将这个sessionID放到cookie中发送到客户端下一次访问时,sessionID会发送到服务器,在服务端进行识别不同的用户,session是依赖于cookie的,如果cookie被禁用,那么session也将失效。】


24.过滤器的实现步骤是什么?

1、声明过滤器类并让其实现Filter接口;

2、实现init()方法,读取过滤器的初始化参数;

3、实现doFilter()方法,实现对请求或响应的过滤操作。通常在过滤操作之后,会调用该方法的FilterChain参数的doFilter()方法,来继续调用链上的下一个结点;

4、实现destroy()方法,完成资源释放等操作。


25.Web.xml是什么?内部标签有哪些?

 

Web.xml是Java Web项目中的一个配置文件,主要用于配置首页,Filter,Listener,Servlet等。
内部标签:
1.<servlet>:用来在Web应用中定义一个Servlet
2.<init-param>:是给servlet的init()方法传递需要的信息的,这些值都会被封装成ServletConfig对象。
3.<context-param>:为了解决<init-param>的局限性,我们有了<context-param>,相当于全局变量,哪个方法里都可以取值。
4.<load-on-startup>:设置服务器装载的顺序
5.<servlet-mapping>:提供了能够使用某一Servlet处理请求的映射地址
6.<error-page>:可以通过定义特定的错误页面,当服务器产生错误时会选择相应的页面展示给用户。
7.<welcome-file-list>:默认页面,在这里可以设置工程默认页。


26.Servlet的核心类是什么?

1.ServletConfig:是Servlet程序的配置信息类。可以获取Servlet程序的别名servlet-name的值;可以获取初始化参数init-param;可以获取ServletContext对象。
2.ServletContext:表示Servlet上下文对象,一个Web工程只能有ServletContext对象。
3.HttpServletRequest: 每次只要有请求进入服务器,服务器就会把请求过来的HTTP协议信息解析好封装好Request对象中,传递到service方法中给我们使用,获取到请求的信息。
4.HttpServletResponse:每次请求进入服务器,服务器会创建一个Response对象和一个response对象,HttpServletResponse 表示所有响应的信息。


27页面跳转的方式有哪些?各有什么特点?

1.转发:携带参数,地址栏不变,服务器内跳转,共用一个request,可以在request作用域中存储数据,只能跳转到当前项目下,一次请求,只保留第一个地址
2.重定向:不携带数据,浏览器发送新的请求,不共享一个request,可以跳转到其他项目下,重定向发送多个请求,只会留下最后一个地址

转发:

  1. 浏览器地址栏路径不发生变化。
  2. 只能转发到当前服务器内部资源中。
  3. 转发是一次请求。
  4. 请求域中数据不会丢失。

重定向:

  1. 地址栏:显示新的地址
  2. 请求次数:2次
  3. 请求域中的数据会丢失,因为是2次请求


28.Log日志功能等级?

ERROR>WARN>INFO>DEBUG

29. 谈谈你对Spring的理解?主配置文件是什么?

狭义上spring就是指Spring Framework,特别是其中的核心思想控制反转和依赖注入、事务处理等特性,在进行大型项目开发的时候能够帮助我们更好的管理对象。

广义上spring就是指spring家族的一些列产品,如SpringMVC,等。Spring是项目开发中最重要的框架,可以帮助我们更好的管理对象,减少依赖,提高开发效率。

主配置文件:applicationContext.xml


30. 谈谈你对SpringMVC的理解?主配置文件是什么?

SpringMVC是一个Spring的作用于后台的Web层的组件框架,主要用于接收请求、响应数据等操作,其底层是servlet,SpringMVC是对Servlet更深层次的封装。

主配置文件:springMVC-servlet.xml


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值