Servlet 面试问答,以下是有关 Servlet 的常见问题。我已经提供了每个问题的简要和答案,这将有助于您在技术面试轮次中被选中。
Q1. 什么是 servlet?
Servlet 是一种服务器端编程语言,用于生成动态网页。它生成网页作为从客户端(浏览器)收到的请求的响应。
Q2. 静态网页与动态网页?
对所有用户都相同的网页是静态网页,根据用户的请求动态生成的网页(根据请求可能因用户而异)被称为动态网页。 Servlet 主要用于动态网页。
Q3. servlet 的生命周期?
遵循 servlet 生命周期的各个阶段:
1)加载 Servlet 类:servlet 容器找到web.xml
文件中提到的 servlet 类并加载它。
2)Servlet 实例化:在此阶段创建 servlet 类的对象。
3)初始化:通过调用init()
方法初始化 Servlet。
4)处理请求:在此阶段,servlet 通过调用service()
方法为客户端请求提供服务。
5)销毁:servlet 生命周期的最后阶段。destroy()
方法释放 servlet 实例,以便可以对其进行垃圾回收。
Q4.为什么我们使用 Servlets?
1)处理用户从屏幕提交的输入数据。
2)根据请求生成并返回对用户的动态响应。
3)理想的编程语言,用于根据用户的请求与数据库进行交互。
4)servlet 可以同时处理多个请求,这使它们成为高性能应用的完美选择。
Q5. 为什么 Servlet 优于 CGI?
1)Servlet 响应比 CGI 更快,因为它使用多线程概念来为每个请求提供服务。 CGI 性能不是很好,因为它为每个请求创建一个新对象,而 servlet 为每个请求分配一个新线程。
2)与 CGI 相比,学习和实现 servlet 非常容易。
3)与 CGI 相比,servlet 中的内存消耗较低。
Q6. 加载 Servlet 的时候?
1)当 servlet 容器收到来自客户端(浏览器)的第一个请求时。
2)应用的管理员手动加载 servlet。
3)当 webserver(部署了 servlet)开始时。
Q7. 什么是Servlet
接口以及它的用途是什么?
Servlet
接口是 servlet 的 API。每个 Servlet 都应该实现Servlet
接口或扩展已经实现接口的类。 javax.servlet.GenericServlet
和javax.servlet.http.HttpServlet
是实现Servlet
接口的Servlet
类,因此每个 servlet 应该直接实现Servlet
接口,或者通过扩展任何这些类。
Q8. 什么是ServletConfig
?
ServletConfig
接口属于包javax.servlet.ServletConfig
。它用于将配置参数传递给 servlet。Servlet 容器隐式实例化它。
Q9. 什么是ServletContext
?
每个 Web 应用都有一个共同的ServletContext
。 Web 应用中的所有 servlet 都可以访问ServletContext
。它有网络应用信息和 Web 应用中存在的所有 servlet 都可以访问的资源。
Q10. ServletConfig
与ServletContext
?
以下是ServletConfig
和ServletContext
之间的两个主要区别:
1)ServletConfig
用于将配置信息传递给 Servlet,而ServletContext
提供 Servlet 类可以使用的一组方法与 Servlet 容器通信。
2)每个 Servlet 都有一个单独的ServletConfig
对象,而ServletContext
对于 Web 应用中的所有 servlet 都是通用的。
3)ServletConfig
的参数在web.xml
文件中的标签<init-param>
下定义。ServletContext
的参数在web.xml
中的标签<context-param>
下定义。
Q11. GenericServlet
和HTTPServlet
之间的区别?
1)GenericServlet
是一个实现 Servlet 接口的抽象类,而HTTPServlet
抽象类扩展了GenericServlet
类。简而言之:GenericServlet
类是HTTPServlet
的父类。
2)GenericServlet
不支持任何协议。HTTPSeervlet
支持 HTTP 和 HTTPS 协议。
3)GenericServlet
无法处理cookie
和会话,而HTTPServlet
可以处理它们。
Q12. forward()
和sendRedirect()
之间的区别?
1)在forward()
中,相同的请求被转发到另一个资源。在sendRedirect()
中,新请求被发送到重定向资源。
2)forward()
由 Servlet 容器处理,而sendRedirect()
由浏览器处理。
3)在forward()
中,URL(统一资源定位符)在 Web 浏览器上保持不变。在sendRedirect()
中,URL 在 Web 浏览器地址栏中更改。
4)与sendRedirect()
相比,forward()
更快。
Q13. 什么是部署描述符? Web 应用的
web.xml
文件称为部署描述符。它通常放在应用的WEB-INF
文件夹中。它具有 Servlet 名称,Servlet 映射等信息。该文件告诉 Servlet 容器需要为给定的 URL 模式调用哪个 Servlet 类。
Q14. doGet()
对于doPost()
方法?
1)在doGet()
中,参数在地址栏中可见,它们会附加到 URL。在doPost()
中,参数在地址栏中不可见。
2)您可以通过GET
请求最多传输 1024 个字符。doPost()
没有任何限制。
3)doGet()
不适合敏感数据,因为参数不会被加密。在doPost()
中,参数是加密的,因此与doGet()
相比更安全。
4)方法doGet()
允许您为资源添加书签。doPost()
不允许书签。
5)与doPost()
方法相比,doGet()
更快。
Q15. <load-on-startup>
有什么用?
<load-on-startup>
用于指定在服务器启动期间需要加载的 Servlet 文件。一旦服务器启动,就会加载此元素中指定的 servlet 文件,它不会等待第一个加载它们的请求。这是在web.xml
文件中指定的方式。
<servlet>
<servlet-name>MyServletNameHere</servlet-name>
<servlet-class>ServletClassHere-FullyQualified</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
如果指定了多个文件,则文件将按照在其中指定的顺序加载。
Q20. Servlets 支持哪些不同类型的会话跟踪机制?
1)URL 重写
2)隐藏表单字段
3)Cookies
4)安全套接字层(SSL)会话
Q21. URL 重写如何维持会话?
在 URL 重写方法中,会话跟踪数据已附加在 URL 的末尾以跟踪会话。
Q22. 解释 Servlet 链接?
Servlet 链接是一个在一系列 servlet 中处理请求的概念。第一个 Servlet 部分处理请求并传递给第二个请求,然后第二个 servlet 处理它并传递给第三个请求,依此类推。最后一个 servlet 将响应返回给客户端(浏览器)。
Q23. 如何使 servlet 中的会话无效?
通过调用session.invalidate()
方法。
Q24. Servlet 容器的主要功能是什么?
1)Servlet 生命周期管理
2)维护 Servlet 和 Web 服务器之间的交互。
3)提供多线程支持,同时处理多个请求。
4)管理部署描述符web.xml
文件。
Q25. 什么是<session-timeout>
?
元素<session-timeout>
用于指定会话的超时。这是在web.xml
文件中定义的方式。
<session-config>
<session-timeout>35</session-timeout>
</session-config>
它会将会话超时设置为 25 分钟。
Q26. 什么是 Servlet 延迟加载以及如何避免它?
默认情况下,Servlet 容器在服务器启动时不初始化 Servlet。它仅在收到来自客户端的请求时初始化 servlet。这称为 Servlet 的延迟加载。
通过指定<load-on-startup>
元素为 Servlet 我们可以避免延迟加载。<load-on-startup>
中指定的 servlet 文件 Web 服务器启动后立即加载。
Q27. 为什么我们在 servlet 中需要构造函数,即使我们有一个init()
方法?
init()
方法用于初始化 servlet,但是为了实例化 Servlet 类,需要构造函数。 Servlet 容器实例化Servlet
类。
Q28. 什么时候卸载 Servlet?
1)管理员手动卸载 servlet。
2)Web 服务器关闭。
Q29. Servlet 如何使用cookie
维护会话?
Cookie
是一小段信息,由 servlet 发送到 Web 浏览器。Cookie
会存储在浏览器中,并在需要时返回给服务器。Cookie
具有名称,单个值和少数其他属性。
Q30. 为什么使用cookie
进行会话跟踪是一种不好的做法?
使用cookie
进行会话跟踪有几个缺点。其中很少是:
1)由于cookie
存储在客户端(在客户端的浏览器中),如果客户端浏览器清除或禁用cookie
,它将不可用。
2)与其他会话管理机制相比,实现会话跟踪的cookie
要困难得多。
3)Cookie
仅适用于 HTTP 协议。
Q31. 如何在 Servlets 中获取服务器信息?
使用此:
getServletContext().getServerInfo()
Q32. 如何在 Servlet 中获取客户端的 IP 地址?
使用此:
request.getRemoteAddr()
Q33. 为什么我们在 Servlet 中使用过滤器?
我们使用过滤器:
1)安全检查
2)修改请求或响应
3)数据压缩
4)记录和审核
5)响应压缩
Q34. HTTPServlet
支持哪些协议?
HTTP 和 HTTPS 协议。
Q35. GenericServlet
支持哪些协议?
GenericServlet
抽象类并不特定于任何协议。
Q36. Servlet 3 增加了哪些新功能?
1)Servlet 注释
2)Web 片段
3)Web 组件动态添加
4)异步处理
Q37. 我们是否覆盖service()
方法?
不,我们不会覆盖service()
方法。我们通常根据需求覆盖doPost()
,doGet()
方法。