互联网大厂(字节华为)Java EE面试题:Servlet组件开发解析+答案

Posted 传智教育官方博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了互联网大厂(字节华为)Java EE面试题:Servlet组件开发解析+答案相关的知识,希望对你有一定的参考价值。

文章目录


1 . 请说明Servlet的声明周期

解析 Servlet作为服务器端的组件,需要在容器中才能运行,容器管理Servlet的生命周期。对于web开发员来说,了解Servlet的声明周期才能更好地进行Servlet编程。

参考答案

阶段一:初始化
客户端第一次访问Servlet,或者容器加载应用时(配置),容器调用Servlet类的构造方法,实例化一个Servlet对象,该对象存在于服务器端内存中,容器将启动多线程并发访问该对象。实例化结束后,将对Servlet实例进行初始化,先调用init(Servloracleonfig)方法,在调用init()方法
阶段二:提供服务
Servlet初始化成功后,容器调用Servlet接口中定义的service(ServletRequest req,ServletResponse res)方法。Service将请求和响应对象转换成HttpServletRequest req,HttpServletResponse resp)方法。HttpServlet中的service方法,将请求根据请求方式转发给对应的doXXX方法,如doGet、doPost
阶段三 销毁
Servlet提供服务结束,或者一段时间后,容器将销毁Servlet实例。销毁Servlet实例前,容器先调用Servlet接口中定义的destroy方法,允许完成一些自定义的操作。

2. 什么是Servlet的初始化参数?如何配置?如何在程序中获得?

解析 如果摸个Servlet需要一些参数,可以再web.xml中今夕配置,而不必要硬编码到源代码中,这样可以方便地进行修改。值得注意的事,Servlet的初始化参数只能在当前的Servlet中使用,其他Servlet中无法使用。

参考答案 Servlet的初始化参数指的是初始化Servlet实例时的参数,可以再web.xml中尽享配置,如下所示:

<servlet>
<servlet-name>TestServlet</servlet-name>
<servlet-class>com.oracleTestServlet</servlet-class>
<init-param>
<param-name>level</param-name>
<param-value>2.1</param-value>
</init-param>
</servlet>

上述配置中,使用为TestServlet配置了一个名字为level的初始化参数,值为2.1.可以使用多个元素配置多个初始化参数。在TestServlet中,可以直接调用getInitParameter(“level”)方法返回该参数的值。

3. 请列出请求接口中至少三个获得请求头的方法。

解析 当用户向服务器端请求时,HTTP请求头的信息也随之被发送到服务器。请求接口中定义了获得请求头的方法,实际应用中常常需要获得某些请求头的值,根据请求头的值判断客户端的情况进行编程。开饭元应该熟悉各种请求头的含义,以及获得请求头的方法。

参考答案 getHeader方法可以根据请求头名字获得请求头值;getIntHeader方法用来返回整型请求头的值;getDateHeader方法用来返回日期类型请求头的值。

4.响应接口中addHeader方法和setHeader方法有什么区别?

解析 响应封装了服务器端发送给客户端的信息,响应接口中定义了操作响应头的方法,有些方法容易混淆,开发员应该辨别清楚。

参考答案 addHeader方法用来向响应中添加一个头,如果盖头的名字已经存在,name允许一个头包含多个值:setHeader方法向响应中添加一个头信息,如果头寸在,则覆盖已有的值。

5. Servlet跳转到JSP常常有两种方法:一种称为响应重定向,一种称为请求转发。请用代码展示两种方法,并说明其区别。

解析 Servlet作为MVC中的控制器,主要的作用就是接受客户端请求,获得请求信息后调用业务逻辑,然后根据业务逻辑的处理结果跳转到不同的视图显示给用户。开发员必须掌握常用的两种跳转方法,即响应重定向和请求转发。实际工作中常用的是请求转发,很多MVC框架默认也是使用请求转发.

参考答案

