Java Web 面试

1jsp 和 servlet 有什么区别?

JSP(JavaServer Pages)是一种用于创建动态Web页面的Java技术,它允许在HTML页面中嵌入Java代码,并通过JSP容器在服务器上进行解析和执行。JSP主要用于视图层的展示和交互。

Servlet是一种运行在服务器上的Java程序,用于接收和处理来自客户端的HTTP请求,并生成响应。Servlet可以通过编程方式生成HTML内容和其他数据,主要用于控制层的处理和业务逻辑。

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

request:封装了客户端请求的信息,包括请求参数、请求头等。

response:封装了服务器响应的信息,包括响应内容、响应状态等。

out:用于向客户端输出内容。

session:表示会话对象,用于在多个请求之间共享数据。

application:表示应用程序对象,用于在整个应用程序范围内共享数据。

page:表示当前JSP页面本身,可以用于获取JSP页面的属性和配置信息。

config:表示当前JSP页面的配置信息。

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

page:页面作用域,表示在当前页面中有效。

request:请求作用域,表示在同一个请求中有效。

session:会话作用域,表示在同一个会话中有效。

application:应用程序作用域,表示在整个应用程序范围内有效。

4 session 和 cookie 有什么区别?

Session是服务器端的机制,用于跟踪用户的状态。服务器为每个会话创建一个唯一的Session对象,并将该对象的ID通过Cookie发送给客户端保存。Session可以存储在服务器的内存中或持久化到数据库等存储介质中。

Cookie是客户端的机制,用于在客户端存储少量的数据。Cookie是由服务器发送给客户端的小型文本文件,存储在客户端的浏览器中。每次浏览器向服务器发送请求时,都会将相应的Cookie信息包含在请求头中发送给服务器。

5 说一下 session 的工作原理?

客户端访问服务器时,服务器为该客户端创建一个唯一的Session对象,并生成一个Session ID。

服务器将Session ID通过Cookie发送给客户端保存。

客户端的浏览器在后续的请求中都会携带该Cookie,将Session ID发送给服务器。

服务器根据Session ID找到对应的Session对象,从而识别出用户的身份和状态。

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

如果客户端禁止Cookie,仍然可以使用Session,但需要通过URL重写的方式将Session ID添加到URL参数中,在每个请求中都携带Session ID。

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

Spring MVC是一个基于Spring框架的Web MVC框架,提供了一套完整的、灵活的Web开发体系结构。Spring MVC是Spring的一部分,可以直接集成到Spring应用中使用。

Struts是一个独立的开源Web MVC框架,它的核心是一个基于Java EE的MVC框架。Struts需要单独配置和部署,与Spring框架集成需要额外的配置和工作。

8 如何避免 sql 注入?

使用参数化查询(Prepared Statement):将SQL语句中的参数使用占位符代替,然后通过设置参数的值来传递数据,从而避免拼接SQL字符串。

输入验证和过滤:对用户输入进行验证和过滤,确保输入的数据符合预期的格式和类型。

使用ORM框架(如Hibernate、MyBatis):ORM框架会自动处理SQL语句和参数的拼接,减少手动拼接SQL的机会,从而降低SQL注入的风险。

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

对用户输入进行转义处理:对用户输入的特殊字符进行转义,确保其在页面上仅作为普通文本显示,而不被浏览器解释为代码。

输入验证和过滤:对用户输入进行验证和过滤,确保输入的数据符合预期的格式和类型。

设置HTTP响应头的Content-Security-Policy:通过设置Content-Security-Policy响应头,限制页面中能够执行的脚本来源。

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

验证请求来源:在后端验证每个请求的来源是否合法,可以通过检查Referer头、添加Token等方式来验证请求的合法性。

使用验证码:对于敏感操作,要求用户输入验证码进行验证,增加攻击者的难度。

设置SameSite属性:通过设置Cookie的SameSite属性为Strict或Lax,限制Cookie只能在同源请求中发送,从而减少CSRF攻击的风险。

相关推荐
魔道不误砍柴功34 分钟前
Java 中如何巧妙应用 Function 让方法复用性更强
java·开发语言·python
NiNg_1_23434 分钟前
SpringBoot整合SpringSecurity实现密码加密解密、登录认证退出功能
java·spring boot·后端
闲晨37 分钟前
C++ 继承:代码传承的魔法棒,开启奇幻编程之旅
java·c语言·开发语言·c++·经验分享
测开小菜鸟2 小时前
使用python向钉钉群聊发送消息
java·python·钉钉
P.H. Infinity3 小时前
【RabbitMQ】04-发送者可靠性
java·rabbitmq·java-rabbitmq
生命几十年3万天3 小时前
java的threadlocal为何内存泄漏
java
caridle3 小时前
教程:使用 InterBase Express 访问数据库(五):TIBTransaction
java·数据库·express
^velpro^3 小时前
数据库连接池的创建
java·开发语言·数据库
苹果醋33 小时前
Java8->Java19的初步探索
java·运维·spring boot·mysql·nginx
秋の花4 小时前
【JAVA基础】Java集合基础
java·开发语言·windows