Java面试题08

1.jsp 和 servlet 有什么区别?

JSP(JavaServer Pages)是一种在HTML中嵌入Java代码的技术,适合用于生成动态内容; Servlet是Java编写的服务器端程序,用于处理HTTP请求和响应。

JSP (Java Server Pages) 和 Servlet 都是用于创建动态网页的技术,它们都基于 Java 语言,但是有以下一些主要的区别:

  1. 实现方式:Servlet 是一个 Java 类,必须显式地继承 HttpServlet 类,并重写其中的一些方法。JSP 是一个基于 Servlet 的技术,它允许开发人员通过 XML 格式的页面来编写动态内容,而不需要直接编写 Java 代码。
  2. 页面显示:在 Servlet 中,所有的代码都在 Java 文件中,并且显示结果也是通过 Java 代码生成的。而在 JSP 中,显示结果是通过 HTML 和其他标记语言(如 JSTL, Jsf 等)生成的,而处理业务逻辑的代码被嵌入到这些标记中。
  3. 性能:由于 JSP 页面第一次运行时会被转化为 Servlet,所以 Servlet 的性能通常会比 JSP 高。然而,当开发大型应用程序时,JSP 的便利性和易用性可能会超过其性能上的损失。
  4. 可读性:由于 JSP 允许开发人员使用 HTML 和其他标记语言来编写页面,所以它的可读性通常比 Servlet 高。对于非 Java 开发人员来说,JSP 可能比 Servlet 更易于理解。
  5. 用途:Servlet 主要用于处理复杂的业务逻辑,而 JSP 主要用于生成用户界面。然而,在实际开发中,这两种技术经常一起使用。
  6. 可维护性:由于 JSP 的代码被嵌入到 HTML 中,所以当需要修改页面布局或样式时,可能需要对 JSP 文件进行修改。而 Servlet 则可以独立于页面布局进行修改。

总的来说,JSP 和 Servlet 有各自的优势和用途。在选择使用哪种技术时,需要根据项目的具体需求和开发团队的技能来决定。

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

JSP有9个内置对象,包括request、response、session、application、out、page、 pageContext、config和exception,用于在JSP页面中访问HTTP请求和其他上下文信息。

JSP(Java Server Pages)内置了九个对象,它们不需要初始化就可以直接使用。这些内置对象如下:

  1. request: 这个对象用于获取客户端发送的请求信息。例如,你可以使用这个对象获取查询参数、请求头、客户端的 IP 地址等。
  2. response: 这个对象用于向客户端发送响应。你可以使用这个对象设置响应头、设置 cookie 等。
  3. pageContext: 这个对象用于管理 JSP 页面的上下文。你可以使用这个对象获取页面参数、页面属性等。
  4. session: 这个对象用于在多个请求之间保存客户端的状态。你可以使用这个对象保存用户的登录状态等。
  5. application: 这个对象用于在整个应用范围内共享数据。所有的用户都可以访问到这个对象保存的数据。
  6. out: 这个对象用于发送响应到客户端。你可以使用这个对象向客户端发送 HTML 内容、XML 内容等。
  7. config: 这个对象用于获取 Servlet 配置信息。你可以使用这个对象获取 Servlet 名称、Servlet 映射路径等。
  8. page: 这个对象代表当前 JSP 页面。你可以使用这个对象调用其他 JSP 页面、JavaBean 等。
  9. exception: 这个对象用于获取异常信息。当 JSP 页面抛出异常时,你可以使用这个对象获取异常信息。注意,这个对象只能在声明了 "isErrorPage=true" 的页面中使用。这个页面被称为错误页面。

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

JSP的四种作用域分别是page(页面)、request(请求)、session(会话)和 application(应用程序),用于在不同范围内存储和共享数据

JSP有四种作用域,分别是:

  1. pageContext:页面域。页面的作用域仅限于当前页面对象,可以近似地理解为this对象,离开当前Jsp页面,则pageContext中的所有属性就会丢失。
  2. request:请求域。请求作用域是同一个请求之内,在页面跳转时,如果通过forward方式跳转,则forward目标页面仍然可以拿到request中的属性值。 如果通过redirect方式进行页面跳转,由于redirect相当于重新发出请求,此种情境下,request中的属性值会丢失。
  3. session:会话域。会话作用域是在会话的生命周期内,会话失效,则session中的数据也随之丢失。
  4. application:应用域。应用作用域最大,只要服务器不停止,则application对象就一直存在,并且为所有会话所共享。