响应重定向response.sendRedirect(“index.jsp”);
请求转发:request.getRequestDispantcher(“index.jsp”).forward(request,respinse);
响应重定向相当于让客户端向重定向的资源重新发送一个请求。当前请求中的信息无法传递到下一个资源。而请求转发显得刚玉吧当前的请求转发到下一个资源。当前请求中的信息将可以转递到下一个资源。

6.请求接口中的提供了处理属性的方法,请列举每个方法并说明其作用。

解析 控制器调用业务逻辑后,往往需要把一些处理的结果返回到视图上进行显示。这种时候,属性的概念就至关重要。请求属性是最常用的一种属性,实在请求范围内有效的属性。开发员一定要正确理解每种范围的属性并能够正确使用。

参考答案 请求接口中有三个和属性有关的方法,分别是:setAttribute(String,Object),可以将一个对象设置一个名字,存储到请求中:getAttribute(String),可以根据属性的名字返回属性值:removeAttribute(String),可以根据属性的名字删除属性。

7.cookie有什么作用?如何使用Servlet 的API返回请求中的cookie?如何将cookie保存到客户端?

解析 cookie是保存在客户端的小文本,合理地使用cookie能够增强用户体验。然而,开发员使用cookie时,一定不要把涉及用户隐私的内容保存到cookie中,如银行账号的密码等。另外,cookie可以被用户人为禁止或删除,这也是使用cookie时需要考虑的问题。

参考答案 cookie用来将一些信息保存到客户端,已被用户下次访问同一应用时,能够自动将这些信息发送到服务器端。服务器端通过使用cookie编程,能够提高用户体验。请求接口中提供了goracleookie方法返回所有的cookie,响应接口提供了addCookie方法能够将cookie对象返回到客户端。

8.如何获得会话对象?请用简单代码展示。

解析 web应用中,常常需要使用会话对象。会话是指客户端对服务器端一次连续的访问过程。开发人员应该熟悉会话相关的操作。

参考答案 可以通过请求对象获得会话对象,如request.getSession()。如果当前存在会话,直接返回使用:如果不存在,则创建一个新的会话返回。还有一个重载的getSession方法,具有一个boolean类型的参数,其中request.getSession(true)和request.get
Session()完全相同,而request.getSession(false)意思是如果存在会话对象就返回使用,如果不存在则返回null。

9.有哪几种方式可以设置会话有效时间?

解析 会话对象都被存储在容器中,如果很长时间不使用,就应该被销毁,以保证内存的有效使用。容器总是会为会话设置默认的有效时间,大多数是30分钟,也可以自己定义会话的有效时间。
参考答案 有两种方法可以设置会话的有效时间,一种是在web.xml中配置,如下所示:

<session-config>
	<session-timeout>40</session-timeout>
</session-config>

使用这种方式设置的有效时间,是对当前应用中所有会话都有效,单位是分钟。

还有一种方式是使用HttpSession中的setMaxInterval(int)方法,这个方法能够设定最大不活动时间,超过这个时间会话没有被访问,即被容器销毁。这个方法只能够控制调用该方法的会话对象,不会对所有会话对象生效。

10. 什么是URL重写?能解决什么问题?

解析 大多数容器实现会话,都是基于cookie机制实现的。然而,cookie可能被用户人为地设置失效,这种情况下,会话页将无效。为了能够在cookie失效时依然使会话有效,可以使用URL重写策略。如果使用某些MVC框架编程,如Struts,这些问题都已经在框架层面得到了解决。

参考答案 URL重写就是使用响应接口中的encodeURL(path)方法,把指定的path重新编码,将名字是JSESSIONID的cookie的值强制加到path对应的URL中,传递到服务器端,这样就能够保证即使cookie被阻止,服务器端永远能得到会话对象的ID值,使得会话有效。

11. 会话接口中提供了处理会话属性的方法,请列举每个方法并说明其作用。

