这些 JavaEE 知识你掌握了吗?

基础部分

BS与CS区别?

C/S (Client - Server 客户端-服务器端)

典型应用:QQ软件 ,飞秋,红蜘蛛。

特点:

1)必须下载特定的客户端程序。

2)服务器端升级,客户端升级。

B/S (Broswer -Server 浏览器端- 服务器端)

典型应用: 腾讯官方(http://www.qq.com) 163新闻网站, 蚂蚁课堂官网(俗称:网站)

特点:

1)不需要安装特定的客户端(只需要安装浏览器即可!!)

2)服务器端升级,浏览器不需要升级!!!!

javaweb的程序就是b/s软件结构!!!

DNS解析过程

1、在浏览器中输入http://www.qq.com域名,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。
2、如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。

外网映射工具

外网映射工具的作用,主要将本地服务映射到外网。

应用场景:支付回调、微信开发、对接第三方接口等。

映射工具Ngrok、花生壳等。

静态资源和动态资源的区别

静态资源: 当用户多次访问这个资源,资源的源代码永远不会改变的资源。

动态资源:当用户多次访问这个资源,资源的源代码可能会发送改变。

Sevlet的生命周期(重点)

构造方法: 创建servlet对象的时候调用。

默认情况下,第一次访问servlet的时候创建servlet对象 只调用1次。证明servlet对象在tomcat是单实例的。

init方法: 创建完servlet对象的时候调用。只调用1次。

service方法: 每次发出请求时调用。调用n次。

destroy方法: 销毁servlet对象的时候调用。停止服务器或者重新部署web应用时销毁servlet对象。只调用1次。

怎么证明Servlet是单例的?

因为Servlet是通过Java反射机制,读取web.xml配置中的servlet-class 完整路径,进行反射默认执行无参构造函数,所以只要servlet类执行无参构造函数永远只执行一遍,则Servlet是单例的

Servlet的多线程并发问题

注意: servlet对象在tomcat服务器是单实例多线程的

因为servlet是多线程的,所以当多个servlet的线程同时访问了servlet的共享数据,如成员变量,可能会引发线程安全问题。

解决办法:

1)把使用到共享数据的代码块进行同步(使用synchronized关键字进行同步)

2)建议在servlet类中尽量不要使用成员变量。如果确实要使用成员,必须同步。而且尽量缩小同步代码块的范围。(哪里使用到了成员变量,就同步哪里!!),以避免因为同步而导致并发效率降低。

转发与重定向区别?

1)转发

a)地址栏不会改变

b)转发只能转发到当前web应用内的资源

c)可以在转发过程中,可以把数据保存到request域对象中

2)重定向

a)地址栏会改变,变成重定向到地址。

b)重定向可以跳转到当前web应用,或其他web应用,甚至是外部域名网站。

c)不能再重定向的过程,把数据保存到request中。

重定向实现原理

重定向会发送两次请求,浏览器认识状态码为302,会再次向服务器发送一次请求,获取请求头的中location的value值进行重定向。

JavaWeb有哪些会话技术

Cookie会话数据保存在浏览器客户端

服务器创建Cookie,将Cookie内容以响应头方式发送给客户端存放在本地,当下次发送请求时.会将Cookie信息以请求方式发送给服务器端

注意:Cookie信息不能夸浏览器访问

Session会话保存与服务器端

服务器创建Session,Session内容存放服务器端上,以响应头方式将SessionId发送给客户端保存,当下次发送请求时,会将SessionID 以请求头方式发送给服务器端

注意: 浏览器关闭,只是清除了Sessionid,并没有清除Session

Cookie的实现原理

1)服务器创建cookie对象,把会话数据存储到cookie对象中。

new Cookie("name","value");

2) 服务器发送cookie信息到浏览器

response.addCookie(cookie);

举例: set-cookie: name=eric (隐藏发送了一个set-cookie名称的响应头)

3)浏览器得到服务器发送的cookie,然后保存在浏览器端。