以上信息仅供参考,可以咨询专业的技术人员获取更全面更准确的信息。

4.session 和 cookie 有什么区别?

Session是在服务器端维护的一种状态信息,保存在服务器内存中;Cookie是在客户端维护 的一种状态信息,保存在客户端的浏览器中。

Session和Cookie是两种不同的会话技术,它们有以下区别:

  1. 保存位置:Session保存在服务器端的内存中,而Cookie保存在客户端,通常是浏览器中或者是文件中。
  2. 保存时间:Session在关闭当前会话相关浏览器后自动清空,而Cookie则根据过期时间而有所不同。
  3. 安全性:Session相对较安全,而Cookie如果不进行加密处理则相对不安全,可能会被拦截或被人为清除。
  4. 保存数据大小:Cookie的大小通常受限于浏览器,一般是4K左右,而Session则没有大小限制,取决于服务器的内存大小。
  5. 稳定性:Cookie在客户端,受用户控制,可以被禁用也可以被人为清除,而Session相对较稳定。

综上所述,Session和Cookie各有其特点,需要根据具体的应用场景和需求来选择使用。

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

当客户端发送请求时,服务器为每个客户端创建一个唯一的Session ID,将Session ID保存 在Cookie中或通过URL重写传递给客户端。服务器通过Session ID来查找对应的Session对象,从 而维护客户端会话状态。

Session的工作原理基于HTTP协议的无状态性,即服务器不能记住上一个请求和下一个请求之间的关系。因此,当客户端向服务器发送请求时,服务器会将请求数据存储在服务器端,并给该客户端生成一个唯一的Session ID,并将其通过响应头Set-Cookie返回给客户端。客户端在收到响应后,会将该Session ID存储在浏览器中,以便后续请求时使用。

当客户端再次向服务器发送请求时,会将该Session ID通过请求头Cookie发送到服务器端。服务器端通过检索之前存储的Session ID,找到对应的会话数据,并对其进行处理。这样,服务器端就可以根据Session ID识别不同的客户端,并将相关的请求数据保存在服务器端,从而实现会话的保持。

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

如果客户端禁止了Cookie,仍然可以通过URL重写的方式传递Session ID来实现Session功 能。

如果客户端禁止了cookie,仍然可以通过URL重写的方式传递session ID来实现session功能。在URL重写中,服务器会将session ID作为参数或查询字符串的一部分附加到URL中,以便在后续请求中将其传递给其他页面。客户端在发送请求时,将包含session ID的URL发送到服务器,服务器通过检索session ID来识别客户端,并保持会话的持续性。

然而,使用URL重写实现session功能相对麻烦,且在处理动态网页和表单提交时可能会出现问题。此外,如果客户端使用代理服务器或缓存服务器,则URL重写可能会失效。因此,在大多数情况下,使用cookie来实现session功能更为方便和可靠。

需要注意的是,如果客户端禁止了cookie,则无法使用基于cookie的session机制。在这种情况下,可以考虑使用其他方式来实现会话的保持,例如使用token、SSL证书或HTTP header等方式来传递会话信息。

7.spring mvc 和 struts 的区别是什么

Spring MVC和Struts都是Java Web开发框架,但Spring MVC更加灵活、模块化,支持依赖 注入和AOP;而Struts是基于MVC模式的框架,较老,相对来说更加限制。

Spring MVC和Struts是两个广泛使用的Java Web开发框架,它们有一些重要的区别。以下是它们之间的一些主要差异:

  1. 设计理念:Spring MVC是基于方法的设计,它通过方法形参实现参数传递,并且每个方法可以独立处理请求。而Struts是基于类的设计,通过类的属性接收参数,并且多个方法可以共享这些参数。
  2. 参数传递:Spring MVC的Controller更接近于Service开发,每个方法通常只处理一个请求,并且通过方法的形参接收参数。这种传递方式是单例模式,有助于进行单例开发。而Struts则使用全局变量传递参数,参数可以在多个方法之间共享。
  3. 性能:Spring MVC由于是基于方法的设计和单例模式,因此在性能上通常优于Struts。Struts由于使用全局变量传递参数,可能导致在多实例环境下性能下降。
  4. 开发方式:Spring MVC的入口是Servlet,而Struts的入口是Filter。此外,Spring MVC更接近于Service开发,使得业务逻辑和控制器层的分离更清晰。
  5. 标签使用:Struts因为使用了Struts标签,可能会影响性能。建议在使用Struts时使用JSTL标签。
  6. 测试:Spring MVC可以更好地支持单元测试和集成测试,因为它更接近于Service开发,业务逻辑和控制器层的分离更清晰。