解析 如果某些对象需要在会话范围内有效,那么就可以考虑使用会话范围的属性。保存在会话范围内的属性,在当前会话中一直有效。然而,由于会话的生命中期较长,所以属性也将随着会话一直存在于内存中。只有当必须使用会话属性时再考虑使用,能用请求属性解决的场合就使用请求属性,开发员必须能够正确选择不同范围属性进行使用。

参考答案 会话接口中有三个和属性有关的方法,分别是:setAttribute(String,Object),可以将一个对象设置一个名字,存储在会话中;getAttritute(String),可以跟据属性的名字返回属性值;removeAttribute(String),可以根据属性的名字删除属性。

12. 什么是上下文对象?如何获得上下文对象?

解析 上下文是一个全局的概念,每个应用都有一个唯一的上下文对象。上下文接口中定义了一系列的方法,开发员应该熟悉这个接口的常用方法。
参考答案 当容器启动时,会加载容器中的每一个应用,并且针对每一个应用创建一个对象,称为上下文对象。每个应用都只有一个唯一的上下文对象,Servlet API 中提供了Servloracleontext 接口来表示上下文对象。要在Servlet中获得上下文对象非常简单,直接使用getServloracleontext()方法就可以返回当前的上下文对象,在JSP中可以直接使用application内置对象使用上下文。
13. 如何配置上下文参数?在程序中如何获得上下文参数?
解析 如果在应用中的很多地方,都需要使用某一个参数,那么就可以配置一个上下文参数。上下文参数与Servlet初始化参数不同的是,上下文参数能够在应用所有资源里使用,而Servlet初始化参数在当前Servlet中使用。
参考答案 在web.xml中可以使用配置上下文参数,如下所示:

path
/WEB-INF/props

要获得上下文参数,可以使用Servloracleontext接口中的getInitParameter方法返回。

14、上下文接口中提供了处理属性的方法,请列举每个方法并说明其作用?

**解析:**除了请求属性、会话属性外,还可以使用上下文属性。如果某个对象在上下文范围内使用,就可以考虑使用上下文属性存储。上下文的生命周期很长,应用加载时初始化,直到应用重新加载才被销毁,所以只有必须使用上下文属性时方可使用,否则应该尽量使用请求属性。

**参考答案:**上下文接口中有三个和属性有关的方法,分别是setAttribute(String ,Object),可以将一个对象设置一个名字,存储到上下文范围中:getAttribute(String),可以根据属性的名字返回属性值:removeAttribute(String),可以根据属性的名字删除属性。

15、说明请求属性、会话属性、上下文属性的区别?

解析:属性在Web应用开发中占有举足轻重的地位,是用来在组件之间传递对象的主要方式。主要有三个对象可以储存属性,即请求、会话、上下文。由于请求生命周期最短,所以应该尽量使用请求属性,而只有在必须用会话属性或者必须用上下文属性时菜考虑使用这两种属性。

**参考答案:**请求属性是请求范围内的属性,除了请求转发外,只在当前的请求中有效:会话属性是会话范围内的属性,只要会话没有失效,就一直随着当前的会话所在:上下文属性是上下文范围的属性,只要容器没有重新加载应用,就一直随着上下文对象存在。应该尽量使用请求属性实现功能,只有在必须用会话属性或者必须用上下文属性时才考虑使用这两种属性。

16、请说明ServloracleontextEvent什么场景下被触发,以及如何处理?

解析:事件处理在很多时候非常有效,开发人员应该熟悉Servlet中得常用时间类别,并熟悉每种事件触发的条件。
参考答案:当上下文对象被初始化或者被销毁时,将触发ServloracleontextEvent,要处理该事件,可以自定义事件处理类实现ServloracleontextListener接口;然后覆盖该接口中的方法,实现处理逻辑。

17、请说明HttpSessionEvent什么场景下会被触发,以及如何处理?

