1 web的发展历程
C/S和B/S都是软件架构的两种不同的表现形式:
C/S架构:Client/Server:客户端和服务端的架构.
该软件运行在电脑桌面:比如,QQ,FeiQ,POS机/火车站买票.
开发语言:Delphi,VB,VC++,C#,JAVA awt ,swing等.
特点:一般的,服务端仅仅是安装一个数据库和数据存储,所有程序的代码(功能/界面)都编写在客户端软件中,(把所有业务逻辑都写在客户端,界面渲染也在客户端).
优点:直观,用户体验好,安全性高等.
缺点:每次升级,需要重新安装,移植性较低,开发和维护成本较高.
B/S架构:Browser/Server:浏览器和服务端的架构(通过浏览器访问的应用).
该软件是通过浏览器访问.比如门户网站,管理系统等.
其实B/S是特殊的C/S,因为浏览器是一个特殊的客户端.
开发语言:JSP,PHP,ASP等.
特点:在服务端编写代码,所有的业务逻辑都有服务端完成.客户端只负责界面的渲染.
优点:可移植性很高,开发和维护较好.
缺点:用户体验不够好,界面不够丰富,安全性很低.
瘦客户端:传统的B/S:服务端:负责业务逻辑.客户端:负责界面渲染.
富客户端:超级BS=CS+BS;界面华丽.
服务端:负责业务逻辑.
客户端:负责界面渲染+少量的业务逻辑.
开发技术:Ext.js,Flash,EasyUI,JavaFX等.
2 服务器
服务器分类:
软件服务器:其实就是一个软件,提供了B/S应用运行环境。
硬件服务器:其实就是一台电脑,该电脑安装了软件服务器。
JavaWeb的软件服务器的分类:
1):http服务器,用于运行静态的页面.
2):Web服务器,实现了JavaEE的部分功能(比如Servlet/JSP),没有实现javaEE中的EJB规范.
Tomcat,Jetty等.
3):应用服务器,实现了JavaEE全部的规范,支持EJB的
TomcatEE,GlassFish,JBoss,Weblogic(12306),WebSphere
Servlet容器为JavaEeb应用提供运行环境,它负责管理Servlet和JSP的生命周期,以及管理他们的共享数据.
Servlet容器也称为JavaWeb容器,或者Servlet/JSP容器--->Tomcat
Tomcat服务器(7.0.64)的安装使用:
(bin目录):Tomcat的工具,启动,关闭等.
(conf目录):装了 Tomcat的配置文件.
(lib目录):Tomcat的核心包和依赖的jar包.
logs目录:装了日志文件.
temp目录:临时目录,上传文件的临时文件.
webapps目录:默认情况下的部署项目的路径.
work目录:工作目录,装JSP翻译成java文件的代码
1.安装目录不能使用中文的,并且安装路径不允许出现空格,
2.启动Tomcat服务器:Tomcat根/bin/startup.bat
直到控制台没有打印重大的错误,Exception,没有一闪而过,就表示启动成功.Tomcat的默认端口是8080;
访问:打开浏览器:
http://服务器所在的主机的IP:服务器的端口号,/资源名字
http://服务器所在主机的名字:服务器的端口号/资源名字
若服务器在本机:
http://本机的IP:服务器的端口号/资源名字
http://127.0.0.1:服务器的端口号/资源名字
http://localhost:服务器的端口号/资源名字
Tomcat的常见错误:
1):没有成功启动Tomcat,就开始访问.-->无法显示此网页
2):出现404的错误提示,HTTP Status 404
当前访问的资源地址不存在的时候,就报404错误.
此时的问题是,是我们自己造成的,把资源的名字写错了.
3):Tomcat成功启动之后,再去启动当前的Tomcat.
Tomcat的端口已经被占用,端口冲突.
4):不能乱改动Tomcat中配置文件的结构.
查看日志文件的,找到错误的的位置,错误原因-->再修改.
5):在XML配置文件中使用中文,此时XML文件必须使用UTF-8的编码.
XML文件:文件内容的编码和文件本身的编码要相同,都为UTF-8.
Tomcat的常见配置
Tomcat的默认端口是8080;
但是,HTTP协议的默认端口是80,而我们在访问的时候,是遵循http协议的,
如果是80端口:http://localhost:80/index.jsp
http://localhost/index.jsp
修改Tomcat根/conf/server.xml文件中,默认第71行.
每次配置完之后都要重新启动Tomcat
Tomcat的安装有两种版本:
1):减压版,减压之后,配置java_home可用.
2):安装版,在电脑上安装一个服务器.
本身没有差别,但是设置在开机的时候,自动启动Tomcat.
把Tomcat作为服务器安装在Windows的服务器列表中:
使用Tomcat/bin/service.bat:
安装服务:service install
卸载服务:service remove
安全配置:账号跟密码.
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user roles="manager-gui,admin-gui" password="123456" username="admin"/>
JavaWeb项目结构:
appDemo(web应用根目录) 根目录下的文件外界可以直接访问
--html,jsp,css,javascript文件等.
--WEB-INF目录 该目录下的文件外界无法直接访问,由web服务器负责调用.
-classes目录-(java类编译之后的class文件)
-lib目录-(java类运行所依赖的jar包)
-web.xml文件-(web应用的配置文件)
搭建项目的时候记得改变项目的输出目录:也就是改变classpath的路径,从默认的bin目录改变为webapp/WEB-INF/class中:
以后把项目给别人,只给webapp目录.
添加Tomcat插件
1).把插件jar包拷贝到D:\Eclipes\Eclipes4jee\eclipse\dropins
2).记得在eclipse中的preferences中设置Tomcat的添加路径为D:\JAVA\Tomcat\apache-tomcat-7.0.57
3).重新启动Tomcat服务器.
部署web项目:
方法1:直接把项目的web跟路径,拷贝到Tomcat跟/webapps目录中.
该方式可行,而且是MyEclipse工具的部署方式.
缺点:
1:不支持热部署,(代码变动之后,需要重新部署,重新部署的成本很大).
2:把所有的项目都部署在该路径,启动越来越慢,若其中一个项目有问题,Tomcat是启动不了.
方法2:告诉Tomcat服务器,从指定的路径去部署项目.
1):找到Tomcat根/conf/server.xml文件.
2):在<Host>元素之间,编写<Context>元素,具体代码如下:
<Context docBase="D:\Java EE\Cookie-Session\webapp" path=""/>
3):访问当前项目的路径:http://ip:port/contextPath/资源名称
注意:多个<Context>元素的path不能相同.
虚拟主机配置:
需求:有两个公司的web应用都发布在同一个Tomcat服务器上,可以为每家公司创建一个虚拟主机.
www.daidu.com www.google.com
修改Windows系统中的C:/Windows/system32/driver/etc/hosts.
配置二级域名,会使用到.
3 HTTP协议
特点:无状态,默认端口是80 https:
WEB浏览器与web服务器之间的一问一答的交互过程必须遵循一定的规则,就是HTTP协议.
HTTP是hypertext transfer Protocol(超文本传输协议)的简写,它是TCP/IP协议上的一个应用层协议,用于定义WEB浏览器与web服务器之间交换数据的过程以及数据本身的格式.
HTTP协议到底约束了什么:
1.约束了浏览器以何种格式向服务端发生数据:
2.约束了服务器应该以何种格式来接受客户端发生的数据:
3.约束了服务器应以何种格式来反馈数据给浏览器;
4.约束了浏览器应以何种格式来接收服务器反馈的数据.
HTTP1.0规范 跟 HTTP1.1规范
HTTP1.0规范:若请求N个资源,得建立N次连接,发送N次请求,接收N次响应,关闭N次连接,
每次请求之间都要建立单独的连接,请求,响应,响应完关闭该次连接:
缺点:每请求一个资源都要单独的建立新的连接,请求完并关闭连接.
解决方案:能在一次连接之间,多次请求,多次响应,响应完成之后再关闭连接.
HTTP1.1规范:能在一次连接之间,多次请求,多次响应,响应完之后再关闭连接.
特点: 在一个TCP连接上可以传送多个HTTP请求和响应,多个请求和响应过程可以重叠进行,增加了更多的请求头和响应头
浏览器给服务器发送数据:一次请求
服务器给浏览器反馈数据:一次响应
HTTP协议的版本:HTTP/1.0,HTTP1.1,HTTPS2.0
HTTP请求概述
请求信息:
包含三大部分:请求行,请求头,请求实体.
请求行:位于请求信息的第一行,格式:请求方式get/post 资源路径 HTTP版本号
get请求方式:a,若请求服务器上的某个资源,没有指定请求方式,则默认为GET方式
b,可以通过GET方式向服务器传递数据,具体方式就是在URL请求路径加上?多个参数分割
post请求方式:a,若使用post请求方式传递数据,可以借助form表单的method="post"
b,数据安全,且长度没有限制
请求头:<1>,Accept:浏览器可接受的MIME类型(内容类型)(Tomcat安装目录/conf/web,xml中查找)
<2>,Accept-Charset:告知服务器,客户端支持哪种字符集
<3>,Accept-Encoding:浏览器能够进行解码的数据编码方式
<4>,Accept-Language:浏览器支持的语言.
<5>,Referer:当前页面有哪个页面访问过来的.
<6>,Content-Type:通知服务器请求正文的MIME类型.
<7>,Content-Length:请求正文的长度
<8>,If-Modified-Since:通知服务器,缓存的文件的最后修改时间.
<9>User-Agent:通知服务器浏览器类型.
<10>,Connection:表示是否需要持久连接.如果服务器看到这里的值为"keep-Alive",或者看到的请求使用的是HTTP 1.1(HTTP1.1默认进行持久连接)
请求实体:从第一个空行开始,后面的都是正文.(可以没有),只有POST请求才有请求实体
响应信息:
包含三大部分:
响应行:位于响应信息的第一行.格式:HTTP版本号 状态码:200(OK) 404(资源名写错了) 500(服务端后台的java代码写错了)
响应头:Server:告诉客户端服务器使用的容器类型
Content-Type:当前响应的MIME格式:text/html--->网页文本
Transfer-Encoding:是否要加密
Date:响应的时间,什么时候响应的.
响应实体
GET和POST的区别(面试容易考到):
Get方式请求:
1):请求的数据全部在浏览器地址栏(很不安全).
2):观察请求信息:请求信息会全部存储到请求行中.
Post方式请求:
1):请求的数据不会出现在浏览器的地址栏(比较安全)
2):观察请求信息:请求信息会全部存储到请求实体中
参数连接:资源?参数名=参数值&参数名=参数值&....
资源后第一个参数使用?连接,其他使用&连接.
GET和POST请求的区别:
1):GET的请求数据在地址栏,而POST不会,POST比GET跟安全.
2):POST请求的参数存放在请求实体中,而get存放于请求行中.
3):GET方式请求的数据不能超过2k,而POST没有上限.
比如文件上传时,必须使用POST方式.
4):GET可以缓存,而POST没有缓存
查询的时候使用GET其他时候使用POST.表单全部使用post提交,
哪些时候是GET呢?
1:直接在浏览器地址栏敲回车.
2:表单中,method=get.
3:超链接.
只有表单中使用method=post,才是POST方式.