目录
1. Servlet
1.1.什么是servlet
是用Java编写的服务器端程序,主要功能在于交互式的浏览和修改数据,生成动态Web内容。
1.2.Servlet的生命周期,创建时间点
1.创建Servlet对象,通过服务器反射机制创建Servlet对象,第一次请求时才会创建。
2.调用Servlet对象的init()方法,初始化Servlet的信息,init()方法只会在创建后被调用一次;
3.响应请求,调用service()或者是doGet(),doPost()方法来处理请求,这些方法是运行的在多线程状态下的。
4.在长时间没有被调用或者是服务器关闭时,会调用destroy()方法来销毁Servlet对象。
创建时间点:
1)客户端请求对应的 Servlet 时,创建 Servlet 实例(默认)。
2)通过在web.xml 中设置load-on-startup来创建servlet实例,这种实例在Web 应用(tomcat)启动时,立即创建Servlet 实例。
1.3.如何避免servlet线程安全问题
尽可能不创建成员变量,使用局部变量代替成员变量,成员变量使用synchronized关键字加锁,实现SingleThreadModel接口。
1.4.Servlet和CGI的区别
Servlet处于服务器进程中,它通过多线程方式运行其Service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于Servlet。
1.5.什么情况下调用doGet()和doPost()
Jsp页面中的form标签里的method属性为get时调用doGet(),为post时调用doPost()。
2. JSP
2.1. JSP和Servlet有哪些相同点和不同点,它们之间的联系是什么?
它们本质上都是java类,JSP是Servlet技术的扩展,本质上是Servlet的简易方式。
不同点:
1>JSP经编译后变成Servlet
2>jsp更擅长表现于页面显示,Servlet更擅长于逻辑控制
3>Servlet的应用逻辑是在java文件中,并且完全从表现层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。
2.2. JSP中动态include与静态include的区别?
静态包含采用指令include,先包含在编译,生成一个class文件
动态包含采用pageContext.include()方法动态加载,先编译,生成两个class文件,再包含。
2.3. JSP内置对象
JSP共有以下9个内置的对象:
request 用户端请求,此请求会包含来自GET/POST请求的参数
response 网页传回用户端的回应
session 与请求有关的会话期
exception 针对错误网页,未捕捉的例外
pageContext 网页的属性是在这里管理
page JSP网页本身
application servlet正在执行的内容
out 用来传送回应的输出
config servlet的构架部件
2.4. JSP的常用指令
Jsp包含三个编译指令和七个动作指令。
三个编译指令为:page、include、taglib。
七个动作指令为:jsp:forward、jsp:param、jsp:include、jsp:plugin、jsp:useBean、jsp:setProperty、jsp:getProperty。
2.5. JSP/JavaBean的4 种作用域
application 在所有应用程序中有效 通过application.getAttribute()方法取得JavaBean对象
session 在当前会话中有效 通过HttpSession.getAttribute()方法取得JavaBean对象
request 在当前请求中有效 通过HttpRequest.getAttribute()方法取得JavaBean对象
page 在当前页面有效
3. Tomcat
3.1.Tomcat的优化经验
对web.xml的监视,把jsp提前编辑成Servlet。有富余物理内存的情况,加大tomcat使用的jvm的内存,利用缓存和压缩,采用集群,优化tomcat参数。
3.2.应用服务器与WEB服务器的区别?
WEB服务器一般是通用的,而应用服务器一般是专用的,如Tomcat只处理JAVA应用程序而不能处理ASPX或PHP。
3.3.应用服务器有那些?
Weblogic、Tomcat、Jboss。
4. get与post
4.1.HTTP请求的GET与POST方式的区别
解决乱码方式不同
GET请求参数会在地址栏显示,不安全,POST则不会,安全
GET有缓存,POST没有缓存
GET提交数据最多1024字节,POST没有限制
5. forward 和redirect
5.1.forward 和redirect的区别
forward一次请求一次响应,浏览器地址栏显示原地址,跳转的新地址必须是本Web应用系统的资源,转发页面和转发到的页面可以共享request里面的数据。
redirect两次请求两次响应,浏览器地址栏显示新地址,不能共享数据。
从效率来说forward:高,redirect:低。
6. session与cookie
6.1.session与cookie的区别
项目 | session | cookie |
数据保存位置 | 服务器端 | 客户端 |
存储类型 | 对象 | 字符串 |
生命周期 | 随会话结束而关闭 | 可指定时常 |
存放信息重要性 | 重要信息 | 非重要信息 |
6.2.页面间对象传递的方法
request,session,application,cookie等。
6.3. 如果客户端禁止 cookie 能实现 session 还能用吗
Session是用Session ID来确定当前对话所对应的服务器Session,而Session ID是通过Cookie来传递的,禁用Cookie相当于失去了Session ID,也就得不到Session了。
7. 网络
7.1. *在浏览器地址栏输入www.baidu.com并回车,直至显示出页面,经过了哪些过程
1.根据域名到DNS中找到IP(解析DNS域名)
2.根据IP建立TCP连接(三次握手)
3.连接建立成功发起http请求
4.服务器响应http请求
5.浏览器解析HTML代码并请求html中的静态资源(js,css)
6.关闭TCP连接(四次挥手)
7.浏览器渲染页面
解析DNS域名过程:
一.浏览器查找自己的DNS缓存,如果有直接返回,如果没有进行步骤二
二.操作系统查找自己的DNS缓存,如果有直接返回给浏览器,如果没有进行步骤三
三.操作系统查找本地host文件,如果有返回给浏览器,如果没有则进行步骤四
四.操作系统向本地域名服务器发起请求,查找本地DNS缓存,如果有,返回给操作系统,然后操作系统返回给浏览器,如果没有进行步骤五
五.操作系统向根域名服务器发起请求得到顶级域名服务器的IP,然后根域名服务器向顶级域名服务器发起请求得到权限域名服务器的IP,顶级域名服务器再向权限域名服务器发起请求得到IP,本地域名服务器返回给操作系统IP,同时将IP缓存起来,操作系统将IP返回给浏览器,同时将IP缓存起来。
7.2. TCP如何保证可靠传输?三次握手过程?
在TCP的连接中,数据流必须以正确的顺序送达对方。TCP的可靠性是通过顺序编号和确认(ACK)来实现的。TCP 连接是通过三次握手进行初始化的。三次握手的目的是同步连接双方的序列号和确认号并交换TCP窗口大小信息。第一次是客户端发起连接;第二次表示服务器收到了客户端的请求;第三次表示客户端收到了服务器的反馈。握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP连接都将被一直保持下去。
7.3. 四次挥手过程
1.客户端发送断开TCP连接请求的报文
2.服务端回复客户端发送的TCP断开请求报文
3.服务端等待数据传输完毕,向客户端发送断开请求
4.客户端收到服务端的TCP断开请求后,回复服务端的断开请求
7.4. 什么是 XSS 攻击,如何避免
XSS(Cross Site Scripting),即跨站脚本攻击,是一种常见于web应用程序中的计算机安全漏洞.XSS通过在用户端注入恶意的可运行脚本,若服务器端对用户输入不进行处理,直接将用户输入输出到浏览器,然后浏览器将会执行用户注入的脚本。
7.5. 什么是 CSRF 攻击,如何避免
CSRF(Cross-site request forgery)也被称为 one-click attack或者 session riding,中文全称是叫跨站请求伪造。一般来说,攻击者通过伪造用户的浏览器的请求,向访问一个用户自己曾经认证访问过的网站发送出去,使目标网站接收并误以为是用户的真实操作而去执行命令。常用于盗取账号、转账、发送虚假消息等。攻击者利用网站对请求的验证漏洞而实现这样的攻击行为,网站能够确认请求来源于用户的浏览器,却不能验证请求是否源于用户的真实意愿下的操作行为。
防范:验证 HTTP Referer 字段、使用验证码、在请求地址中添加token并验证、在HTTP 头中自定义属性并验证、AngularJS提供的CSRF方案。
7.6. http,https协议
HTTP:
是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。
HTTPS:
是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。
区别:
1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
7.7. 说说tcp/ip协议族
TCP/IP协议族是一个四层协议系统,自底而上分别是数据链路层、网络层、传输层和应用层。每一层完成不同的功能,且通过若干协议来实现,上层协议使用下层协议提供的服务。
1、数据链路层负责帧数据的传递。
2、网络层责数据怎样传递过去。
3、传输层负责传输数据的控制(准确性、安全性)
4、应用层负责数据的展示和获取。
7.8. tcp五层网络协议
物理层:
为数据端设备提供传送数据的通路,数据通路可以是一个物理媒体,也可以是多个物理媒体连接而成。
数据链路层:
为网络层提供数据传送服务。
网络层:
路由选择和中继、激活,终止网络连接、在一条数据链路上复用多条网络连接,多采取分时复用技术 、差错检测与恢复、排序,流量控制、服务选择、网络管理 。
传输层:
传输层是两台计算机经过网络进行数据通信时,第一个端到端的层次,具有缓冲作用。
应用层:
应用层向应用程序提供服务
7.9. 介绍一下HTTP的响应结构
请求报文的组成:
请求方法。
请求的资源的URI。
协议版本。
可选的请求首部字段。
内容实体。
响应报文的组成:
协议版本。
状态码。
用于解释状态码的原因短语。
可选的响应首部字段。
实体主体。
响应:
响应码:回应客户端此次响应是否成功。如:404(找不到请求的资源),500(服务器内部错误),200(成功响应)等。
消息头:服务器与客户端通信的暗码,告诉客户端该怎么执行某些操作。
响应正文:传递服务器响应给客户端要显示的内容,可以是下载文件或者显示界面。
其他
1.四种会话跟踪技术
page代表与一个页面相关的对象和属性。
request代表与 Web 客户机发出的一个请求相关的对象和属性。
session代表与用于某个Web 客户机的一个用户体验相关的对象和属性。
application是代表与整个Web 应用程序相关的对象和属性。
2.request.getAttribute() 和 request.getParameter() 有何区别?
getParameter 返回的是 String,是获取 POST/GET 传递的参数值
getAttribute 返回的是 Object,是获取 SESSION 的值
3.Request对象的主要方法
setAttribute():设置名字为name的request的参数值
getCookies():返回客户端的所有Cookie对象,结果是一个Cookie数组
getMethod():获得客户端向服务器端传送数据的方法
getParameter(String name):获得客户端传送给服务器端的有name指定的参数值