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攻击的风险。

相关推荐
EatFan5 小时前
Spring Boot 4 落地观察:从 yudao-cloud、matecloud、JPower 看国产脚手架的升级路线与迁移清单
java·spring boot·后端·spring cloud·微服务·后端开发·jdk 21
Maiko Star6 小时前
* LangChain 提示词模板详解:ChatPromptTemplate 的使用与高级特性
java·人工智能·langchain
现任明教教主~8 小时前
Thinkphp站群蜘蛛池SaaS系统YanyvSEO含多用户/积分/六大引擎计费/易支付对接
java·开发语言·spring
一条破秋裤9 小时前
Linux 线程创建:pthread_create 与基本回收
java·linux·运维
布吉岛的石头9 小时前
Java 程序员第 49 阶段5:BERT 预训练目标 MLM+NSP 的工程含义
java·人工智能·深度学习·bert·transformer
此时不提桶,更待何时10 小时前
05-03-B-ClickHouse与OLAP面试与生产事故实战
clickhouse·面试·nosql
摇滚侠10 小时前
《On Java 中文版 基础卷》阅读笔记 对象无处不在 03
java·笔记·python
二十雨辰10 小时前
[学成在线]-01项目背景
java
此时不提桶,更待何时11 小时前
03-04-B-连接池与DB治理面试与生产事故实战
mysql·面试
弈栈录11 小时前
Java AI 应用的异步化与高并发设计
java·后端·架构