总的来说,Spring MVC和Struts都是强大的Java Web开发框架,它们都有各自的优点和适用场景。选择哪个框架取决于项目的具体需求和开发团队的偏好。

8.如何避免 SQL 注入?

可以使用预编译语句、参数化查询、ORM框架等方式来避免SQL注入,不要直接将用户输 入的数据拼接到SQL语句中。

SQL注入是一种常见的网络安全威胁,攻击者通过在输入字段中插入恶意SQL代码,以试图修改数据库的行为。要避免SQL注入,可以采取以下几种方法:

  1. 使用预编译语句(Prepared Statements)或参数化查询:这种方法可以确保输入被正确地处理,并且不会被解释为SQL代码。在大多数现代编程语言中,都有支持预编译语句的库或函数。
  2. 限制用户的权限:只给予用户必要的权限,以最小化他们能够执行的操作。例如,如果一个用户只需要查询数据,那么就不应该给予他们修改或删除数据的权限。
  3. 输入验证:验证用户输入的数据是否符合预期的格式和类型。例如,如果期望的输入是一个整数,那么任何非数字的输入都应该被拒绝。
  4. 使用Web应用防火墙(WAF):WAF可以检测并阻止SQL注入攻击。
  5. 更新和打补丁:确保你的数据库和编程语言库都是最新的版本,并及时打补丁,以修复已知的安全漏洞。
  6. 安全的错误处理:避免在出现错误时显示敏感信息,这可能会泄露数据库的结构或其它敏感信息。
  7. 最小化显示SQL错误信息:在开发过程中,应尽量减少向用户显示详细的错误信息,特别是与SQL相关的错误信息,以防止攻击者根据错误信息进行SQL注入攻击。
  8. 数据库帐户隔离:对于每一个需要与数据库交互的应用程序,都应该使用独立的数据库帐户。不应该使用具有过高权限的共享帐户。

9.什么是 XSS 攻击,如何避免?

XSS(Cross-Site Scripting)攻击是指攻击者通过在网页中插入恶意脚本,从而窃取用户信 息。可以避免XSS攻击的方法包括对用户输入进行合适的转义、过滤和验证。

XSS攻击即跨站脚本攻击,是一种常见的网络攻击技术。它利用网站没有对用户提交的表单进行过滤和验证的漏洞,通过注入恶意脚本,盗取用户的Cookie、Session ID等敏感信息,甚至可以篡改网页内容,达到攻击的目的。

要避免XSS攻击,可以采取以下几种方法:

  1. 对用户输入进行过滤和验证:对用户输入的数据进行严格的过滤和验证,确保输入的数据符合预期的格式和类型,避免恶意的输入被提交到服务器。
  2. 使用HTTP头部的X-Content-Type-Options:设置X-Content-Type-Options为nosniff,可以防止浏览器在处理响应时对MIME类型进行嗅探,从而避免潜在的XSS攻击。
  3. 启用内容安全策略(CSP):CSP可以限制浏览器加载哪些资源,从而防止恶意脚本的注入和执行。通过设置合适的CSP策略,可以有效防止XSS攻击。
  4. 使用安全的编码实践:在编写Web应用程序时,应该遵循安全的编码实践,避免将用户提交的输入直接嵌入到HTML页面中,而是使用安全的编码函数对输入进行处理,例如使用HTML实体编码函数对特殊字符进行编码。
  5. 更新和打补丁:及时更新Web应用程序和相关库的版本,并及时打补丁,以修复已知的安全漏洞。
  6. 限制用户的权限:只给予用户必要的权限,以最小化他们能够执行的操作。例如,如果一个用户只需要查询数据,那么就不应该给予他们修改或删除数据的权限。
  7. 输入验证:验证用户输入的数据是否符合预期的格式和类型。例如,如果期望的输入是一个整数,那么任何非数字的输入都应该被拒绝。
  8. 使用Web应用防火墙(WAF):WAF可以检测并阻止XSS攻击。

总之,避免XSS攻击需要采取多种措施来保护Web应用程序的安全。这些措施包括对用户输入进行过滤和验证、使用安全的编码实践、更新和打补丁、限制用户的权限、输入验证等。同时,还可以使用Web应用防火墙等安全设备来增强Web应用程序的保护能力。

10.什么是 CSRF 攻击,如何避免?

