赶紧收藏!2024 年最常见 100道 Java 基础面试题(三十五)

上一篇地址:赶紧收藏!2024 年最常见 100道 Java 基础面试题(三十四)-CSDN博客

六十九、spring mvcstruts的区别是什么?

Spring MVC和Struts都是Java EE(Java Enterprise Edition)中流行的MVC(Model-View-Controller)框架,用于构建Web应用程序。尽管它们的目标相似,但在设计理念、功能特性和使用方式上存在一些区别:

Spring MVC:

  1. 非侵入性:Spring MVC不需要通过实现框架特定的接口或继承特定类来开发应用程序。它鼓励使用POJO(Plain Old Java Object)。

  2. 前端控制器:Spring MVC使用一个中心控制器DispatcherServlet来处理所有请求,并将请求转发到不同的处理器。

  3. 注解支持:Spring MVC支持使用注解(如@RequestMapping)来简化配置和映射,减少XML配置文件的使用。

  4. 灵活性:Spring MVC提供了灵活的配置选项,允许开发者自由选择需要的组件。

  5. 集成性:Spring MVC是Spring框架的一部分,可以无缝集成Spring的其他模块,如数据访问、安全和消息传递。

  6. RESTful支持:Spring MVC对RESTful应用程序提供了更好的支持,包括请求映射和消息转换。

  7. 依赖注入:Spring MVC使用Spring的依赖注入容器来管理应用程序的组件。

Struts:

  1. 基于MVC:Struts是一个经典的MVC框架,它要求开发者遵循MVC模式,实现特定的接口和类。

  2. 控制器组件:Struts使用Action类作为控制器,每个Action对应一个请求处理。

  3. 配置中心化:Struts使用XML配置文件来定义应用程序的组件和请求映射,这使得配置集中化但可能变得复杂。

  4. 扩展性:Struts通过插件和自定义的拦截器(Interceptor)提供了扩展性。

  5. 表单处理:Struts提供了对表单处理的支持,包括表单验证和数据绑定。

  6. OGNL(Object-Graph Navigation Language):Struts使用OGNL表达式语言来访问和操作对象属性。

  7. 依赖管理:Struts使用自己的依赖注入机制,虽然也可以与Spring集成,但通常不需要Spring的依赖注入容器。

区别总结:

  • 配置方式:Spring MVC倾向于使用注解和Java配置类,而Struts主要使用XML配置文件。
  • 非侵入性:Spring MVC更加非侵入性,不需要开发者改变模型类的结构。
  • RESTful支持:Spring MVC对RESTful应用程序的支持更好。
  • 集成性:Spring MVC可以更好地与Spring生态系统集成。
  • 社区和文档:Spring MVC由于Spring框架的流行,拥有更大的社区和更丰富的文档资源。

在选择框架时,应考虑项目的具体需求、团队的熟悉度以及未来的可维护性。Spring MVC由于其灵活性、RESTful支持和与Spring生态系统的集成,通常被认为是现代Java Web应用程序开发的更优选择。然而,Struts在一些遗留系统中仍然被广泛使用。

七十、如何避免SQL注入?

SQL注入是一种常见的安全漏洞,攻击者可以通过在应用程序的输入字段中插入恶意SQL代码,从而欺骗后端数据库执行非法操作。以下是一些避免SQL注入的策略:

  1. 使用预处理语句(PreparedStatement)

    • 预处理语句可以避免SQL注入,因为它们使用参数化查询,这意味着SQL语句在发送到数据库时已经确定,参数后的值不会作为SQL代码执行。
    String sql = "SELECT * FROM users WHERE username = ? AND password = ?";
    PreparedStatement stmt = connection.prepareStatement(sql);
    stmt.setString(1, username);
    stmt.setString(2, password);
  2. 对用户输入进行验证

    • 在服务器端对所有用户输入进行验证,确保它们符合预期的格式,例如使用正则表达式来限制输入。
  3. 使用白名单验证

    • 定义可接受的输入值范围,并拒绝所有不在这个范围内的输入。
  4. 对用户输入进行消毒

    • 对用户输入进行消毒,移除或转义特殊字符,以防止它们被解释为SQL代码。
  5. 使用ORM框架

    • 使用对象关系映射(ORM)框架,如Hibernate或JPA,可以自动处理参数化查询,减少SQL注入的风险。
  6. 限制数据库权限

    • 为应用程序使用的数据库账户分配最小的必要权限,避免使用具有超级用户权限的账户。
  7. 使用Web应用防火墙(WAF)

    • 部署Web应用防火墙可以帮助过滤恶意流量,包括SQL注入攻击。
  8. 定期更新和打补丁

    • 保持应用程序和数据库软件更新到最新版本,以利用最新的安全修复。
  9. 错误处理

    • 避免在错误消息中泄露敏感信息,如数据库结构或SQL语句。自定义错误页面,避免显示详细的数据库错误信息。
  10. 使用安全的框架和库

    • 使用已经考虑到安全性的框架和库,它们通常提供了防止SQL注入的机制。
  11. 进行安全审计和代码审查

    • 定期进行代码审查和安全审计,以发现和修复潜在的安全漏洞。
  12. 用户教育

    • 对开发人员进行安全最佳实践的教育,提高他们对SQL注入等安全问题的意识。

