一 Web服务器
1 C/S和B/S
C/S和B/S是软件发展过程中出现的两种软件架构方式
1.1 C/S架构
Client/Server客户端/服务器
特点:必须在客户端安装特定软件
优点:图形效果显示较好(如:3D游戏)
缺点:服务器的软件和功能进行升级,客户端也必须升级、不利于维护
常见的C/S程序:QQ、微信等
1.2 B/S架构
Browser/Server 浏览器/服务端
特点:无需安装客户端,任何浏览器都可直接访问
优点:涉及到功能的升级,只需要升级服务器端
缺点:图形显示效果不如C/S架构
需要通过HTTP协议访问
2 web服务器
2.1 web
WEB,在英语中表示网页的意思,它用于表示Internet主机上供外界访问的资源。
Internet上供外界访问的Web资源分为静态资源和动态资源。
静态web资源(如html 页面):指web页面中供人们浏览的数据始终是不变。
动态web资源:指web页面中供人们浏览的数据是由程序产生的,不同时间点访问web页面看到的内容各不相同。
常用动态web资源开发技术:JSP/Servlet、ASP.net、PHP等
在Java中,动态web资源开发技术统称为Java web开发。
2.2 web服务器
Web服务器是运行及发布Web应用的容器,只有将开发的Web项目放置到该容器中,才能使网络中的所有用户通过浏览器进行访问。
2.3 常见的web服务器软件
WebLogic:Oracle公司,收费,全面支持javaEE规范
JBoss:RedHat ,收费,全面支持javaEE规范
Tomcat:Apache,免费,部分支持javaEE规范
3 Http协议
浏览器端与服务端交互的过程中,若想获得web服务器中的某个web资源,需遵守一定的规则,这个规则就是Http协议。HTTP协议用于定义浏览器端与web服务器之间数据交互的过程和数据格式。
HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,是一种请求/响应协议。
HTTP协议的版本:HTTP/1.0、HTTP/1.1
3.1 Http请求
客户端连上服务器后,向服务器请求某个web资源,称之为客户端向服务器发送了一个HTTP请求。一个完整的HTTP请求包括如下内容:一个请求行、若干请求头、以及请求体内容,其中的一些请求头和请求体内容都是可选的,请求头和请求体之间要用空行隔开。
请求体用于封装post请求提交的数据
如下所示 :
GET /test/HelloServlet HTTP/1.1 --请求行
Host: localhost:8080 -- 以下内容都是请求头 数据是key-value形式
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-CN,zh;q=0.8
3.2 请求方式
请求行中的GET称之为请求方式,请求方式有:
请求方式 | 描述 |
---|---|
GET | 请求指定的页面信息,并返回实体主体。 |
HEAD | 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头 |
POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。 |
PUT | 从客户端向服务器传送的数据取代指定的文档的内容。 |
DELETE | 请求服务器删除指定的数据。 |
CONNECT | HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。 |
OPTIONS | 允许客户端查看服务器的性能。 |
TRACE | 回显服务器收到的请求,主要用于测试或诊断。 |
PATCH | 是对 PUT 方法的补充,用来对已知资源进行局部更新 。 |
常用的有:POST、GET
不管POST或GET,都用于向服务器请求某个WEB资源,这两种方式的区别主要表现在数据传递上,客户端通过这两种方式都可以带一些数据给服务器。
3.2.1 get请求
直接在浏览器中输入某个地址,浏览器将以get方式发送请求。
使用GET请求方式时,如果需要向服务器提交数据,则可以在请求的URL地址后以?的形式带上交给服务器的数据,多个数据之间以&进行分隔。
如:
http://localhost:8080/test/HelloServlet?name=zhangsan&age=12
form表单中,可以将提交方式设置为get
3.2.2 post请求
如请求方式为POST方式,提交的数据放在请求数据的请求体
form表单中,可以将提交方式设置为post
3.2.3 get请求和post请求主要区别
1)get请求是,提交的参数会放在url中,所以隐私性,安全性较差;而post请求时,提交的数据是放在请求体中,用户无法直接看到
2)get请求传输的数据长度有限制,不同的浏览器和服务器不同,比如1kb、2kb等;而post请求时,数据大小没有长度限制
3)get请求一般用于查询之类的操作,用于资源的获取,数据的读取;post请求一般用于修改和写入数据
4)相对来说,get比post速度快
5)get请求会将返回的静态数据(网页、图片等)缓存起来,而post请求不会(当然,也不会使用post获取静态资源)
3.3 Http响应
一个HTTP响应代表服务器向客户端回送的数据,它包括:
一个响应行、若干响应头、以及响应体,其中的一些响应头和响应体都是可选的,响应头和响应体之间要用空行隔开。
HTTP/1.1 200 OK --响应行
Server: Apache-Coyote/1.1 --响应头
Content-Length: 24
Date: Mon, 31 Jul 2017 02:57:09 GMT
空行
服务端返回浏览器显示的数据--响应体
3.4 响应行
格式:HTTP版本号 状态码 原因叙述
举例:HTTP/1.1 200 OK
状态码用于表示服务器对请求的处理结果,它是一个三位的十进制数。响应状态码分为5类,如下所示:
100~199 | 表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程 |
---|---|
200~299 | 表示成功接收请求并已完成整个处理过程,常用200 |
300~399 | 未完成请求,客户需进一步细化请求。例如,请求的资源已经移动一个新地址,常用302、307和304 |
400~499 | 客户端的请求有错误,常用404 |
500~599 | 服务器端出现错误,常用 500 |
二 tomcat基本使用
1 下载安装
获取Tomcat安装程序包
tar.gz文件是Linux操作系统下的压缩版本
exe文件是Windows系统下的安装版本
zip文件是Windows系统下的压缩版本
本教学过程中使用zip版的tomcat8,将其解压后放在合适的目录下,路径中不要包含中文
2 启动关闭
启动:Tomcat安装目录/bin/startup.bat
关闭:Tomcat安装目录/bin/shutdown.bat
启动tomcat服务后,在浏览器输入http://localhost:8080/,如果显示如下界面说明服务器启动正常
3 常见问题
- JAVA_HOME
没有JAVA_HOME环境变量,启动tomcat服务器,闪退
- 8080端口占用
Tomcat使用8080端口
修改tomcat端口或者关闭占用8080端口的程序
conf/server.xml文件中修改端口号位置:
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" />
3)CATALINA_HOME引起的问题
安装版的tomcat会自动增加CATALINA_HOME环境变量,如果卸载tomcat,不会卸载该环境变量。再次安装tomcat时,如果和以前的路径不一样,启动tomcat就会出问题
解决方案:直接删除该环境变量
4 tomcat主要目录结构
bin :tomcat相关的命令和脚本文件
conf :tomcat服务器相关的配合文件,server.xml核心配置
lib :运行tomcat需要的jar文件
logs: 存放日志文件,记录了Tomcat启动和关闭的信息,如果启动Tomcat时有错误,异常也会记录在日志文件中。
webapps:存放web应用,即供外界访问的web资源
work:tomcat工作目录,存放jsp生成的class文件
三 web应用开发
1 web应用目录结构
Web应用目录
--页面相关的资源,如html、jsp、js、css等文件外界可以直接访问
--META-INF
--WEB-INF该目录下的文件外界无法非法直接访问,由web服务器负责调用
--classes:web应用程序的字节码文件
--lib:存放运行web程序需要的jar文件
--web.xml: web应用的配置文件
2 Servlet体验
2.1 新建java项目,将其转变为web项目
项目的目录结构
2.2 添加tomcat
选择Local
默认界面如下:
点击“Configure”添加tomcat:
选择tomcat的安装路径
设置name
点击右下角的“Fix”,配置项目部署后的访问路径等信息
“Application Context”可以修改为指定的项目路径,本例采用默认值
修改如下配置,debug状态下,实现热部署(不用重启服务,修改的代码就会生效)
"On Update action",修改文件时触发的操作
"On frame deactivation" 表示ide失去焦点触发的操作
2.3 添加tomcat相关jar包依赖
选择Library后显示页面,选择“Tomcat8.5.57”
添加后界面:
另外,注意如下页面,如果new中无法新建Servlet,需要进行如下配置
2.4 新建Servlet
修改Servlet的Name,暂时勾选“Create Java EE 6+ annotated class”(servlet注解方式)
增加如下代码:
2.5 启动tomcat
2.6 通过浏览器访问Servlet资源
http://tomcat服务器ip:端口号/web应用名称/资源名称
2.7 tomcat启动时,控制台中文乱码问题
解决控制台乱码后,System.out.println()输出中文会乱码,还需要按照2.8进行处理
方案1:
添加: -Dfile.encoding=UTF-8
方案2:
修改完成后,一定要重启idea
2.8 System.out.println() 中文乱码解决
方案1:
每次都需要修改,比较麻烦
方案2:
修改D:\apache-tomcat-9.0.33\bin\catalina.bat文件
找到 set "JAVA_OPTS=%JAVA_OPTS% %JSSE_OPTS%",增加-Dfile.encoding=UTF-8
修改后如下:
set "JAVA_OPTS=%JAVA_OPTS% %JSSE_OPTS% -Dfile.encoding=UTF-8"
2.9 web项目打包
将war包拷贝到tomcat的webapps目录下,启动tomcat,war包会自动解压,相当于发布web程序。
注意:
war模式称为发布模式,先将程序打包成war包,再部署到服务器发布;
war exploded模式是直接把web工程中文件夹、页面资源 、classes等等发布到Tomcat,直接进行加载部署。因此这种方式支持热部署,一般在开发的时候也是用这种方式。
附录
1 XML
XML(EXtensible Markup Language),可扩展标记语言,它是一种类似于HTML的标记语言。
XML是由W3C组织推出的,它是一种通用的数据交换格式。
<?xml version="1.0" encoding="utf-8"?>
<stus>
<stu id="001">
<name>Tom</name>
<sex>男</sex>
<age>20</age>
</stu>
<stu id="002">
<name>Jerry</name>
<sex>女</sex>
<age>21</age>
</stu>
</stus>
1.1 基础语法
1.1.1 文档声明
XML必须有文档声明
XML声明放在XML文档的第一行
<?xml version="1.0" encoding="utf-8" ?>
XML声明由以下几个部分组成:
version –文档符合XML1.0规范
encoding –文档字符编码,比如GB2312、UTF-8等
standalone –文档定义是否独立使用
standalone=”no”为默认值;yes代表是独立使用,而no代表不是独立使用
1.1.2 XML中元素
也可称为节点、标记
1)每个XML文档必须有且只有一个根元素
根元素是一个完全包括文档中其他所有元素的元素
2)XML元素指的是XML文件中出现的标签,一个标签分为开始标签和结束标签
<name>Tom</name>
3)一个标签中可以嵌套多个子标签
<stu id="001">
<name>Tom</name>
<sex>男</sex>
<age>20</age>
</stu>
4)命名规范:
区分大小写
不能以数字或下划线”_”开头
标签内不能包含空格等特殊字符
1.1.3 标签中的属性
<stu id="001">
<name>Tom</name>
</stu>
1)一个元素可以有多个属性,它的基本格式为:
<元素名 属性名1="属性值1" 属性名2="属性值2">
2)属性值用双引号或单引号
如果属性值中有单引号,则外层使用双引号;如果值中有双引号,则外层使用单引号
1.1.4 XML中注释
XML的注释类似于HTML中的注释:
<!--这是一个注释-->
1.1.5 XML中的特殊符号
元素的内容不能包含特殊符号
特殊符号 | 实体引用 | XML中的含义 |
---|---|---|
< | < | 新元素的开始 |
> | > | |
& | & | 字符实体的开始 |
" | " | |
' | ' |
比如数据库连接的url:
jdbc:mysql://localhost:3306/test?characterEncoding=utf8&useSSL=false&serverTimezone=UTC
在xml文件中,&要写成&
<url>jdbc:mysql://localhost:3306/test?characterEncoding=utf8&useSSL=false&serverTimezone=UTC<url>
注意:对于XML,只有"<"和"&"是严格禁止使用的。引号和大于号是合法的,但是把它们替换为实体引用是个好的习惯。
1.2 XML约束 了解
约束表示规则,一些第三方提供的组件中,有些用到xml,里面的标签名和属性是不能随便定义的
1.2.1 DTD约束
DTD约束是早期出现的一种XML约束模式语言,根据它的语法创建的文件称为DTD文件
1)引用本地的DTD文件
<!DOCTYPE 根元素名称 SYSTEM "外部DTD文件的URI">
2)引用公用的DTD文件
<!DOCTYPE 根元素名称 PUBLIC "DTD名称" "外部DTD文件的URI">
使用DTD约束的例子:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
</configuration>
1.2.2 Schema约束
Schema约束也是一种用于定义和描述XML文档结构与内容的模式语言,它比DTD功能强大很多,但相应的语法也复杂很多
1)使用名称空间引入XML Schema文档
通过属性xsi:schemaLocation来声明名称空间的文档,
xsi:schemaLocation属性是在标准名称空间“http://www.w3.org/2001/XMLSchema-instance”中定义的
2)不使用名称空间引入XML Schema文档
通过xsi:noNamespaceSchemaLocation属性直接指定,n
oNamespaceSchemaLocation属性是在标准名称空间“http://www.w3.org/2001/XMLSchema-instance”中定义的。
使用Schema约束的例子:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
</web-app>