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

相关推荐
大尚来也5 分钟前
Java 线程池深度解析:ThreadPoolExecutor 七大参数与核心原理
java·python·算法
Mike_6667 分钟前
百度云车牌调用识别-Java工程
java·百度云·车牌识别·在线调用
白宇横流学长9 分钟前
基于 SpringBoot 的社团活动报名管理系统设计与实现
java·spring boot·后端
子豪-中国机器人10 分钟前
python AI自动化
java·前端·python
wy31362282125 分钟前
Android——组件化实战:Application启动时用ARouter实现跨模块调用
java·前端·spring
旺仔小拳头..29 分钟前
请求对象HttpServletRequest与响应对象HttpServletResponse
java
野犬寒鸦29 分钟前
从零起步学习AI大模型应用开发 || 第三章:智能体项目实战中的问题与解决方案及思路详解
java·服务器·数据库·人工智能·后端·面试
久绊A30 分钟前
服务器磁盘只读/故障排
java·linux·服务器
没有bug.的程序员31 分钟前
Spring Boot 与 MyBatis-Plus 批量插入的生死狙击
java·spring boot·后端·mybatis·plus·批量插入
马猴烧酒.32 分钟前
【Java复习|Lambda表达式】Java Lambda 表达式、函数式接口与匿名内部类:从起源到原理
java·开发语言·ide·笔记·python·spring