Java 最常见的 208 道面试题(64-73)-------java web

64.jsp 和 servlet 有什么区别?

     Servlet在java代码中可以通过HttpServletResponse对象动态输出HTML内容
     JSP是在静态HTML内容中嵌入java代码,然后java代码在被动态执行后生成HTML内容

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

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

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

四种作用域: page, request, session, application
             1.page:         代表与页面相关的属性
             2.request:     代表与客户端发出的请求相关的对象和属性。
                    一个请求可以跨越多个页面,涉及多个web组件,需要在页面中临时显示的数据可以置于此作用域
             3.session:        代表某个用户与服务器当前建立会话相关的对象和属性,当前用户相关的数据应该存放在用户自己的Session中
             4.application:  代表与整个web应用程序相关的对象和属性,实质上application是跨越整个web应用程序的, 包括多个页面,请求和会话,是一个全局作用域

67.session 和 cookie 有什么区别?

Cookie和Session都是会话技术,Cookie是运行在客户端,Session是运行在服务器
     Cookie有大小限制以及浏览器,Session是大小没有限制和服务器内存大小有关
     Cookie有安全隐患,通过拦截或本地文件找得到你的cookie后可以进行共攻击
     Session是保存在服务器端上存在一段时间才会消失,如果session过多会增加服务器压力

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

Session内容保存在服务端,通常是保存在内存中,也可以保存在文件,数据库   中,客户端跟服务器通过SessionId来关联,SessionId通常以Cookie形式存储在客户端,每次Http请求,SessionId都会随着Cookie被传递到服务端,这样就可以通过SessionId取到相应的信息,来判断这个请求来自哪个客户端或用户

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

不能,禁用cookie之后,服务端无法接受到cookie里携带的sessionId,那么基于HTTP是无状态的,每一次请求,服务器都会当做是第一次请求,每次都会生成一个唯一的sessionId文件

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

  • 拦截机制的不同

Struts2是类级别的拦截,每次请求就会创建一个Action,和Spring整合时Struts2的ActionBean注入作用域是原型模式prototype,然后通过setter,getter吧request数据注入到属性。Struts2中,一个Action对应一个request,response上下文,在接收参数时,可以通过属性接收,这说明属性参数是让多个方法共享的。Struts2中Action的一个方法可以对应一个url,而其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了,只能设计为多例。

SpringMVC是方法级别的拦截,一个方法对应一个Request上下文,所以方法直接基本上是独立的,独享request,response数据。而每个方法同时又何一个url对应,参数的传递是直接注入到方法中的,是方法所独有的。处理结果通过ModeMap返回给框架。在Spring整合时,SpringMVC的Controller Bean默认单例模式Singleton,所以默认对所有的请求,只会创建一个Controller,有应为没有共享的属性,所以是线程安全的,如果要改变默认的作用域,需要添加@Scope注解修改。

Struts2有自己的拦截Interceptor机制,SpringMVC这是用的是独立的Aop方式,这样导致Struts2的配置文件量还是比SpringMVC大。

  • 底层框架的不同

Struts2采用Filter(StrutsPrepareAndExecuteFilter)实现,SpringMVC(DispatcherServlet)则采用Servlet实现。Filter在容器启动之后即初始化;服务停止以后坠毁,晚于Servlet。Servlet在是在调用时初始化,先于Filter调用,服务停止后销毁。

  • 性能方面

Struts2是类级别的拦截,每次请求对应实例一个新的Action,需要加载所有的属性值注入,SpringMVC实现了零配置,由于SpringMVC基于方法的拦截,有加载一次单例模式bean注入。所以,SpringMVC开发效率和性能高于Struts2。

  • 配置方面

spring MVC和Spring是无缝的。从这个项目的管理和安全上也比Struts2高。

71.如何避免 sql 注入?

   通过预编译 #{}
   严格的参数校验

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

跨站脚本攻击,用户注入执行恶意代码
   攻击分类:
          - 反射形  构造带有恶意代码的url链接诱导正常用户点击,服务器收到这个url对应的请求读取其中的参数然后没有做过滤就拼接到Html页面发送给浏览器,浏览器解析执行
          - 持久形  将恶意的xss代码保存在数据库中,每次获取该数据都会
          - DOM     完全在前端浏览器出发,无需服务端参与

   避免:
          - 使用浏览器自带的xss filter
          - CSP (Content Security Policy)
          - Http-Only

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

跨站域请求伪造,伪造请求访问网站
   避免:
          - referer验证
          - token验证

发布了11 篇原创文章 · 获赞 1 · 访问量 1509

猜你喜欢

转载自blog.csdn.net/qq_42029989/article/details/104898338