# Get 和 Post 的区别
get 和 post 都是 http 的请求方式,用户通过不同的请求方式来完成对资源的不同操作,get、post、put、delete 分别对应着资源的查、改、增、删四个操作,一般来说 get 用来获取资源,post 用于更新资源
- get 请求提交的数据会在地址栏显示出来,post 请求不会
- 由于地址栏长度有限,导致 get 传输的数据有限,而 post 不会
- 安全性,post 安全性比 get 高
# 对 Servlet 的理解
Servlet 是用 Java 程序编写的服务端程序,而这些 Servlet 都要实现 Servlet 接口,其主要功能是用于交互式的浏览和修改数据,生成动态网页
HttpServlet 重写 doget 和 dopost 方法或者重写 service 方式可以实现对 get 和 post 请求的响应
# Servlet 的生命周期
加载 Servlet 的生命周期,调用 init () 进行初始化,然后调用 service () 方法来处理客户端的请求,最后调用 destroy () 终止
# forward 与 redirect 的区别
- forward 地址栏不会发生改变,redirect 地址栏会发生改变
- forward 是服务器上的行为,redirect 是客户端的行为
- forward 是一次请求完成的,redirect 是两次请求完成的
- forward 效率较高
# JSP 与 Servlet 的相同点与不同点
相同点:JSP 是 Servlet 的扩展,所有的 JSP 文件最终都会被翻译成一个继承 HttpServlet 类,也就是说 JSP 最终也是一个 Servlet
不同点:JSP 侧重于视图,Servlet 侧重于控制逻辑
# JSP 的九大内置对象与四大作用域
九大内置对象
Request:客户端的请求
Response:网页传回客户端的响应
PageContext:网页属性的管理,通过该对象获取其他对象
Session:会话
Application:servlet 正在执行的内容
Out:传递回应的输出
Config:servlet 的架构不见
Page:Jsp 网页本身
Exception:针对错误的网页
四大作用域
page:只在一个页面保留数据
request:只在一个请求中保存数据
Session:再一次会话中保存数据,仅供单个用户使用
Application:在整个服务器中保存数据,全部用户共享
# Cookie 与 Session 的区别
cookie 和 session 都是会话跟踪技术
不同点
- cookie 的数据是存在客户端的,session 的数据是存在服务器上的
- cookie 是不安全的
- session 会在一定时间内存放在服务器上,当访问增多时,会占用服务器的性能
- 单个 cookie 的保存数据不能超过 4k, 很多浏览器一个站点最多存放 20 个 cookie
建议
将登录信息等重要信息保存在 session 中,其他信息如需保留,可以放在 cookie 中,如:购物车
购物车最好使用 cookie,范式 cookie 实在客户端禁用的,只是要我们需要使用 cookie + 数据库的方式实现,当从 cookie 中不能取出数据时,就从数据库中取
# 如果客户端禁止 cookie 能实现 session 还能用吗?
可以,session 只依赖 cookie 存储 sessionId,如果 cookie 被禁用了,可以使用 url 添加 sessionId 的方式保证 session 能正常使用。
# 什么是 XSS 攻击,如何避免?
XXS 攻击:即跨站脚本攻击,它是 web 程序常见的漏洞,原理是攻击者往 web ⻚⾯⾥插⼊恶意的脚 本代码(css 代码、javascript 代码等),当⽤户浏览该⻚⾯时,嵌⼊其中的脚本代码会被执⾏,从⽽达 到恶意攻击⽤户的⽬的,如盗取⽤户 cookie、破坏⻚⾯结构、重定向到其他⽹站等。
预防 XSS 的核⼼是必须对输⼊的数据做过滤处理。
# 什么是 CSRF 攻击,如何避免?
CSRF:Cross-Site Request Forgery(跨站请求伪造),可以理解为攻击者盗用了你的身份,以你的名义恶意发送请求。
防御手段:
- 验证请求来源地址
- 关键操作添加验证码
- 在请求地址添加 token 验证