示例代码:

// 错误的SQL查询,易受SQL注入攻击
String username = request.getParameter("username");
String password = request.getParameter("password");
String sql = "SELECT * FROM users WHERE username = '" + username + "' AND password = '" + password + "'";// 正确的SQL查询,使用预处理语句防止SQL注入
String sql = "SELECT * FROM users WHERE username = ? AND password = ?";
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setString(1, username);
stmt.setString(2, password);

总结

  • 使用预处理语句和参数化查询是避免SQL注入的最有效方法。
  • 对用户输入进行严格的验证和消毒,限制数据库权限,使用ORM框架,部署Web应用防火墙等措施也非常重要。
  • 定期更新软件,进行安全审计,以及对开发人员进行安全教育,可以帮助减少SQL注入的风险。

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

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

相关文章

三层交换机与防火墙连通上网实验

防火墙是一种网络安全设备,用于监控和控制网络流量。它可以帮助防止未经授权的访问,保护网络免受攻击和恶意软件感染。防火墙可以根据预定义的规则过滤流量,例如允许或阻止特定IP地址或端口的流量。它也可以检测和阻止恶意软件、病毒和其他威…

20240508日记

今天工作内容: 1.二号机S3点位焊接测试,调整位置精度。 2.一号机送针位置调整 3.自定义焊接功能测试 4.EAP服务启动测试 明日计划: 1.EAP流程修改功能开发 1.1 Read Barcode Complete 事件,上传料盘码和设备ID,等EA…

SlowFast报错:ValueError: too many values to unpack (expected 4)

SlowFast报错:ValueError: too many values to unpack (expected 4) 报错细节 File "/home/user/yuanjinmin/SlowFast/tools/visualization.py", line 81, in run_visualizationfor inputs, labels, _, meta in tqdm.tqdm(vis_loader): ValueError: too …

牛客题-链表内区间反转

