文章目录
六、Java Web
1. jsp 和 servlet 有什么区别?
JSP是Servlet技术的扩展,本质上还是Servlet
Servlet和JSP的不同点在于:
-
Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。
-
JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。
-
JSP侧重于视图,Servlet主要用于控制逻辑。
2. jsp 有哪些内置对象?作用分别是什么?
JSP共有以下9个内置的对象:
- request 用户端请求,此请求会包含来自GET/POST请求的参数
- response 网页传回用户端的回应
- pageContext 网页的属性是在这里管理
- session 与请求有关的会话期
- application servlet 正在执行的内容
- out 用来传送回应的输出
- config servlet的构架部件
- page JSP网页本身
- exception 针对错误网页,未捕捉的例外
3. 说一下 jsp 的 4 种作用域?
- application 在所有应用程序中有效
- session 在当前会话中有效
- request 在当前请求中有效
- page 在当前页面有效
4. session 和 cookie 有什么区别?
session存放在服务器端,cookie存在客户端,cookie又分为会话cookie和持久化cookie,回话cookie随着浏览器关闭消失,持久化cookie在客户端硬盘
session的信息是通过sessionid获取的,sessionid存在会话cookie中,浏览器关闭会话cookie消失,session的信息还在服务器端只是查不到了并不是不存在。session在服务器关闭或过期的情况下数据消失
5. 说一下session的工作原理?
- 用户第一次请求服务器时,服务器端会生成一个sessionid
- 服务器端将生成的sessionid返回给客户端,通过set-cookie
- 客户端收到sessionid会将它保存在cookie中,当客户端再次访问服务端时会带上这个sessionid
- 当服务端再次接收到来自客户端的请求时,会先去检查是否存在sessionid,不存在就新建一个sessionid重复1,2的流程,如果存在就去遍历服务端的session文件,找到与这个sessionid相对应的文件,文件中的键值便是sessionid,值为当前用户的一些信息
- 此后的请求都会交换这个 Session ID,进行有状态的会话。
6. 如果客户端禁止cookie能实现session还能用吗?
默认情况下,在会话中,服务器存储 session 的 sessionid 是通过 cookie 存到浏览器里。如果浏览器禁用了 cookie,浏览器请求服务器无法携带 sessionid,服务器无法识别请求中的用户身份,session失效。
禁用 cookie 的情况下,通过url重写,把 sessionid 作为参数追加的原 url 中或者服务器的返回数据中包含 sessionid,可以继续使用session
7. spring mvc 和 struts 的区别是什么?
- spring mvc 单例 非线程安全
struts1单例 非线程安全
struts2线程安全对每个请求都产生一个实例 - spring mvc的入口是servlet,而struts2是filter
spring 的前端总控制器为 DispatcherServlet
struts2 的前端总控制器为 FilterDispatcher
struts1 的前端总控制器为 actionServlet - struts在接受参数时,用属性来接受参数,参数是多个方法共享。
springmvc 用方法来接受参数 - spring mvc是基于方法的设计,而sturts是基于类
8. 如何避免sql注入?
- 首先在前台页面对用户输入信息进行js验证,屏蔽特殊字符,限制用户名输入的长度,
- 对于用户的敏感信息我们进行Md5加密,
- 给连接数据库用户满足需要的最低权限
9. 什么是XSS攻击,如何避免?
XSS 攻击,即跨站脚本攻击,它是 web 程序中常见的漏洞
避免思路:
web 页面中可由用户输入的地方,如果对输入的数据转义、过滤处理,后台输出页面的时候,也需要对输出内容进行转义、过滤处理
前端对 html 标签属性、css 属性赋值的地方进行校验
10. 什么是CSRF攻击,如何避免?
CSRF(跨站点请求伪造)攻击者在用户已经登录目标网站之后,诱使用户访问一个攻击页面,利用目标网站对用户的信任,以用户身份在攻击页面对目标网站发起伪造用户操作的请求,达到攻击目的
避免方法:
- CSRF 漏洞检测的工具,如 CSRFTester、CSRF Request Builder…
- 验证 HTTP Referer 字段
- 添加并验证 token
- 添加自定义 http 请求头
- 敏感操作添加验证码
- 使用 post 请求