64.jsp 和 servlet 有什么区别?
jsp本质上就是一个servlet,它是servlet的一种特殊形式,每个jsp页面都是一个servlet实列
Servlet 是由 Java 提供用于开发 web 服务器应用程序的一个组件,运行在服务端,由 servlet 容器管理,用来生成动态内容。一个 servlet 实例是实现了特殊接口 Servlet 的 Java 类,所有自定义的 servlet 均必须实现 Servlet 接口
区别:
Servlet 适合动态输出 Web 数据和业务逻辑处理,对于 html 页面内容的修改非常不方便;Jsp 是在 Html 代码中嵌入 Java 代码,适合页面的显示
65.jsp 有哪些内置对象?作用分别是什么?
JSP有9个内置对象:
- request:封装客户端的请求,其中包含来自GET或POST请求的参数;
- response:封装服务器对客户端的响应;
- pageContext:通过该对象可以获取其他对象;
- session:封装用户会话的对象;
- application:封装服务器运行环境的对象;
- out:输出服务器响应的输出流对象;
- config:Web应用的配置对象;
- page:JSP页面本身(相当于Java程序中的this);
- exception:封装页面抛出异常的对象
66.说一下 jsp 的 4 种作用域?
application | 在所有应用程序中有效 |
session | 在当前会话中有效 |
request | 在当前请求中有效 |
page | 在当前页面有效 |
67.session 和 cookie 有什么区别?
1、cookie存放在客户端浏览器上,session存放在服务器上
2、单个cookie保存的数据要<=4kb 最多可以保存20个cookie,session没有限制
3、cookie中只能保管ASCII字符串,并需要通过编码方式存储为Unicode字符或者二进制数据
session中可以存储任何数据类型
4、cookie可以设置长期有效,session不能长期有效
5、cookie支持跨域名访问,session不支持
6、session存储到服务器比cookie存储在客户端本地安全
68.说一下 session 的工作原理?
浏览器通过访问服务器的servlet 服务器会自动创建session并把sessionId通过cookie返回给浏览器存储,这样客户端每次访问时都会带着sessionId,服务器根据sessionid 获取出会话中存储的信息,服务器会默认给 session 一个过期时间,即从该 session 的会话在有效时间内没有再被访问就会被设置过超时,需要重新建立会话
69.如果客户端禁止 cookie 能实现 session 还能用吗?
默认情况下 session 无法生效
其他方法:
1、把 sessionid 作为参数追加的原 url 中,后续的浏览器与服务器交互中携带 sessionid 参数
2、服务器的返回数据中包含 sessionid,浏览器发送请求时,携带 sessionid 参数
70.spring mvc 和 struts 的区别是什么?
1、SpringMVC是方法级别的拦截,struts是类级别的拦截
2、Struts2采用Filter实现,SpringMVC则采用Servlet实现
3、Struts2每次加载都需要加载所有属性,SpringMVC加载一次单例模式bean注入,所以SpringMVC开发效率和性能高于Struts2
4、spring MVC和Spring是无缝的,从这个项目的管理和安全上也比Struts2高
71.如何避免 sql 注入?
1、对用户的输入进行校验,可以通过正则表达式,或限制长度
2、预编译 SQL(Java 中使用 PreparedStatement),参数化查询方式,避免 SQL 拼接
3、永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接,最大限度的减少注入攻击对数据库的危害
4、对进入数据库的特殊字符进行转义处理,或编码转换
5、报错信息不要包含 SQL 信息输出到 Web 页面
6、发布前,利用工具进行 SQL 注入检测
72.什么是 XSS 攻击,如何避免?
XSS攻击是指跨站脚本攻击,是一种代码注入攻击,攻击者通过在网站上注入恶意脚本,使之在用户浏览器上运行,从而盗取用户信息如Cookie等
如何避免:
1、关键字转义:可以在后端对"<",">"等符号进行转译成HTML能试别的转义符
2、长度限制:一般XSS嵌入的恶意代码无论是那种类型,都需要相当的长度才能实施
3、开启CSP:白名单制度,开发者明确告诉客户端,哪些外部资源可以加载和执行
4、设置cookie的httpOnly属性:浏览器的cookie不能通过js脚本获取,即不能通过document.cookie获取
73.什么是 CSRF 攻击,如何避免?