文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

21 道JavaWeb经典面试题总结

2024-11-29 23:23

关注

1.说说 Servlet 的基本架构

Servlet 是 Java Web 应用程序中处理客户端请求并生成响应的重要组件,它的基本架构可以分为以下几个部分:

(1)Servlet 接口

Servlet 接口是所有 Servlet 类必须实现的接口,它定义了处理客户端请求的常见方法,包括初始化、请求处理和销毁等。在 Servlet 接口中,最常见的方法包括 init()、service() 和 destroy()。

(2)Servlet 容器

Servlet 容器是负责管理和运行 Servlet 的环境,可以理解为一个 Web 服务器或者应用服务器。Servlet 容器负责加载、实例化、初始化、调用服务方法和销毁 Servlet 实例。在 Java 中,常见的 Servlet 容器包括 Tomcat、Jetty、Undertow 等。

(3)部署描述符

部署描述符是一个 XML 文件,它包含了关于 Servlet 的配置信息,包括 Servlet 名称、URL 映射、初始化参数、引入其他 Servlet 或过滤器等。在 Java Web 应用中,典型的部署描述符是 web.xml 文件。

(4)Servlet 类

Servlet 类是实现 Servlet 接口的具体类,它负责处理客户端请求并生成响应。在 Servlet 类中,通常实现了 init()、service() 和 destroy() 方法,也可以覆盖 doGet()、doPost() 等方法来处理不同类型的请求。

(5)请求和响应对象

在 Servlet 中,可以通过请求对象 HttpServletRequest 和响应对象 HttpServletResponse 来与客户端进行通信。请求对象封装了客户端发送的请求信息,而响应对象负责生成服务器返回的响应内容。

当客户端发送请求时,Servlet 容器会根据部署描述符中的映射信息选择合适的 Servlet 实例来处理请求。Servlet 实例接收到请求后,调用其 service() 方法来处理请求并生成响应。然后响应会被发回客户端。

这就是 Servlet 的基本架构,它提供了一个在 Java Web 应用程序中处理客户端请求的标准化方式,并且可以通过实现不同的 Servlet 类来实现特定的业务逻辑。

2.说一说 Servlet 的生命周期?

Servlet 的生命周期包括的阶段:

加载和实例化:当容器启动时,会根据部署描述符(web.xml)或注解等配置信息加载并实例化 Servlet。容器会创建 ServletConfig 对象,并将部署描述符中的初始化参数传递给 Servlet 实例。

初始化:在 Servlet 实例化后,容器会调用其 init() 方法来执行一些初始化任务。通常可以在 init() 方法中进行一些初始化操作,比如建立数据库连接、加载配置文件等。init() 方法只会在 Servlet 实例第一次被创建时执行一次。

服务请求:一旦初始化完成,Servlet 就可以响应客户端的请求。当客户端发送请求时,Servlet 容器会调用 Servlet 的 service() 方法来处理请求。service() 方法会根据请求类型(GET、POST 等)来调用相应的 doGet()、doPost() 等方法。这是 Servlet 生命周期中最频繁调用的阶段,用来处理客户端的请求并生成响应。

销毁:当 Servlet 容器决定将 Servlet 实例销毁时,会调用其 destroy() 方法。在 destroy() 方法中可以清理资源,比如关闭数据库连接、释放内存等。Servlet 实例销毁时会执行 destroy() 方法,代表 Servlet 生命周期的结束。

3.如何实现一个自定义的 servlet?

如下所示:


    MyServlet
    com.nezha.MyServlet



    MyServlet
    /myservlet

根据实际需求,你可能需要处理初始化、销毁等其他方法。另外,你也可以使用注解来代替 web.xml 的配置。

4.servlet中有哪些核心类?都有什么特点?

(1)Servlet 接口

Servlet 接口是所有 servlet 类的基础接口。所有的 Servlet 类都必须实现这个接口,并且提供处理客户端请求的逻辑。在 Servlet 接口中定义了一系列的生命周期方法,包括 init、service 和 destroy。通过实现这些方法,可以在 servlet 实例的生命周期中执行初始化、处理请求和资源销毁等操作。

(2)HttpServlet

HttpServlet 是 Servlet 的抽象子类,它提供了专门用于处理 HTTP 请求的方法。它进一步扩展了 GenericServlet,并增加了处理 HTTP GET、POST、PUT、DELETE 等请求的方法。大多数 Web 应用程序中的 Servlet 都是继承自 HttpServlet。

(3)HttpServletRequest

代表客户端的请求信息,包含了请求行、请求头和请求体等信息,提供了获取参数、请求头数据、请求属性等方法。

(4)HttpServletResponse

代表服务器的响应信息,用于构建和发送回客户端的响应,提供了设置状态码、添加响应头、写入响应体等方法。

5.什么情况下调用 doGet()和 doPost()?

