1)JSP 和 servlet 有什么区别?
JSP 是 servlet 技术的扩展,本质上就是 servlet 的简易方式。servlet 和 JSP 最主要的不同点在于:
servlet 的应用逻辑是在 Java 文件中,并且完全从表示层中的html 里分离开来,
而JSP 的情况是 Java 和 html 可以组合成一个扩展名为JSP 的文件。
JSP 侧重于视图,servlet 主要用于控制逻辑。
2)JSP 有哪些内置对象?作用分别是什么?
request:封装客户端的请求,其中包含来自 get 或 post 请求的参数;
response:封装服务器对客户端的响应;
pageContext:通过该对象可以获取其他对象;
session:封装用户会话的对象;
application:封装服务器运行环境的对象;
out:输出服务器响应的输出流对象;
config:Web 应用的配置对象;
page:JSP 页面本身(相当于 Java 程序中的 this);
exception:封装页面抛出异常的对象。
3)说一下 JSP 的 4 种作用域?
page:表示页面范围,代表与一个页面相关的对象和属性。
request:表示一次请求,代表与客户端发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个 Web 组件;需要在页面显示的临时数据可以置于此作用域。
session:表示一个会话,代表与某个用户与服务器建立的一次会话相关的对象和属性。跟某个用户相关的数据应该放在用户自己的 session 中。
application:代表与整个 Web 应用程序相关的对象和属性,它实质上是跨越整个 Web 应用程序,包括多个页面、请求和会话的一个全局作用域。
4)session 和 cookie 有什么区别?
存储位置不同:session 存储在服务器端;cookie 存储在浏览器端。
安全性不同:cookie 安全性一般,在浏览器存储,可以被伪造和修改。
容量和个数限制:cookie 有容量限制,每个站点下的 cookie 也有个数限制。
存储的多样性:session 可以存储在 Redis 中、数据库中、应用程序中;而 cookie 只能存储在浏览器中。
5)如果客户端禁止 cookie 能实现 session 还能用吗?
可以用,session 只是依赖 cookie 存储 sessionid,如果 cookie 被禁用了,可以使用 url 中添加 sessionid 的方式保证 session 能正常使用。
6)什么是 XSS 攻击,如何避免?
XSS 攻击:即跨站脚本攻击,它是 Web 程序中常见的漏洞。原理是攻击者往 Web 页面里插入恶意的脚本代码(css 代码、Javascript 代码等),当用户浏览该页面时,嵌入其中的脚本代码会被执行,从而达到恶意攻击用户的目的,如盗取用户 cookie、破坏页面结构、重定向到其他网站等。
预防 XSS 的核心是必须对输入的数据做过滤处理。
7)什么是 CSRF 攻击,如何避免?
CSRF:Cross-Site Request Forgery(中文:跨站请求伪造),可以理解为攻击者盗用了你的身份,以你的名义发送恶意请求,比如:以你名义发送邮件、发消息、购买商品,虚拟货币转账等。
防御手段:
· 验证请求来源地址;
· 关键操作添加验证码;
· 在请求地址添加 token 并验证。
8)forward 和 redirect 的区别?
forward 是转发 , redirect 是重定向:
转发是由服务端实现跳转,所以只能跳转到当前web的资源;而重定向由客户实现跳转,可以跳转到任意资源;
地址栏 url :foward 不会发生改变,redirect 会发生改变;
数据共享:forward 可以共享 request 里的数据,redirect 不能共享;
效率:forward 比 redirect 效率高。
9)简述 tcp 和 udp的区别?
tcp 和 udp 是 OSI 模型中的运输层中的协议。tcp 提供可靠的通信传输,而 udp 则常被用于让广播和细节控制交给应用的通信传输。
两者的区别大致如下:
tcp 面向连接,udp 面向非连接即发送数据前不需要建立链接;
tcp 提供可靠的服务(数据传输),udp 无法保证;
tcp 面向字节流,udp 面向报文;
tcp 数据传输慢,udp 数据传输快;
10)get 和 post 请求有哪些区别?
get 请求会被浏览器主动缓存,而 post 不会。
get 传递参数有大小限制,而 post 没有。
post 参数传输更安全,get 的参数显示在 url 上,post 不会。
11)如何实现跨域?
服务器端运行跨域 设置 CORS 等于 *;
在单个接口使用注解 @CrossOrigin 运行跨域;
使用 jsonp 跨域;
12)说一下 JSONP 实现原理?
jsonp:JSON with Padding,它是利用script标签的 src 连接可以访问不同源的特性,加载远程返回的“JS 函数”来执行的。
jsonp是使用方法回调的原理:
在网页里,你如果引入其他网页的js,那这个页面的js是可以调用你网页的代码的;
直接请求js 和 请求的动态页面(jsp,php,aspx)里输出的javascript代码效果一样。
13)servlet的生命周期
Servlet是一种可以在Servlet容器中运行的组件,那么理所当然就应该有一个从创建到销毁的过程,这个过程我们可以称之为Servlet生命周期。Servlet的生命周期可以分为加载、实例化、初始化、处理客户请求和销毁五个阶段。
加载:解析请求,找到对应class文件,并加载
实例化:创建 Servlet 实例对象
初始化:仅执行一次init()方法,它是在服务器装入servlet时执行的,负责初始化servlet对象
处理请求:每次请求时,调用service方法,并根据请求分别调用doGet(),doPost()方法
销毁:当服务器关闭或 Web 应用被移除出容器时,Servlet 随着 Web 应用的关闭而销毁。在销毁 Servlet 之前,Servlet 容器会调用 Servlet 的 destroy() 方法,以便让 Servlet 对象释放它所占用的资源。
14)说出Servlet和CGI的区别?
CGI的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁;而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。
由于Servlet是单例的,当多个用户访问Servlet的时候,服务器会为每个用户创建一个线程。当多个用户并发访问Servlet共享资源的时候就会出现线程安全问题。
15)JSP的基本指令
page指令、include指令、taglib指令。
page指令:用于定义jsp页面中的各种属性,无论page指令出现在jsp页面中什么地方,它作用的都是整个jsp页面,通常位于jsp页面的顶端。
include 指令:可以将一个外部文件嵌入到当前 JSP 文件中,同时解析这个页面中的 JSP 语句。
taglib指令:引入要使用的标签库。