4)浏览器在下次访问服务器时,会带着cookie信息

举例: cookie: name=eric (隐藏带着一个叫cookie名称的请求头)

5)服务器接收到浏览器带来的cookie信息

request.getCookies();

Cookie的应用场景

购物车、显示用户上次访问的时间

Session的实现原理

1)第一次访问创建session对象,给session对象分配一个唯一的ID,叫JSESSIONID

new HttpSession();

2)把JSESSIONID作为Cookie的值发送给浏览器保存

Cookie cookie = new Cookie("JSESSIONID", sessionID);

response.addCookie(cookie);

3)第二次访问的时候,浏览器带着JSESSIONID的cookie访问服务器

4)服务器得到JSESSIONID,在服务器的内存中搜索是否存放对应编号的session对象。

 

     if(找到){
      return map.get(sessionID);
     }
     Map<String,HttpSession>]
     <"s001", s1>
     <"s001,"s2>

5)如果找到对应编号的session对象,直接返回该对象

6)如果找不到对应编号的session对象,创建新的session对象,继续走1的流程

结论:通过JSESSION的cookie值在服务器找session对象!!!!!

什么是token

token其实就是一个令牌,具有随机性,类似于sessionId。

在对接一些第三方平台的时候,为了能够保证数据安全性,通常会使用一些令牌进行交互

例如: https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140183

如何自定义token

token生成规则,只要保证token生成一个不重复的唯一字符串即可。

使用jdk自带的uuid生成规则。

什么是UUID

UUID含义是通用唯一识别码 (Universally Unique Identifier),这是一个软件建构的标准,也是被开源软件基金会 (Open Software Foundation, OSF)
的组织应用在分布式计算环境 (Distributed Computing Environment, DCE) 领域的一部分。

UUID 的目的,是让分布式系统中的所有元素,都能有唯一的辨识资讯,而不需要透过中央控制端来做辨识资讯的指定。如此一来,每个人都可以建立不与其它人冲突的 UUID。
在这样的情况下,就不需考虑数据库建立时的名称重复问题。目前最广泛应用的 UUID,即是微软的 Microsoft's Globally Unique Identifiers (GUIDs),而其他重要的应用,
则有 Linux ext2/ext3 档案系统、LUKS 加密分割区、GNOME、KDE、Mac OS X 等等

UUID组成

UUID保证对在同一时空中的所有机器都是唯一的。通常平台会提供生成的API。按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字
UUID由以下几部分的组合:
(1)当前日期和时间,UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同。
(2)时钟序列。
(3)全局唯一的IEEE机器识别号,如果有网卡,从网卡MAC地址获得,没有网卡以其他方式获得。
UUID的唯一缺陷在于生成的结果串会比较长。关于UUID这个标准使用最普遍的是微软的GUID(Globals Unique Identifiers)。在ColdFusion中可以用CreateUUID()函数很简单地生成UUID,
其格式为:xxxxxxxx-xxxx- xxxx-xxxxxxxxxxxxxxxx(8-4-4-16),其中每个 x 是 0-9 或 a-f 范围内的一个十六进制的数字。而标准的UUID格式为:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (8-4-4-4-12);

UUID代码

 

UUID.randomUUID().toString()

什么是Filter

Filter 是Servlet技术中的过滤器,主要做拦截请求作用,一般用于防御XSS攻击、权限、登录判断等。

网络通讯

http部分

什么是http协议

http协议: 对浏览器客户端 和 服务器端 之间数据传输的格式规范

Http格式的分类

请求行
请求头
请求内容
响应行
响应头
响应内容

https与http区别

虽然说 HTTPS 有很大的优势,但其相对来说,还是存在不足之处的:

(1)HTTPS 协议握手阶段比较费时,会使页面的加载时间延长近 50%,增加 10% 到 20% 的耗电;

(2)HTTPS 连接缓存不如 HTTP 高效,会增加数据开销和功耗,甚至已有的安全措施也会因此而受到影响;