CSRF(Cross-Site Request Forgery)攻击是指攻击者通过欺骗用户在未经授权的情况下执 行操作。可以通过使用验证码、检查Referer头、使用Token验证等方式来避免CSRF攻击。

CSRF(Cross-Site Request Forgery)攻击是一种网络安全威胁,攻击者通过伪装来自受信任的用户的请求来攻击受信任的网站。CSRF攻击利用web中用户身份认证验证的一个漏洞:简答的身份验证仅仅可以保证请求发自某一个用户的浏览器,却无法保证请求本身是用户资源发出的。

要避免CSRF攻击,可以采取以下几种方法:

  1. 使用安全框架:例如Spring Security等,这些框架提供了内置的CSRF防护机制。
  2. 在HTTP请求中进行token验证:如果请求中没有token或者token内容不正确,则认为CSRF攻击而拒绝该请求。
  3. 验证码:验证码能够很好的遏制CSRF攻击,但是很多情况下,出于用户体验考虑,验证码只能作为一种辅助手段,而不是最主要的解决方案。
  4. Referer识别:在HTTP Header中有一个字段Referer,它记录了HTTP请求的来源地址。如果Referer是其他网站,就有可能是CSRF攻击,则拒绝该请求。但是,服务器并非都能取到Referer。很多用户出于隐私保护的考虑,限制了Referer的发送。在某些情况下,浏览器也不会发送Referer,例如HTTPS跳转到HTTP。
  5. 开启session同步:在多个系统之间同步session,确保攻击者无法通过伪造请求来获取用户的session信息。
  6. 使用CSRF令牌:为每个用户生成一个唯一的CSRF令牌,将其添加到每个表单中,并验证每个请求中的CSRF令牌是否正确。
  7. 验证请求源:确保请求来自合法的源。检查请求的IP地址、User-Agent等信息是否与预期相符。
  8. 使用HTTP Only Cookie:设置HTTP Only属性可以防止跨站脚本访问该Cookie,从而降低被CSRF攻击的风险。
  9. 确保前后端安全措施同步:后端和前端都需要采取相应的安全措施,如使用token、检查referer等,确保整个系统的安全性。

总之,避免CSRF攻击需要采取多种措施来保护Web应用程序的安全。这些措施包括使用安全框架、进行token验证、验证码、Referer识别、开启session同步、使用CSRF令牌、验证请求源等。同时,需要确保前后端安全措施同步,才能全面提升Web应用程序的安全性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/157881.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

漏洞检测与EPSS评分

EPSS (利用预测评分系统)是为了测量特定的漏洞在野外被利用的可能性。EPSS 得分范围从0% (最低的利用概率)到100% (最高的利用概率)。此外,由于仅从概率得分很难推断出真正的意义,EPSS 还提供百分位排名; 百分位排名衡量 EPSS 概率相对于所有其他 EPSS 得…

Qt无边框设计

//指定窗口为无边框 this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowMinMaxButtonsHint);重写鼠标事件: void mousePressEvent(QMouseEvent* event) override;

Python算法——树的路径和算法

Python算法——树的路径和算法 树的路径和算法是一种在树结构中寻找从根节点到叶节点的所有路径,其路径上的节点值之和等于给定目标值的算法。这种算法可以用Python语言实现,本文将介绍如何使用Python编写树的路径和算法,并给出一些示例代码…

事关Django的静态资源目录设置与静态资源文件引用(Django的setting.py中的三句静态资源(static)目录设置语句分别是什么作用?)

在Django的setting.py中常见的三句静态资源(static)目录设置语句如下: STATICFILES_DIRS [os.path.join(BASE_DIR, static_list)] # 注意这是一个列表,即可以有多个目录的路径 STATIC_ROOT os.path.join(BASE_DIR, static_root) STATIC_URL /static-url/本文介…

vue前端项目如何配置后端项目的请求地址

在 Vue 前端项目中配置后端项目的访问地址可以通过修改项目的配置文件来实现。Vue 常用的配置文件是 vue.config.js,你可以按照以下步骤进行配置: 在 Vue 项目的根目录下,创建或编辑 vue.config.js 文件。 在 vue.config.js 中,可…

PCS7中如何实现DB块变量的自动上传

问题:如何实现PCS7中DB块中变量的自动上传? 解答:PCS7下,所有CFC中的变量都通过编译的方式自动上传的OS项目中,针对自定义的DB块同样也可以通过设置相关属性自动上传的OS中,具体操作如下: 插入一个全局数据块。 注意:数据块号必须符合要求,可以参考PCS7中定义的预留DB…