当客户端发送的请求使用了 HTTP GET 方法时,Servlet 容器会调用 Servlet 的 doGet() 方法来处理该请求。

当客户端发送的请求使用了 HTTP POST 方法时,Servlet 容器会调用 Servlet 的 doPost() 方法来处理该请求。

GET请求通常用于请求数据或查询信息,它的特点是请求的数据会附加在URL之后,并且是可见的。因此,GET请求不适合传输敏感信息,如密码或银行账户信息。

POST 请求通常用于向服务器发送数据,进行数据修改、提交或发送较大的数据等操作。比如,向服务器提交表单数据。

6.request.getAttribute() 和 request.getParameter() 有何区别?

request.getParameter() 方法用于获取客户端请求中的查询参数(GET 请求)或表单参数(POST 请求)。它返回的是一个字符串类型,用于表示指定参数名对应的参数值。

request.getAttribute() 方法用于获取在服务器端范围内共享的数据,这些数据通常是通过服务器端代码设置到请求域中的。它返回的是一个 Object 类型的数据,因此需要进行类型转换才能使用。通过 request.setAttribute() 方法设置的数据可以在同一个请求中的不同资源(如 Servlet、JSP)之间共享。

7.forward 和 redirect 的区别?

可以从三个方面来回答,处理方式、应用场景、效率。

forward是服务器内部的资源转发,浏览器地址栏不会发生变化,用户无法感知到转发过程。而redirect则是服务端通知客户端进行页面跳转,客户端会发起新的请求到指定的URL,因此浏览器地址栏会显示新的地址。

forward通常用于需要根据用户角色或其他条件来展示不同内容的情况,比如登录后根据用户权限转发到不同的管理页面。而redirect则常用于需要用户重新登录或在完成某项操作后返回上一个页面的场景,如注销后重定向到登录页面。

forward由于是服务器内部处理,通常效率较高,因为它避免了额外的网络请求和响应的延迟。而redirect因为涉及到客户端的多次请求和响应,所以效率相对较低。

8.jsp 有哪些内置对象?作用分别是什么?

9.jsp 有哪些动作?作用分别是什么?

在JSP(Java Server Pages)中,动作(Action)是一种特殊的标签,用于执行特定的操作,比如转发请求、包含文件、设置属性等。

这些动作能够在JSP页面中实现各种功能,如包含内容、转发请求、操作JavaBean等。它们使JSP页面能够更加灵活和强大。

10.JSP 中动态 INCLUDE 与静态 INCLUDE 的区别?

(1)动态 include:

(2)静态 include:

动态 include 是在运行时进行包含,可以动态决定包含哪个页面,而静态 include 是在编译时静态地将指定文件的内容合并到当前页面中,运行时无法改变包含的内容。具体使用时需要根据实际场景来选择使用动态 include 还是静态 include。

11.jsp 和 servlet 有什么区别?

Servlet是用Java编写的服务器端程序,它的主要功能是处理客户端的请求并生成动态Web内容。Servlet是Java Web应用的基础,负责接收请求、处理请求、生成响应。

JSP本质上是一种特殊的Servlet,它允许开发者在HTML页面中直接嵌入Java代码片段(scriptlets)、JSP动作、JSP指令以及表达式等,以生成动态Web页面。JSP的主要目的是使开发者能够更容易地创建动态Web页面,而无需编写大量的Java代码。

12.说一下 jsp 的 4 种作用域?

(1)Page作用域

最窄的作用域,它仅限于当前的JSP页面。当页面处理完成后,存储在page作用域中的任何数据都将被丢弃。此作用域通常用于存储仅在当前页面中使用的临时变量。

(2)Request作用域

这个作用域涵盖了单个HTTP请求及其对应的响应。在此作用域中定义的任何数据都可以在同一请求中的多个页面之间共享,但当请求处理完毕后,这些数据就会失效。这适用于跨多个JSP页面传递数据的情况。

(3)Session作用域

此作用域与特定的用户会话相关联。在一个用户访问网站期间,该用户的所有请求都可以访问session作用域中的数据。当用户离开网站或会话超时,session中的数据才会被清除。这通常用于存储需要跟踪用户状态的信息,比如购物车内容或者登录信息。

(4)Application作用域

最宽泛的作用域,它适用于整个Web应用程序。在此作用域中声明的数据对所有用户和所有请求都是可见的,并且在整个应用程序的生命周期内都有效。常用于存储应用程序级别的信息,例如配置参数或统计信息。

13.session 和 cookie 有什么区别?

Session和Cookie的主要区别在于存储位置、存储容量以及存储有效期。

14.如果客户端禁止 cookie 能实现 session 还能用吗?

一般默认情况下,在会话中,服务器存储 session 的 sessionid 是通过 cookie 存到浏览器里。

如果浏览器禁用了 cookie,浏览器请求服务器无法携带 sessionid,服务器无法识别请求中的用户身份,session失效。

