JAVA WEB面试总结
本文目录:
1. 什么是cookie
2. 什么是session
3.什么是Servlet,Servlet生命周期方法
4.JSP隐含对象
5.JSP的四个域对象的作用范围
6.转发和重定向的区别
7.Post和Get请求的区别
8.拦截器与过滤器的区别
9.https与http区别
1. 什么是cookie
Cookie意为“甜饼”,是由W3C组织提出,最早由Netscape社区发展的一种机制。目前Cookie已经成为标准,所有的主流浏览器如IE、Netscape、Firefox、Opera等都支持Cookie。
由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份。怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。这就是Cookie的工作原理.
1.1 Cookie特点:
a. 修改跟删除只能覆盖更新;
b. 不能跨域;
c. 保存在浏览器端;
d. 使用key-value保存。
1.2 工作流程:

1.3 cookie api

2. 什么是session
Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以.
如果说Cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。
2.1 session 特点
- 各个线程的session隔离;
- 浏览器第一次访问时创建保存在服务端;静态地址访问不会创建session;
- 同一个session多次访问时记录最后访问时间。
2.2 session api
//获取Session对象
request.getSession()
request.getSession(boolean create)
//获取SessionId
getId()
//获取当前session对象的创建时间
getCreationTime()
//获取最后一次访问该session对象的时间
getLastAccessedTime()
//设置Session最大时效
setMaxInactiveInterval()
//获取Session最大时效
getMaxInactiveInterval()
//判断当前Session对象是不是新建的
/**
如果客户端请求消息中返回了一个与Servlet程序当前获得的HttpSession对象的会话标识号相同的会话标识号,则认为这个HttpSession对象不是新建的。
*/
isNew()
//销毁当前Session对象
invalidate()
//属性相关
setAttribute()
3.什么是Servlet,Servlet生命周期方法
用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容, Servlet 可以用 javax.servlet 和 javax.servlet.http 包创建。
生命周期:
- Servlet 通过调用 init () 方法进行初始化。只会执行一次
- Servlet 调用 service() 方法来处理客户端的请求。每次服务器接收到一个 Servlet 请求时,服务器会产生一个新的线程并调用服务。service() 方法检查 HTTP 请求类型(GET、POST、PUT、DELETE 等),并在适当的时候调用 doGet、doPost、doPut,doDelete 等方法
- Servlet 通过调用 destroy() 方法终止(结束)。
- 最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。
4.JSP隐含对象

|
隐含对象 |
所属的类 |
说明 |
|
request |
javax.servlet.http.HttpServletRequest |
客户端的请求信息 |
|
response |
javax.servlet.http.HttpServletResponse |
网页传回客户端的响应 |
|
session |
javax.servlet.http.HttpSession |
与请求有关的会话 |
|
out |
javax.servlet.jsp.JSPWriter |
向客户端浏览器输出数据的数据流 |
|
application |
javax.servlet.ServletContext |
提供全局的数据,一旦创建就保持到服务器关闭 |
|
pageContext |
javax.servlet.jsp.PageContext |
JSP页面的上下文,用于访问页面属性 |
|
page |
java.lang.Object |
同Java中的this,即JSP页面本身 |
|
config |
javax.servlet.servletConfig |
Servlet的配置对象 |
|
exception |
java.lang.Throwable |
针对错误网页,捕捉一般网页中未捕捉的异常 |
|
对象名称 |
API |
|
Request |
setAttribute/getAttribute/getParameter /getRequestURI/getRemotePort |
|
response |
addCookie/encodeRedirectURL/sendError |
|
out |
clear |
|
session |
getMaxInactiveInterval/invalidate/getId/ getCreationTime |
|
application |
getServerInfo/getContext |
|
pageContext |
getRequest/getResponse/getServletContext/ getSession/setAttribute |
|
exception |
getMessage |
|
config |
getInitParameter/getServletName |
|
page |
代表jsp编译后的servlet,能调用servlet里的方法 |
5.JSP的四个域对象的作用范围
|
域 |
作用范围 |
|
PageContext域 |
当前JSP页面范围 |
|
request域 |
一次请求 |
|
session域 |
一次会话 |
|
application域 |
整个web应用 |
6.转发和重定向的区别
|
名称 |
请求次数 |
url地址是否改变 |
共享数据 |
新地址要求 |
|
转发 |
1 |
否 |
是 |
同一个应用下的地址 |
|
重定向 |
2 |
是 |
否 |
任意地址 |
7.Post和Get请求的区别