**解析:**会话事件在很多场合可以使用,开发人员应该熟悉会话事件的触发条件以及处理方法等。
**参考答案:**当会话对象有变化的时候,将触发HttpSessionEvent事件发生,例如会话被创建、会话被销毁、会话被活化、要处理该事件,有两个接口可以监听,分别是HttpSessionListener和HttpSessionActivationListener。其中前者监听会话创建和销毁的情况,后者监听会话活化和钝化的情况。

18、如何在web.xml中配置监听器,使监听器生效?

解析 监听器必须在web.xml中配置才能生效。
参考答案 在web.xml中,可以使用配置监听器,如下所示:

<listener>
<listener-class>com.oracle.listener.CounterListener</listener-class>
</listener>

19、简述监听器的开发配置步骤。

解析 每种监听器的开发和配置步骤都非常相似,开发员应该做到熟练掌握。
参考答案
(1)根据需求分析需要使用哪种监听器。
(2)创建类实现监听器接口,并实现接口中必要的方法,实现监听功能。
(3)在web.xml中使用配置监听器。

20、过滤器有什么作用 ?

解析 过滤器是web应用中非常重要的概念,甚至在Strust2框架中也作为核心控制器使用。
参考答案 在web应用中,往往需要一些通用的处理和控制,如果把这些通用的处理编写在每一个需要的资源文件中,代码就很冗余,且不好管理。只要需要修改,就得修改所有文件中的相关代码,造成维护困难。过滤器就是用来执行这些通用处理的程序,往往可以用来实现图像转换、数据压缩、登录验证、权限控制等。

21、Filter接口中定义了哪几个方法?分别有什么作用?

解析 Filter接口是所有过滤器都必须实现的接口,了解这个接口中的方法对开发员胜任过滤器开发非常重要。
参考答案 Filter接口中有以下三个方法:
(1)init(FilterConfig filterConfig):该方法是对filter对象进行初始化的方法,仅在容器初始化filter对象结束后被调用一次。
(2)doFilter(ServletRequest request,ServletResponse response,FilterChain chain):该方法是filter进行过滤操作的方法,是最重要的方法。过滤器实现类必须实现该方法。方法体中可以对request和response进行预处理。其中FilterChain可以将处理后的request和response对象传递到过滤链上的下一个资源。
(3)destroy():该方法在容器销毁过滤器对象前被调用。

22、简述过滤器的开发配置步骤

解析 开发员应该熟练掌握过滤器的开发配置步骤。
参考答案
(1)创建类实现Filter接口。
(2)实现Filter接口中的方法,重点实现doFilter方法对请求和响应进行过滤。
(3)在web.xml中配置过滤器,使用配置过滤器的类和名字,使用配置过滤器需要过滤的资源路径。

23. 过滤器的配置中,元素是什么含义?有几个可选值?

解析:元素师Servlet2.4以后新增的配置能够用来指定转发方式
参考答案: 可以配置能够被过滤的URL的请求方式,有以下四个值可以使用;
(1) 请求方式,是一种默认的方式。即不配置disoatcher选项时,默认过滤REQUEST方式请求的URL,包括在地址栏输入URL,表单提交,超级链接,响应重定向,但是如果指定了其他dispatcher值,REQUEST也必须显式指定才能生效。
(2) FORWARD:转发方式,表示可以过滤请求转发方式访问的URL.
(3) INCLUDE:包含方式,表示可以过滤动态包含的URL。
(4) ERROR:错误方式,表示可以过滤错误页面

以上是关于互联网大厂(字节华为)Java EE面试题:Servlet组件开发解析+答案的主要内容,如果未能解决你的问题,请参考以下文章

花了三个月,整理了阿里腾讯字节等大厂面试真题(含答案)面试一路开挂

字节跳动+阿里+华为+腾讯等大厂Java面试题,层层深入

BTAJ大厂最新面试题汇集

全精品~ 2023年互联网大厂高频Java面试真题集锦(含答案解析)

字节跳动+阿里+华为+腾讯等大厂Java面试题,你不懂还不学?

真香定律!2021年Java工作或更难找