1,什么是HTTP协议:
客户端和服务器端之间数据传输的格式规范,格式简称为“超文本传输协议”。用于传输HTML文件;
可传输图像,视频,音频等大容量的数据;
HTTP协议是一个基于请求与响应模式的、无状态的、应用层的协议,基于 TCP 的连接方式;
- HTTP协议是无状态的协议:对于事务处理没有记忆能力。每次请求-响应都是独立的。(传输速度快,不记录用户的事务状态);HTTP可以在任何互联网协议上,或其他网络上实现。
- 基于请求-响应模型的:一次请求对应一次响应;
- 应答服务器为源服务器(origin server)。在用户代理和源服务器中间可能存在多个“中间层”,比如代理服务器、网关或者隧道(tunnel)。
- 缺点:多次请求间或重定向不能共享数据。Java中使用会话技术(Cookie、Session)来解决这个问题);
2,Servlet的生命周期:
- Servlet 初始化后调用 init () 方法。
- nit 方法被设计成只调用一次。它在第一次创建 Servlet 时被调用,在后续每次用户请求时不再调用。
- Servlet 创建于用户第一次调用对应于该 Servlet 的 URL 时,但是您也可以指定 Servlet 在服务器第一次启动时被加载。
- 当用户调用一个 Servlet 时,就会创建一个 Servlet 实例,每一个用户请求都会产生一个新的线程,适当的时候移交给 doGet 或 doPost 方法。init() 方法简单地创建或加载一些数据,这些数据将被用于 Servlet 的整个生命周期。
- Servlet 调用 service() 方法来处理客户端的请求。(多次)
- service() 方法是执行实际任务的主要方法。Servlet 容器(即 Web 服务器)调用 service() 方法来处理来自客户端(浏览器)的请求,并把格式化的响应写回给客户端。
- 每次服务器接收到一个 Servlet 请求时,服务器会产生一个新的线程并调用服务。service() 方法检查 HTTP 请求类型(GET、POST、PUT、DELETE 等),并在适当的时候调用 doGet、doPost、doPut,doDelete 等方法。
- Servlet 销毁前调用 destroy() 方法。
- destroy() 方法只会被调用一次,在 Servlet 生命周期结束时被调用。destroy() 方法可以让您的 Servlet 关闭数据库连接、停止后台线程、把 Cookie 列表或点击计数器写入到磁盘,并执行其他类似的清理活动。
- 在调用 destroy() 方法之后,servlet 对象被标记为垃圾回收。
3,Get和Post的区别:
可以从三个角度来说:
- 从安全角度来说:
- Get是不安全的,因为在传输过程,数据被放在请求的URL中;
- Post的所有操作对用户来说URL都是不直接可见的。post请求是相对安全的; 何为相对安全?即使使用了post请求的情况下,在浏览器控制台依然是可以获取到请求体的数据;
- POST和GET在安全这件事上仅仅是个小角色。因此单独讨论POST和GET本身哪个更安全意义并不是太大。具体的安全实现还是需要靠网络安全的手段去实现;
- 从传输的数据量的角度来讲:
- HTTP协议本身对URL长度并没有做任何规定。实际的限制是由客户端/浏览器以及服务器端决定的。因此在不同的浏览器上get的数据量限制也不同:如谷歌浏览器(Chrome)的get请求URL大小限制为2mb,而在旧版ie浏览器只有12kb;
- Post传送的数据量较大,一般被默认为不受限制。
- 从效率来讲:
- Get执行效率却比Post方法好。Get是form提交的默认方法。
- 因为POST请求包含更多的请求头,这是其中原因之一。
post请求的数据在三次握手后,才开始传输数据,而get请求的数据是在第三次握手时就与请求头一起发送到服务器了,所以效率要更 高。
- 从字符编码来讲:
- Get限制Form表单的数据集的值必须为ASCII字符;而Post支持整个ISO10646字符集。
4,HTTP中重定向和请求转发的区别:
- 本质区别:转发是服务器行为,重定向是客户端或服务器端行为。为什么这样说呢,这就要看两个动作的工作流程:
- 请求转发过程:
- 客户浏览器发送http请求—->web服务器接受此请求—->调用内部的一个方法在容器内部完成请求处理和转发动作—->将目标资源发送给客户;在这里,转发的路径必须是同一个web容器下的url,其不能转向到其他的web路径上去,中间传递的是自己的容器内的request。在客户浏览器路径栏显示的仍然是其第一次访问的路径,也就是说客户是感觉不到服务器做了转发的。转发行为是浏览器只做了一次访问请求。
- 重定向过程:
- 客户浏览器发送http请求—->web服务器接受后发送302状态码响应及对应新的location给客户浏览器—->客户浏览器发现是302响应,则自动再发送一个新的http请求,请求url是新的location地址—->服务器根据此请求寻找资源并发送给客户。在这里location可以重定向到任意URL,既然是浏览器重新发出了请求,则就没有什么request传递的概念了。在客户浏览器路径栏显示的是其重定向的路径,客户可以观察到地址的变化的。重定向行为是浏览器做了至少两次的访问请求的。
- 请求转发过程:
- 重定向可以跳转到任意网址,请求转发只能跳转当前项目;
- 在重定向的过程中,传输的信息会因为服务器释放项目路径资源而导致丢失。而请求转发因为是在当前项目中进行,因此数据缓存并不会被服务器清空,数据依然存活;
- 重定向2次请求,请求转发1次请求
- 重定向地址栏会变,请求转发地址栏不变
5,JSP和Servlet的区别:
- 相同点:
- jsp经编译后就变成了servlet,jsp本质就是servlet,jvm只能识别java的类,不能识别jsp代码,web容器将jsp的代码编译成jvm能够识别的java类。其实就是当你通过 http 请求一个 JSP 页面是,首先 Tomcat 会将JSP翻译并编译成为 Servlet,然后执行 Servlet的生命周期方法处理请求与响应。
- 不同点:
- jsp经编译后就变成了servlet,jsp本质就是servlet,jvm只能识别java的类,不能识别jsp代码,web容器将jsp的代码编译成jvm能够识别的java类。其实就是当你通过 http 请求一个 JSP 页面是,首先 Tomcat 会将JSP翻译并编译成为 Servlet,然后执行 Servlet的生命周期方法处理请求与响应。
6,cookie和session的区别:
1.存储位置不同
cookie的数据信息存放在客户端浏览器上。
session的数据信息存放在服务器上。
2.存储容量不同
单个cookie保存的数据<=4KB,一个站点一般保存20~50个Cookie(不同浏览器不一样,Sarafi和Chrome对每个域的Cookie数目没有严格限制)。
对于session来说并没有上限,但出于对服务器端的性能考虑,session内不要存放过多的东 西,并且设置session删除机制(或者采用缓存技术代替session)。
3.存储方式不同
cookie中只能保管ASCII字符串,并需要通过编码方式存储为Unicode字符或者二进制数据。
session中能够存储任何类型的数据,包括且不限于string,integer,list,map等。
4.隐私策略不同
cookie对客户端是可见的,别有用心的人可以分析存放在本地的cookie并进行cookie欺骗,所以它是不安全的。
session存储在服务器上,不存在敏感信息泄漏的风险。
5. 有效期上不同
开发可以通过设置cookie的属性,达到使cookie长期有效的效果。
session依赖于名为JSESSIONID的cookie,而cookie JSESSIONID的过期时间默认为-1,在关闭窗口超过30分钟后该session就会失效(因为session的默认存活时间是30分钟),因而session不能达到长期有效的效果。
6.服务器压力不同
cookie保管在客户端,不占用服务器资源。对于并发用户十分多的网站,cookie是很好的选择。
session是保管在服务器端的,每个用户都会产生一个session。假如并发访问的用户十分多,会产生十分多的session,耗费大量的内存。
7,Ajax的介绍:
- 概念介绍:
- Ajax 即”Asynchronous JavaScript And XML”(异步 JavaScript 和 XML),是指一种创建交互式、快速动态网页应用的网页开发技术,无需重新加载整个网页的情况下,能够更新部分网页的技术。
- 有两种实现的方式:
- 第一种实现方式:Javascript原生ajax实现:
- 创建ajax核心对象 ;
- 设置请求信息:
- 设置回调函数(里面经过判断用于获取服务器响应的数据);
- 发送异步请求;
- 第二种实现方式:axios组件封装AJAX简化开发实现:
- 第一种实现方式:Javascript原生ajax实现:
就是将原生的实现方式整合到axios里面;
1. 导入axios核心js文件;1. 设置请求信息;1. 设置回调函数;1. 获取用 resp.data 获取返回数据;
- Ajax应用程序的优势:
- 通过异步模式,提升了用户体验 ;
- 优化了浏览器和服务器之间的传输,减少不必要的数据往返,减少了带宽占用 ;
- Ajax引擎在客户端运行,承担了一部分本来由服务器承担的工作,从而减少了大用户量下的服务器负载。
8,JavaWeb的三大组件及作用:
三大组件分别为:Servlet(控制器);Filter(拦截器);Lisenter(监听器),其中:
- Servlet(控制器):
- 作用:servlet 是运行在 Web 服务器中的小型 Java 程序(即:服务器端的小应用程序)。servlet 通常通过 HTTP(超文本传输协议)接收和响应来自 Web 客户端的请求。在一个应用程序中,每种Servlet类型只能有一个实例。简单来说,客户端发送请求,传递到servlet容器,而servlet将数据转换成服务器端可以处理的数据再发送给服务器端,再数据处理之后,再传递到servlet容器,servlet再转译到客户端,完成了一次客户端和服务器端的信息交互。
- servlet的生命周期:
- 实例化(第一次调动))—>初始化init(第一次调用)—>服务service(每次调用)->销毁destroy
- 出生:(实例化—>初始化)第一次访问Servlet就出生(默认情况下)
- 活着:(服务)应用活着,servlet就活着
- 死亡:(销毁)应用卸载了servlet就销毁
- Filter(拦截器):
- 作用:Filter用于拦截用户请求,在服务器作出响应前,可以在拦截后修改request和response,这样实现很多开发者想得到的功能。
- Filter是一个可以复用的代码片段,可以用来转换HTTP请求、响应和头信息。Filter不像Servlet,它不能产生一个请求或者响应,它只是修改对某一资源的请求,或者修改从某一的响应。
- Filter的生命周期:
- 构造器:创建Filter实例时调用,Filter实例服务器一旦启动就会被创建;
- init():实例创建后马上被调用,用来对Filter做一些初始化的操作;
- doFilter():Filter的主要方法,用来完成过滤器主要功能的方法,每次访问目标资源时都会调用;
- destroy():服务器停止时调用,用来释放资源。
- Filter的执行顺序:
- 构造器:创建Filter实例时调用,Filter实例服务器一旦启动就会被创建;
- init():实例创建后马上被调用,用来对Filter做一些初始化的操作;
- doFilter():Filter的主要方法,用来完成过滤器主要功能的方法,每次访问目标资源时都会调用;
- destroy():服务器停止时调用,用来释放资源。
- Lisenter(监听器):
- Listener就是监听器,监听主要作用:是对ServletContext,HttpSession,ServletRequest这三大域对象的创建和销毁事件监听,还有就是对域对象属性的操作监听,当监听这些事件发生是就会进行一些适当的操作。
- 通常使用Web监听器做以下的内容:统计在线人数,利用HttpSessionLisener;加载初始化信息:利用ServletContextListener;统计网站访问量;实现访问监控。
- 需要专门创建一个特定接口的java类,用这个java类去监听另一个java类的方法调用,如果另一个类的属性改变了,前面的java类就会监听到后面java类所发生的变化,监听器中的某个方法就会立刻执行。Listener主要用来监听ServletContext,HttpSession,ServletReques这三个域对象。
9,过滤器的执行流程:
访问过滤器拦截的路径,进入过滤器,首先拦截请求,其次放行给目标资源去执行,目标资源执行后会返回到过滤器中,最后执行拦截响应。
10,过滤器对象什么时候创建和什么时候销毁:
过滤器对象是在服务器启动时创建,服务器关闭之前销毁过滤器对象。
11,过滤器应用场景:
权限控制
全局乱码统一处理
防止未登录就进入界面
控制应用编码
过滤敏感词汇等场景
等等……
12,监听器的开发步骤:
监听器的开发步骤如下:
1. 创建类实现监听器接口1. 重写监听器接口的所有方法1. 编写注解@WebListener定义当前类为监听器类
13,前端的3个原生技术html,css,JavaScript分别作用:
**html:**- Hyper Text Markup language 超文本标记语言。用于布局标签数据。
- 它通过标记符号来标记要显示的网页中的各个部分。网页文件本身是一种文本文件,通过在文本文件中添加标记符,可以告诉浏览器如何显示其中的内容(比如文字如何处理,画面如何安排,图片如何显示等)。浏览器按顺序阅读网页文件,然后根据标记符解释和显示其标记的内容。
**css:**- 层叠样式表单。是将样式信息与网页内容分离的一种标记语言。我们在牛腩新闻发布系统中,我们使用过CSS文件,对一些标签的样式进行修改。
- CSS可以为每个HTML元素定义样式,也可以用于多个界面。进行全局更新时,只需修改样式即可。
- 说白了,CSS就是设置网页上HTML元素属性的语言。
**JavaScript:**- JJava是一种基于对象(Object)和事件驱动(Event Driven)并具有安全性能的脚本语言。使用它的目的是与HTML超文本标记语言、Java脚本语言(Java小程序)一起实现在一个Web页面中链接多个对象,与Web客户交互作用。例如可以设置鼠标悬停效果,在客户端验证表单,创建定制的HTML页面,显示警告框,设置cookie等等。
14,Servlet的实现原理:
servlet 是运行在 Web 服务器中的小型 Java 程序(即:服务器端的小应用程序)。servlet 通常通过 HTTP(超文本传输协议)接收和响应来自 Web 客户端的请求。在一个应用程序中,每种Servlet类型只能有一个实例。简单来说,客户端发送请求,传递到servlet容器,而servlet将数据转换成服务器端可以处理的数据再发送给服务器端,再数据处理之后,再传递到servlet容器,servlet再转译到客户端,完成了一次客户端和服务器端的信息交互。
15,JSON的介绍和作用:
- JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。JS对象表示法
- 它基于JavaScript的一个子集。 JSON采用完全独立于语言的文本格式,同时也使用了类似于C语言家族的习惯。这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成。
- JSON有两种结构:
- 键值对: { “name”: “Alice”, “sex”:”female”, “age”: “18” }
- 数组: 就是多个键值对组成的一个数据组;
- 使用JSON可以很方便的和后台的Java对象进行数据传递,这也是Ajax中JSON大量使用的一个原因。
16,Servlet的三大作用域和应用场景:
- request 请求对象:作用域:一次请求(单个用户的请求)
- 共享的数据:请求共享
- 特点:同一次请求中,共享数据可以获取(请求一旦结束,请求共享清除站)(请求转发能共享参数,重定向不行)
- request是一个请求,只要用户发送一个请求就会创建一个request对象,这个对象只在本次请求中有效。
- 共享的数据:请求共享
- session会话对象:作用域:当前会话。(是多个用户的请求)
- 共享的数据:session共享/会话共享
- 特点:同一次会话,共享参数可以获取(会话:从共享数据开始,到浏览器关闭/主动清除。不受请求转发和重定向的影响,只要存到session中,浏览器不管吧或者不主动清除都可以获取。)
- 所谓当前会话场景,就是指从用户打开浏览器开始,到用户关闭浏览器这中间的过程。这个过程可能包含多个请求响应。也就是说,只要用户不关浏览器,服务器就有办法知道这些请求是一个人发起的,整个过程被称为一个会话(session),而放到会话中的变量,就可以在当前会话的所有请求里使用。
- 共享的数据:session共享/会话共享
- ServletContext 上下文对象:作用域:整个应用。(是所有用户的所有请求)
- 共享数据:上下文共享
- 特点:从存储开始到tomcat关闭都有
- 整个应用是指从应用启动,到应用结束。一个服务器可能部署多个应用,只有你关闭了服务器,才会把上面所有的应用都关闭了。
- 共享数据:上下文共享
