基础部分

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的路上少走弯路,多

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

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

这些 JavaEE 知识你掌握了吗?相关推荐

  1. JavaEE知识体系

    1 1.文件上传下载 1.1 文件上传 1.1.1 文件上传的作用 例如网络硬盘!就是用来上传下载文件的. 在智联招聘上填写一个完整的简历还需要上传照片呢. 1.1.2 文件上传对页面的要求 1.必须 ...

  2. JavaEE知识体系梳理

    目录 JavaEE介绍: JavaEE的13种核心技术规范: 1.JDBC(Java Database)数据库连接 2.JNDI(Java Naming and Directory Interface ...

  3. Java Web学习总结(36)——JavaEE知识体系及项目开发过程的总结

    一.代码优化 代码结构层次的优化(目的:更加方便代码的维护--可维护性,可读性) 1.代码注释(代码规范) 2.工具类的封装(方便代码的维护,使代码结构更加清晰不臃肿,保证团队里代码 质量一致性) 3 ...

  4. JavaEE体系架构

    JavaEE知识体系结构图 JavaEE体系结构图: 认识JavaEE完整体系架构(转载):作者详细解释了J2EE的体系结构,将各部分分类说明,非常详细. http://www.jizhuomi.co ...

  5. 基于JavaEE的智能人事管理系统(OA办公系统)

    智能OA办公系统 文章目录 智能OA办公系统 1.前言 2.准备工作 3.项目结构 4.部分界面截图 5.部分代码分析 5.1.1 ajax登录和添加员工功能 5.1.2 考勤打卡功能 5.1.3 a ...

  6. [转]经验分享:我的JavaEE学习道路

    从很小都认识苹果机了,我不记得我是否在小学的时候学过Basic,只记得大学实验室里的苹果机我的确是摸过(得益于我是教师子弟,有"特殊待遇"),也看到计算机系的学生们编写的游戏.初中 ...

  7. nfine框架 上传文件_MVC之Struts2框架--你并不了解的高级应用

    <"爱读书"--给你讲技术>,我来看书,你来进步,让我们开始吧! 本书简介 书名为<轻量级JavaEE企业应用实战>,是本人在学习JavaEE框架的时候阅读 ...

  8. SpringBoot史前简述

    背景 大约20年前,程序员们使用"企业级Java Bean"(EJB)开发企业应用,需要配置复杂的XML. 在二十世纪初期,新兴Java技术--Spring,横空出世.使用极简XM ...

  9. ajax人力资源管理系统代码,README.md · 偉ing/JSP实现OA办公系统_人事管理系统 - Gitee.com...

    # OA办公系统_人事管理系统 ## 介绍 这是一套智能OA办公系统,里面包含了人事管理系统,这套功能的主干都已经完成,大多数功能用到的都是ajax技术,极个别界面采用传统MVC方法.代码规范化,基本 ...

最新文章

  1. python django并发访问挂掉,解决django高并发时数据库连接量过大的问题(实现连接池的方法)...
  2. ABAP取域的固定值
  3. SHLL脚本从1到100自加
  4. 带有Prometheus的弹簧靴和千分尺第5部分:旋转Prometheus
  5. LeetCode MySQL 1322. 广告效果
  6. JMeter实现web接口测试实践举例
  7. IP 、127.0.0.1、localhost 三者区别
  8. 最近在SDK下使用WebBrowser遇到了个问题
  9. Docker 以 docker 方式运行 jenkins
  10. Nginx配置Thinkphp3.2.3配置,访问Nginx报 No input file specified. 的问题解决
  11. 【渝粤教育】国家开放大学2018年春季 0690-21T化工原理及实验 参考试题
  12. 网页怎么调用云服务器资源,如何将网页资源放到云服务器
  13. 下十页分页php,织梦二次开发实现栏目分页前十页后十页功能
  14. 【最新砍价小程序源码】
  15. 【微软2017年预科生计划在线编程笔试第二场 B】Diligent Robots
  16. BugKu 你必须让他停下来
  17. 项目总结(打开一个新页面下载exsel表格或者文档模板)
  18. html百度地图api 截图,百度地图(截图)
  19. 【基础篇】C#基础知识——面向对象
  20. 程序每次读入一个正三位数,然后输出逆序的数字。注意,当输入的数字含有结尾的0时,输出不应带有前导的0。比如输入700,输出应该是7。

热门文章

  1. 时序产生器和控制方式,流水CPU
  2. android 4.0 安全模式分析
  3. Android6.0新特性
  4. 一堆小众实用工具网站,建议收藏!
  5. 互联网公司招聘--奇虎360--产品类--2013年笔试题
  6. 计算机网络将分布在不同位路上的独立,第一章 计算机网络概述练习题及答案...
  7. 计算机进程管理 360,电脑的进程管理得英文怎么打啊???
  8. h5页面在安卓手机浏览器上不能上下移动的问题
  9. 欧姆龙 PLC CP1E-N30SDR-A 与 NPN型编码器连接
  10. 求正多边形各顶点的坐标(数学)