从传输的角度看,post和get都是不安全的,只有https是安全的。
get的最大长度限制是因为浏览器和web服务器限制了URL的长度。
POST 方法会产生两个 TCP 数据包?
答:HTTP 协议中没有明确说明 POST 会产生两个 TCP 数据包,而且实际测试(Chrome)发现,header 和 body 不会分开发送,不是必然行为。
8.拦截器与过滤器的区别
区别:
l Filter基于servlet,拦截器基于spring框架。拦截器可以访问spring里的事务、server对象等,过滤器不能
l 拦截器是基于java的反射机制的,而过滤器是基于函数回调。
l 拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。
l 在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。
l 深度不同:拦截器能够深入到方法前后、异常抛出前后,弹性更好,filter只在serlvet前后起作用。
下面通过分析springmvc中拦截器、过滤器、service()方法(分发不同的servlet给不同的controller),dispatc()的执行顺序来加深理解,如下图:

总结:优先使用拦截器
9.https与http区别
总结:
|
名称 |
传输方式 |
ca证书? |
有无状态 |
|
http1.0 |
超文本明文传输 |
否 |
无 |
|
https |
Ssl加密传输 |
是 |
有 |
|
http2.0 |
超文本明文传输 |
否 |
有(新增了有状态的组件) |
http工作流程:
第一步:建立TCP/IP连接,客户端与服务器通过Socket三次握手进行连接
第二步:客户端向服务端发起HTTP请求(例如:POST/login.html http/1.1)
第三步:客户端发送请求头信息,请求内容,最后会发送一空白行,标示客户端请求完毕
第四步:服务器做出应答,表示对于客户端请求的应答,例如:HTTP/1.1 200 OK
第五步:服务器向客户端发送应答头信息
第六步:服务器向客户端发送请求头信息后,也会发送一空白行,标示应答头信息发送完毕,接着就以Content-type要求的数据格式发送数据给客户端
第七步:服务端关闭TCP连接,如果服务器或者客户端增Connection:keep-alive就表示客户端与服务器端继续保存连接,在下次请求时可以继续使用这次的连接
为了提高安全性和效率HTTPS结合了对称和非对称两种加密方式。
https工作流程:
第一步:客户使用https的URL访问Web服务器,要求与Web服务器建立SSL连接。
第二步:Web服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端。
第三步:客户端的浏览器与Web服务器开始协商SSL连接的安全等级,也就是信息加密的等级。
第四步:客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。
第五步:Web服务器利用自己的私钥解密出会话密钥。
第六步:Web服务器利用会话密钥加密与客户端之间的通信。
加密算法:
- 单向散列:对信息进行散列加密,得到固定长度的密文,包括:MD5/SHA;
- 对称加密:加密、解密使用同一个秘钥,包括:DES/RC
- 非对称加密:分为公钥、私钥,私钥保存在服务器端,公钥加密的只有私钥能解,反之也是,包括:RSA
JAVA WEB面试总结的更多相关文章
- java web面试技巧,数据库面试,java web轻量级开发面试教程
我最近看到一本比较好的讲java web方面面试的书,java web轻量级开发面试教程. 其中不仅用案例和视频讲述了Spring MVC,Hibernate, ORM等方面的技巧,而且还实际讲到了面 ...
- java web轻量级开发面试教程摘录,java web面试技巧汇总,如何准备Spring MVC方面的面试
本内容摘自 java web轻量级开发面试教程 https://baike.baidu.com/item/Java%20Web%E8%BD%BB%E9%87%8F%E7%BA%A7%E5%BC%80% ...
- java web面试
1. session和cookie的区别和联系,session的生命周期,多个服务部署时session管理. 原博http://blog.csdn.net/shuaishenkkk/article/d ...
- JAVA面试精选【Java web部分一】
Java的基础知识点就太多了,要说也不能穷尽,这个主要是靠自己在平时的积累和项目的开发经验,外边考的多的一般是继承,多态,线程,集合等等,但是笔试或者是面试中很有可能问许多集体的内容,比如hashMa ...
- Java Web架构知识整理——记一次阿里面试经历
惭愧,从一次电面说起.我个人在某国企做一名软件设计师,国企大家都懂的,待遇一般而且没啥意思,做的方向基本都是操作系统.驱动和工具软件的开发,语言基本都是C/C++.最近也想跳槽,刚好有幸得到了一次阿里 ...
- java web方面的面试问题,Spring MVC方面的面试问题,摘自java web轻量级开发面试教程
本文摘自java web轻量级开发面试教程: https://baike.baidu.com/item/Java%20Web%E8%BD%BB%E9%87%8F%E7%BA%A7%E5%BC%80%E ...
- java web轻量级开发面试教程内容精粹:哪些简历得不到面试机会
看到一本较好的实践性比较强的书,java web轻量级开发面试教程,里面的一些内容很有实践意义. 问题点 很难获得面试机会的原因 学历不符,比如要求是本科以上,但学历是大专 学历是硬指标,所以达不到学 ...
- Java web轻量级开发面试教程读书笔记:数据库方面,如何准备面试
如果在面试或与资深人事交流的过程中,你能有效合理地展示出本章所给出的一些知识点,那么对你的评价就会是"对数据库有深入了解",甚至能加上"有设计数据表的经验",即 ...
- java web轻量级开发面试教程读书笔记:建索引时我们需要权衡的因素
场景一,数据表规模不大,就几千行,即使不建索引,查询语句的返回时间也不长,这时建索引的意义就不大.当然,若就几千行,索引所占的空间也不多,所以这种情况下,顶多属于"性价比"不高. ...
随机推荐
- odoo10学习笔记二:继承(扩展)、模块数据
转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/11189252.html 一:继承 在不改变底层对象的时候添加新的功能——这是通过继承机制来实现的,作为在现有 ...
- pytest_前置后置
今天总结下pytest,pytest简直就是python自动化中的高富帅,各种操作,哈哈 这次总结主要涉及到了以下几点: 1.unittest中的setUp.tearDown.setUpClass.t ...
- BeanShell实现加密解密功能
一,在IDEA中写好加密的脚本 二,然后将整个包文件导出,生成jar包 三,将jar包文件放到jmeter的lib/ext目录下 然后在jmeter的BeanShell中引入该类,调用其中的加密方法 ...
- slf4j 和 logback 的区别
slf4j 和 logback 的区别: slf4j是Java的一个日志门面,实现了日志框架一些通用的api; logback是具体的日志框架.它和log4j是同一个作者,他是为了解决log4j存在的 ...
- Linux sh、source和.命令执行.sh文件的区别
sh文件介绍 .sh为Linux的脚本文件,我们可以通过.sh执行一些命令,可以理解为windows的.bat批处理文件. 点命令 .命令和source是同一个命令,可以理解为source的缩写,简称 ...
- eclipse配置JDK和设置编译版本的几种方法
eclipse配置JDK和设置编译版本的几种方法 2016-12-13 16:08 http://blog.csdn.net/gnail_oug/article/detail ...
- Mybatis ResultMap多表映射DTO
解决问题:n+1问题,之前我的习惯是拿到单表里面的数据,然后遍历,再拿到一个与其他表对应的逻辑上的外键,然后for循环去查找其他表的数据(原因是数据量小,没有在意,还有主要是不想建外键,你知道的,外键 ...
- 每天一道Rust-LeetCode(2019-06-05)
每天一道Rust-LeetCode(2019-06-05) 最长回文子串 坚持每天一道题,刷题学习Rust. 接续昨天,最长会问字符串的另一种解法 题目描述 解题过程 //leetcode最快解法 / ...
- Windbg Locals(局部变量)窗口的使用
在WinDbg中,可以通过输入命令.使用“局部变量”窗口或使用“监视”窗口查看局部变量.局部变量窗口显示当前作用域中的本地变量的所有信息. 如何打开Locals窗口 通过菜单View--->Lo ...
- 知识点总结 HTML+CSS部分
1.html+css经典布局 ①左列定宽,右列自适应 .left{width:100px;float:left;} .right{overflow:hidden;} ②两列顶宽,中栏自适应 .left ...