链表内区间反转 这是代码 typedef struct ListNode listnode; struct ListNode* reverseBetween(struct ListNode* head, int m, int n ) {if (head NULL) {return NULL;}listnode* findhead head;listnode* findtail head;listnode* prev NULL;int count1 m;int count2…

nginx的rewrite重定向

rewrite地址重定向,实现URL重定向的重要指令,它根据regex(正则表达式)来匹配内容跳转 语法:rewrite regex replacement[flag] rewrite ^/(.*) https://www.baidu.com/$1 permanent; # 这是一个正则表达式,匹…

pdf 文件版面分析--pdfplumber (python 文档解析提取)

pdfplumber 的特点 1、它是一个纯 python 第三方库,适合 python 3.x 版本 2、它用来查看pdf各类信息,能有效提取文本、表格 3、它不支持修改或生成pdf,也不支持对pdf扫描件的处理 import glob import pdfplumber import re from collection…

[前后端基础]图片传输与异步

前后端之间传递照片 在前后端之间传递照片,通常可以采用以下几种方式: Base64 编码传输:将图片转换为 Base64 编码的字符串,然后通过接口传递到后端,后端再将 Base64 字符串转换回图片格式。这种方式简单易行&#xff…

OpenCV 入门(二)—— 车牌定位

OpenCV 入门系列: OpenCV 入门(一)—— OpenCV 基础 OpenCV 入门(二)—— 车牌定位 OpenCV 入门(三)—— 车牌筛选 OpenCV 入门(四)—— 车牌号识别 OpenCV 入门&#xf…

C#面:简要谈对微软.NET 构架下 remoting 和 webservice 两项技术的理解以及实际中的应用

在微软 .NET 框架下,Remoting 和 WebService 是两种常用的技术,用于实现分布式应用程序的通信和交互。 Remoting(远程调用): Remoting是一种用于在不同应用程序域之间进行通信的技术。它允许对象在不同的进程或计算机…

十分钟掌握Java集合之List接口

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一…

培养逻辑思考力的7大基本方法笔记

《逻辑思考力》一书中介绍的培养逻辑思考力的七大基本方法如下,每种方法都旨在帮助人们更有效地分析问题、制定策略和做出决策: 1. 使解决问题的过程透明化 解释:这种方法强调的是清晰地界定问题解决的步骤,确保每一步都可追踪和…

C++反射之检测struct或class是否实现指定函数

目录 1.引言 2.检测结构体或类的静态函数 3.检测结构体或类的成员函数 3.1.方法1 3.2.方法2 1.引言 诸如Java, C#这些语言是设计的时候就有反射支持的。c没有原生的反射支持。并且,c提供给我们的运行时类型信息非常少,只是通过typeinfo提供了有限的…

微信小程序开发秘籍:揭秘基础库版本与客户端版本的不解之缘【代码示例】

微信小程序开发秘籍:揭秘基础库版本与客户端版本的不解之缘【代码示例】 基础概念:何为基础库?何为客户端?基础库(Weixin Mini Program Base Library)客户端(WeChat Client) 版本关系…

leetcode刷题(5): STL的使用

文章目录 56. 合并区间解题思路c实现 55. 跳跃游戏解题思路c 实现 75. 颜色分类解题思路c 实现 36 下一个排列解题思路c 实现 56. 合并区间 题目: 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间&a…

每日一练 | 华为认证真题练习Day227

1、MSTP 解决了很多 RSTP 和 STP 单个生成树的缺陷,关于 MSTP 的说明,正确的是: A.每个 MST Instance 都使用单独的 STP 算法,计算单独的生成树. B.每一个 MST Instance 都有一个标识(MST ID) ,MST ID 是一字节的整数. C.默认所有 VLAN 映射到 MST Instance 1. …

Linux(openEuler、CentOS8)企业内网samba服务器搭建(Windows与Linux文件共享方案)

本实验环境为openEuler系统<以server方式安装>&#xff08;CentOS8基本一致&#xff0c;可参考本文) 目录 知识点实验1. 安装samba2. 启动smb服务并设置开机启动3. 查看服务器监听状态4. 配置共享访问用户5. 创建共享文件夹6. 修改配置文件7. 配置防火墙8. 使用windows…

9. 回文数

题目描述 判断一个整数是不是回文整数。 解题思路 可以转成字符串&#xff0c;然后逆序计算。 也可以直接按照第7题一样&#xff0c;把整数的每一位逆序&#xff0c;然后判断和原来的是否相等。 注意负数可以直接返回false。 代码 class Solution { public:bool isPalin…

Hypack 2024 简体中文资源完整翻译汉化已经全部完成

Hypack 2024 简体中文资源完整翻译汉化已经全部完成 Hypack 2024&#xff0c;资源汉化共翻译11065条。毕竟涉及测绘、水文、疏浚等专业术语太多&#xff0c;翻译有很多理解不正确的地方&#xff0c;望各位专业人员指正。 压缩包内包含Hypack 2024、Hypack 2022、Hypack 2021、…

Autoxjs 实践-Spring Boot 集成 WebSocket

概述 最近弄了福袋工具&#xff0c;由于工具运行中&#xff0c;不好查看福袋结果&#xff0c;所以我想将福袋工具运行数据返回到后台&#xff0c;做数据统计、之后工具会越来越多&#xff0c;就弄了个后台&#xff0c;方便管理。 实现效果 WebSocket&#xff1f; websocket是…

Qt应用开发(拓展篇)——图表 QChart

一、前言 QChart是一个图形库模块&#xff0c;它可以实现不同类型的序列和其他图表相关对象(如图例和轴)的图形表示。要在布局中简单地显示图表&#xff0c;可以使用QChartView来代替QChart。此外&#xff0c;线条、样条、面积和散点序列可以通过使用QPolarChart类表示为极坐标…