但是可以通过其他方法在禁用 cookie 的情况下,可以继续使用session。

15.Token、Cookie、Session的区别?

Token 是一种用于认证和授权的令牌,通常由服务器生成并发送给客户端。客户端在收到 Token 后,将其存储在本地,然后在每次需要进行身份验证或授权时使用该 Token。常见的 Token 包括 JWT (JSON Web Token) 和 OAuth Token。Token 在客户端和服务器之间进行持久性的认证和授权,通常用于实现跨域身份验证。

Cookie 是一种在客户端中存储的小型文本数据,由服务器发送给客户端,随后在每次请求中通过 HTTP 头部发送回服务器。通常用于存储用户的身份验证信息、用户设置、浏览历史等。Cookie 是存储在客户端的,可以设置过期时间和路径,不同页面之间共享。

Session 是服务器端用于存储用户会话状态的机制,通常使用 Session ID 来标识用户会话。当用户第一次访问服务器时,服务器会为其创建一个 session,然后将 session ID 存储在 cookie 或者 URL 中,用于在该用户的后续请求中进行身份验证和状态管理。Session 数据存储在服务器端,相对于 Cookie 更安全、更难被篡改,但也需要服务器维护和消耗更多的资源。

16.说一下 session 的工作原理?

简而言之,Session 的工作原理是通过在服务器端创建、存储和管理会话数据,并通过在客户端使用 session ID 进行身份验证和状态管理,实现用户会话的跟踪和状态维护。

17.http 响应码 301 和 302 代表的是什么?有什么区别?

http 响应码 301:

http 响应码 302:

18.tomcat 如何调优?

调整Tomcat的性能和优化配置是提高Web应用程序性能的重要步骤。

以下是一些优化Tomcat的常见方法:

(1)调整内存分配

将JVM最大堆大小(-Xmx)和初始堆大小(-Xms)设置为合适的值,以确保应用程序运行期间有足够的内存,一般建议堆的最大值设置为可用内存的最大值的 80%。

调整新生代和老年代的比例,可以使用参数 -XX:NewSize 和 -XX:MaxNewSize 调整新生代堆大小。

(2)调整线程池和连接池

配置Tomcat的连接和线程池大小,确保它能够处理预期的并发请求,可以通过调整 maxThreads、minSpareThreads 和 maxConnections 等参数进行配置。

使用合适的连接池,例如对于数据库连接,可以使用连接池来管理连接,以提高性能和资源利用率。

(3)启用压缩

启用Tomcat的压缩功能,可以通过配置启用GZIP压缩,减小传输内容的大小,提高性能。

(4)优化静态资源处理

使用独立的Web服务器(如Nginx或Apache)作为前置服务器,处理静态资源和缓存请求,减轻Tomcat服务器负担。

针对Tomcat内置的静态资源缓存,可以通过配置添加Expires或Cache-Control响应头来缓存静态资源。

(5)监控和调整

使用监控工具如JConsole、JVisualVM或者性能工具如VisualVM来监控Tomcat性能,识别性能瓶颈并做相应调整。

根据监控结果,适时调整JVM和Tomcat的配置参数,以优化性能。

19.如何增加 tomcat 的连接数?

20.如何增加Tomcat的内存?

要增加 Tomcat 的内存,你需要调整 Tomcat 运行时的JVM参数。以下是一般步骤:

(1)找到 Tomcat 的启动脚本

Tomcat 的启动脚本通常位于 bin 目录下,具体文件名可能是 catalina.sh (Linux) 或 catalina.bat (Windows)。

(2)编辑启动脚本,设置 JVM 参数

在启动脚本中找到 JAVA_OPTS 或 CATALINA_OPTS 变量,并增加 -Xmx 和 -Xms 参数来分别设置最大堆和初始堆大小。

示例:

CATALINA_OPTS="$CATALINA_OPTS -Xms512m -Xmx1024m" 这将会将初始堆大小设置为512MB,最大堆大小设置为1024MB。你可以根据实际情况调整这些值。

(3)重启 Tomcat 服务器

保存启动脚本并重启 Tomcat 服务器,以应用新的内存设置。

21.Tomcat 有几种部署方式?

① 将WAR包或文件夹直接放置到Tomcat的webapps目录下,Tomcat会自动解压并部署项目,缺点是需要重启项目。

② 不想放在webapps下,也可以在Tomcat的server.xml文件中配置标签,添加标签来指定项目的WAR包路径。(一般采用①)。

③ 可以将Tomcat运行在Docker容器中,通过Dockerfile或者docker-compose文件来管理和部署应用程序。

④ 可以将 Tomcat 应用部署到云服务提供商(如AWS、Azure、Google Cloud等)的云服务器上,实现灵活的弹性部署,按需分配资源。

来源:哪吒编程内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