高频面试题 - JAVA WEB
- cookie和session的区别
- cookie数据保存在客户端,session数据保存在服务端。
- cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,相当重要的数据,应该使用session保存到服务端。
- session会在一定时间内保持在服务器上,但是会占用内存资源,当访问的用户过多,会加重服务器的负载,考虑到减轻服务器的压力,可以将不重要的数据放在cookie中持久的保存。
- 单个cookie保存的数据不能超过4k,很多浏览器都限制站点最多保存20个cookie。
- session与浏览器得会话默认会以cookie实现
- http协议简单协议
- HTTP(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的连接方式。http请求由三部分组成,分别是:请求行、消息报头、请求正文,响应也包含三部分:状态行(包含HTTP版本、状态码、状态码的原因短语)、响应首部字段、响应内容实体
- Get和Post请求方式的区别?
- get地址栏有参数显示 post不会再地址栏显示参数(参数是放在了请求体)
- get不安全 post相对安全
- get限制大小 post理论上不限制
- JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?
-JSP是Servlet技术的扩展,本质上就是Servlet的简易方式。JSP编译后是“类servlet”。Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑
- request:负责得到客户端请求的信息,对应类型:javax.servlet.http.HttpServletRequest
- response:负责向客户端发出响应,对应类型:javax.servlet.http.HttpServletResponse
- session:负责保存同一客户端一次会话过程中的一些信息,对应类型:javax.servlet.http.httpsession
- out:负责管理对客户端的输出,对应类型:javax.serlvet.jsp.jspwriter
- application:表示整个应用环境的信息,对应类型:javax.servlet.servletcontext
- config:表示ServletConfig,对应类型:javax.servlet.servletconfig
- exception:表示页面中发生的异常,可以通过它获得页面异常信息,对应类型:java.lang.exception
- pagecontext:表示这个JSP页面上下文,对应类型:javax.servlet.jsp.pagecontext
- page:表示当前JSP页面本身
- jsp四大作用域
- page是代表一个页面相关的对象和属性。
- request一个请求可能跨越多个页面。
- session一个web回话也可以经常跨域多个请求。
- application是代表与整个web应用程序相关的对象和属性。
- servlet的生命周期
- 第一次请求的时候servlet被初始化,而且只初始化一次,所以tomcat容器中每一个servlet只有一个对象存在
- 初始化后先调用init方法,只执行一遍
- 每个请求,调用一遍service -> service -> doGet/doPost。以多线程的方式运行
- 卸载前调用destroy方法
- 重定向和转发的区别?
- 重定向是客户端行为,转发是服务器端行为
- 重定向两次请求两次响应,转发一次请求一次响应
- 重定向路径需要加工程名,转发的路径不需要加工程名.
- 重定向可以跳转到任意网站,转发只能在服务器内部进行转发.
- 重定向会导致request对象信息丢失。转发则不会
- 如何防止表单重复提交?
- JavaScript控制
- 使用session实现令牌机制
15) 过滤器有哪些作用,以及过滤器的生命周期
- 生命周期:每个Filter在tomcat启动时进行初始化,每个Filter只有一个实例对象
(1). Init:在服务器启动时会创建Filter实例
(2). doFilto:这个方法会在用户每次访问“目标资源”时执行
(3). destroy():服务器关闭时销毁Filter对象 - 作用:
(1). 验证客户是否来自可信网络
(2). 对客户提交的数据进行重新编码
(3). 过滤掉客户的某些不应该出现的词汇
(4). 验证用户是否可以登录
(5). 验证客户的浏览器是否支持当前的应用
(6). 记录系统日志
16) session 共享怎么做的(分布式如何实现 session 共享)
(1) 可以使用tomcat广播机制实现session共享
(2) 可以使用redis+tomcat实现session共享
(3) 可以使用Spring Session完成session共享
- Servlet是安全的吗?
- 是线程不安全的,因为servlet是单例模式,当多个客户端共同访问的时候线程不安全。
尽量用局部变量,同步块,如果当前字段是不会改变的,用final修饰