六、Java Web

64.jsp 和 servlet 有什么区别?

jsp是servlet技术的扩展,本质上就是servlet的简易方式。servlet和jsp最主要的不同点在于,servlet的应用逻辑是在java文件中,并且完全从表示层中html里分离开来,而jsp的情况是java和html可以组合成一个扩展名为jsp的文件。jsp侧重于视图,servlet主要用于控制逻辑。

65.jsp 有哪些内置对象?作用分别是什么?

jsp有9大内置对象:

  • request:封装客户端的请求,其中包含来自get或post请求的参数;
  • response:封装服务器对客户端的响应;
  • pageContext:通过该对象可以获取其他对象;
  • session:封装用户会话的对象;
  • application:封装服务器运行环境的对象;
  • out:输出服务器响应的输出流对象;
  • config:web应用的配置对象;
  • page:jsp页面本身(相当于java程序中的this);
  • exception:封装页面抛出异常的对象。

    66.说一下 jsp 的 4 种作用域?

  • page:代表与一个页面相关的对象和属性。

  • request:代表与客户端发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个web组件:;需要在页面显示的临时数据可以置于此作用域。
  • session:代表与某个用户与服务器建立的一次会话相关的对象和属性。跟某个用户相关的数据应该放在用户自己的session中。
  • application:代表与整个web应用程序相关的对象和属性,它本质上是跨越整个web应用程序,包括多个页面、请求和会话的一个全局作用域。

    67.session 和 cookie 有什么区别?

  • 存储位置不同:session存储在服务器端,cookie存储在浏览器端。

  • 安全性不同:cookie安全性一般,在浏览器存储,可以被伪造和修改。
  • 容量和个数限制:cookie有容量限制,每个站点下的cookie也有个数限制。
  • 存储的多样性:session可以存储在redis中、数据库中、应用程序中;而cookie只能存储在浏览器中。

    68.说一下 session 的工作原理?

    session的工作原理是客户端登录完成之后,服务器会创建对应的session,session创建完之后,会把session的id发送给客户端,客户端再存储到浏览器中,这样客户端每次访问服务器时,都会带着sessionid,服务器拿到sessionid之后,在内存找到与之对应的session这样就可以正常工作了。

    69.如果客户端禁止 cookie 能实现 session 还能用吗?

    可以用,session只是依赖cookie存储seesionid,如果cookie被禁用了,可以使用url中添加seesionid的方式保证session能正常使用。

    70.spring mvc 和 struts 的区别是什么?

  • 拦截级别:struts2是类级别的拦截,spring MVC是方法级别的拦截。

  • 数据独立性:spring MVC的方法之间基本上独立的,独享request和response数据,请求数据通过参数获取,处理结果通过ModelMap交回给框架,方法之间不共享变量;而struts2虽然方法之间也是独立的,但其所有action变量是共享的,这不会影响程序运行,却给我们编码和读程序时带来了一定的麻烦。
  • 拦截机制:struts2有以自己的interceptor机制,spring MVC用的是独立的aop方式,这样拦截导致struts2的配置文件量比spring MVC大。
  • 对ajax的支持:spring MVC集成了ajax,所有ajax使用很方便,只需要一个注解@ResponseBody就可以实现了,而struts2一般需要安装插件或者自己写代码才行。

    71.如何避免 sql 注入?

  • 使用预处理PreParedStatement。

  • 使用正则表达式过滤掉字符中的特殊字符。

    1. 严格限制 Web 应用的数据库的操作权限,给连接数据库的用户提供满足需要的最低权限,最大限度的减少注入攻击对数据库的危害
    2. 校验参数的数据格式是否合法(可以使用正则或特殊字符的判断)
    3. 对进入数据库的特殊字符进行转义处理,或编码转换
    4. 预编译 SQLJava 中使用 PreparedStatement),参数化查询方式,避免 SQL 拼接
    5. 发布前,利用工具进行 SQL 注入检测
    6. 报错信息不要包含 SQL 信息输出到 Web 页面

    72.什么是 XSS 攻击,如何避免?

    XSS攻击:即跨站脚本攻击,他是web程序中常见的漏洞。原理是攻击者往web页面里插入恶意的脚本代码(css代码、JavaScript代码等),当用户浏览该页面时,嵌入其中的脚本代码会被执行,从而达到恶意攻击用户的目的,如盗取用户cookie、破坏页面结构、重定向到其他网站等。
    预防XSS的核心是必须对输入的数据做过滤处理。

    73.什么是 CSRF 攻击,如何避免?

    CSRF:Cross-Site Request Forgery(中文:跨站请求伪造),可以理解为攻击者盗用了你的身份,以你的名义发送邮件、发消息、购买商品、虚拟货币转账等。
    防御手段:

  • 验证请求来源地址;

  • 关键操作添加验证码;
  • 在请求地址添加token并验证。