(3)SSL 证书需要钱,功能越强大的证书费用越高,个人网站、小网站没有必要一般不会用。

(4)SSL 证书通常需要绑定 IP,不能在同一 IP 上绑定多个域名,IPv4 资源不可能支撑这个消耗。

(5)HTTPS 协议的加密范围也比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用。最关键的,SSL 证书的信用链体系并不安全,特别是在某些国家可以控制 CA 根证书的情况下,中间人攻击一样可行。

https请求方式

常见的请求方式: GET 、 POST、 HEAD、 TRACE、 PUT、 CONNECT 、DELETE

常用的请求方式: GET 和 POST

表单提交:

 

    <form action="提交地址" method="GET/POST"> 
    <form>

GET vs POST 区别

1)GET方式提交

a)地址栏(URI)会跟上参数数据。以?开头,多个参数之间以&分割。

GET /day09/testMethod.html?name=eric&password=123456 HTTP/1.1

Host: localhost:8080

User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8

Accept-Language: zh-cn,en-us;q=0.8,zh;q=0.5,en;q=0.3

Accept-Encoding: gzip, deflate

Referer: http://localhost:8080/day09/testMethod.html

Connection: keep-alive

b)GET提交参数数据有限制,不超过1KB。

c)GET方式不适合提交敏感密码。

d)注意: 浏览器直接访问的请求,默认提交方式是GET方式

2)POST方式提交

a)参数不会跟着URI后面。参数而是跟在请求的实体内容中。没有?开头,多个参数之间以&分割。

POST /day09/testMethod.html HTTP/1.1

Host: localhost:8080

User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8

Accept-Language: zh-cn,en-us;q=0.8,zh;q=0.5,en;q=0.3

Accept-Encoding: gzip, deflate

Referer: http://localhost:8080/day09/testMethod.html

Connection: keep-alive

name=eric&password=123456

b)POST提交的参数数据没有限制。

c)POST方式提交敏感数据。

3.2 请求头

Accept: text/html,image/* -- 浏览器接受的数据类型

Accept-Charset: ISO-8859-1 -- 浏览器接受的编码格式

Accept-Encoding: gzip,compress --浏览器接受的数据压缩格式

Accept-Language: en-us,zh- --浏览器接受的语言

Host: http://www.it315.org:80 --(必须的)当前请求访问的目标地址(主机:端口)

If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT --浏览器最后的缓存时间

Referer: http://www.it315.org/index.jsp -- 当前请求来自于哪里

User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0) --浏览器类型

Cookie:name=eric -- 浏览器保存的cookie信息

Connection: close/Keep-Alive -- 浏览器跟服务器连接状态。close: 连接关闭 keep-alive:保存连接。

Date: Tue, 11 Jul 2000 18:23:51 GMT -- 请求发出的时间

客户端模拟http请求工具

Postmen(谷歌插件)、RestClient

服务器模拟http请求工具

httpclient、HttpURLConnection

前端ajax请求

 

$.ajax({
   type : 'post',
   dataType : "text",
   url : "http://a.a.com/a/FromUserServlet",
   data : "userName=余胜军&userAge=19",
   success : function(msg) {
    alert(msg);
   }
  });

希望以上对大家有所帮助! 如有缺少的部分知识欢迎补充!!!

我的官方群点击此处1009139853。加入群聊【java学习交流群】,一起学习,相互讨论。

群内已经有管理将知识体系整理好(源码,学习视频等资料),欢迎加群免费领取。

JAVA高薪就业(视频,学习路线资料,免费领取)

对于正在学习java的小伙伴们,相信这些对你们还是有帮助的,希望在学java的路上少走弯路,多

吸取一些前辈的经验,欢迎攻城狮,程序猿们加入学习交流群,不管你是领取资料也

好,还是交流心得,询问问题,吸取经验,欢迎前来交流。

展开阅读全文
©️2020 CSDN 皮肤主题: 游动-白 设计师: 上身试试 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值