【代数学习题4.1】从零理解范数与迹 —— 求极小多项式

从零理解范数与迹 —— 求极小多项式 写在前面概念解释题目解答 1. 极小多项式极小多项式的求法1. 对 α \alpha α 的极小多项式python求解 2. 对 α 1 \alpha 1 α1 的极小多项式python找到多项式python找到极小多项式 3. 对 α 2 α 1 \alpha^2 \alpha 1 α2α1 的…

Android : ListView + BaseAdapter-简单应用

​​容器与适配器:​​​​​ http://t.csdnimg.cn/ZfAJ7 示例图: 实体类 News.java package com.example.mylistviewbaseadapter.entity;public class News {private String title;private String content;private int img;public News(Str…

【Linux】Linux中的基本概念

Linux中的基本概念 1. 路径分隔符/2. 当前目录 .3. 返回上级目录 . .目录结构:多叉树 4. 路径5. 路径 { 绝对路径 相对路径 }6. * 通配符 指定路径下的所有文件7. 同级目录下,不允许存在同名文件,或者同名目录8. 命令的本质就是可执行文件9…

第三方模块远程注入到软件中引发软件异常的若干实战案例分享

目录 1、概述 2、老版本的输入法导致软件CPU频繁跳高(导致软件出现卡顿)的问题 3、QQ拼音输入法注入到安装包进程中,导致安装包主线程卡死问题 3.1、多线程死锁分析 3.2、进一步研究 4、安全软件注入到软件中,注入模块发生了…

什么是图神经网络

当这两种技术融合在一起时,就可以创造出一些新颖、奇妙的东西——比如手机和浏览器融合在一起,产生了智能手机。 如今,科研人员正在将人工智能发现模式的能力应用于存储各种数据点之间关系信息的大型图数据库。与此同时,就产生了…

基金项目申请撰写思路

随着社会经济发展和科技进步,基金项目对创新性的要求越来越高。申请人需要提出独特且有前瞻性的研究问题,具备突破性的科学思路和方法。因此,基金项目申请往往需要进行跨学科的技术融合。申请人需要与不同领域结合,形成多学科交叉…

FreeRTOS源码阅读笔记4--semphr.h

信号量是特殊的队列--无法存储消息的队列,相关的接口函数声明在semphr.h中,通过宏定义替换队列函数实现。 4.1创建二值信号量xSemaphoreCreateBinary() 4.1.1函数原型 queueQUEUE_TYPE_BINARY_SEMAPHORE:一个宏,表示创建队列的…

这是一棵适合搜索二叉树

🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻强烈推荐优质专栏: 🍔🍟🌯C的世界(持续更新中) 🐻推荐专栏1: 🍔🍟🌯C语言初阶 🐻推荐专栏2: 🍔…

JAVA编程思想N刷

Random 默认是系统时间,所有每次随机数都不一样。给random添加一个种子,Random(2),多次调用生成的随机数是一样的对象继承时,类加载过程。先执行父类的静态属性,执行当前类静态属性,…

单链表OJ题--9.环形链表

9.环形链表 141. 环形链表 - 力扣(LeetCode) /* 解题思路: 定义快慢指针fast,slow, 如果链表确实有环,fast指针一定会在环内追上slow指针。 */typedef struct ListNode Node; bool hasCycle(struct ListNode *head) {Node* slow …

wsl-ubuntu 系统端口总被主机端口占用问题解决

wsl-ubuntu 系统端口总被主机端口占用问题解决 0. 问题描述1. 解决方法 0. 问题描述 wsl-ubuntu 子系统中的服务,总是启动失败,错误信息是端口被占用。 用一些命令查看,被占用的端口也没有用服务启动。 1. 解决方法 运行, ne…

硬技能之上的软技巧(三)

在硬技能的基础上,如何运用软技巧来进一步提升个人能力和职业发展。在之前的讨论中,我们提到了硬技能和软技巧的基本概念,以及如何运用软技巧来提升个人能力和职业发展。本篇文章将进一步探讨软技巧中的一些重要方面,包括自我管理…

全网最全Django面试题整理(二)

什么是 Django ORM?它的作用是什么? Django ORM(Object-Relational Mapping)是Django框架中的一个重要组成部分,用于简化与数据库的交互。它提供了一种将数据库中的数据映射到Python对象的方法,使得开发者…