一、Web服务器软件
服务器:安装了服务器软件的计算机。
服务器软件:接收用户的请求,处理请求,做出响应。
Web服务器软件:在web服务器软件中,可以部署web项目,让用户通过浏览器来访问这些项目。
常见的java相关的web服务器软件:
- webLogic:oracle公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费的。
- webSphere:IBM公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费的。
- JBOSS:JBOSS公司的,大型的JavaEE服务器,支持所有的JavaEE规范,收费的。
- Tomcat:Apache基金组织,中小型的JavaEE服务器,仅仅支持少量的JavaEE规范servlet/jsp。开源的,免费的。
- JavaEE:Java语言在企业级开发中使用的技术规范的总和,一共规定了13项大的规范
二、 Tomcat
Tomcat是Web服务器软件。
下载安装就不说了,说一说启动 Tomcat可能会遇到的问题:
- 黑窗口一闪而过:
- 原因: 没有正确配置JAVA_HOME环境变量
- 解决方案:正确配置JAVA_HOME环境变量
- 启动报错:
暴力解决:找到占用的端口号,并且找到对应的进程,杀死该进程
netstat -ano
温柔解决:修改自身的端口号。
conf/server.xml
<Connector port="8888" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8445" />
一般会将tomcat的默认端口号修改为80。80端口号是http协议的默认端口号。
好处:在访问时,就不用输入端口号
1、配置
部署项目的方式:
- 直接将项目放到webapps目录下即可。
/项目名称:项目的访问路径-->虚拟目录
简化部署:将项目打成一个war包,再将war包放置到webapps目录下。
war包会自动解压缩
- 配置conf/server.xml文件
在<Host>标签体中配置
<Context docBase="D:\hello" path="/hehe" />
docBase:项目存放的路径
path:虚拟目录
- 在conf\Catalina\localhost创建任意名称的xml文件
在文件中编写<Context docBase="D:\hello" />
虚拟目录:xml文件的名称
将Tomcat集成到IDEA中,并且创建JavaEE的项目,部署项目。
2、idea与tomcat的相关配置
1、IDEA会为每一个tomcat部署的项目单独建立一份配置文件
查看控制台的log:Using CATALINA_BASE:
"C:\Users\fqy\.IntelliJIdea2018.1\system\tomcat\_itcast"
- 工作空间项目和 tomcat部署的web项目
- tomcat真正访问的是“tomcat部署的web项目”,“tomcat部署的web项目"对应着"工作空间项目” 的web目录下的所有资源
- WEB-INF目录下的资源不能被浏览器直接访问。
- 断点调试:使用"小虫子"启动 dubug 启动
三、Servlet
1、 概念
Servlet是运行在服务端的小程序,是一个接口,定义了Java类被浏览器访问到(tomcat识别)的规则。
将来我们自定义一个类,实现Servlet接口,复写方法。
2、Servle执行原理
1、当服务器接收到客户端浏览器的请求后,会解析请求URL路径,获取访问的Servlet的资源路径。
2、查找web.xml文件,是否有对应的标签体内容
3、如果有则在找到对应的全类名
4、tomcat会将字节码文件加载进内存,并且创建其对象
5、调用其方法
3、体系结构
Servlet – 接口
|
GenericServlet – 抽象类
|
HttpServlet – 抽象类
GenericServlet
1. 将Servlet接口中其他的方法做了默认空实现,只将service()方法作为抽象。
2. 将来定义Servlet类时,可以继承GenericServlet,实现service()方法即可。
HttpServlet(推荐使用)
对http协议的一种封装,简化操作
- 定义类继承HttpServlet
- 复写doGet/doPost方法
4、Servlet中的生命周期
1、被创建
执行init方法,只执行一次。默认情况下,第一次被访问时,Servlet被创建。
可以配置执行Servlet的创建时机。
在<servlet>标签下配置:
1. 第一次被访问时,创建
<load-on-startup>的值为负数
2. 在服务器启动时,创建
<load-on-startup>的值为0或正整数
Servlet的init方法,只执行一次,说明一个Servlet在内存中只存在一个对象,Servlet是单例的。
2、提供服务
执行servlet方法,执行多次,每次访问Servlet时,Service方法都会被调用一次。
3、被销毁
- 执行destroy方法,执行一次。
- Servlet被销毁时执行。服务器关闭时,Servlet被销毁
- 只有服务器正常关闭时,才会执行destroy方法。
- destroy方法在Servlet被销毁之前执行,一般用于释放资源
4、Post与Get区别
这两种方法有本质的区别,get只有一个流,参数附加在url后,大小个数有严格限制且只能是字符串。post的参数是通过另外的流传递的,不通过url,所以可以很大,也可以传递二进制数据
get:
GET 调用用于获取服务器信息,并将其做为响应返回给客户端。当经由Web浏览器或通过HTML、JSP直接访问Servlet的URL时,一般用GET调用。 GET调用在URL里显示正传送给servlet的数据,这在系统的安全方面可能带来一些问题
post:
它用于客户端把数据传送到服务器端,也会有副作用。但好处是可以隐藏传送给服务器的任何数据。Post适合发送大量的数据。
5、 Servlet相关配置
- urlpartten:Servlet访问路径
一个Servlet可以定义多个访问路径 : @WebServlet({“/d4”,“/dd4”,“/ddd4”}) - 路径定义规则:
3. /xxx:路径匹配
4. /xxx/xxx:多层路径,目录结构
5. *.do:扩展名匹配
6、请求转发(Forward)与重定项(Redirect)
加粗样式请求转发Forward特点:
- 转发地址栏路径不变
- 转发只能访问当前服务器下的资源
- 转发是一次请求,可以使用request对象来共享数据
重定项Redirect特点:
1.地址栏发生变化
2.重定项可以访问其他站点(服务器)的资源
3.重定项是两次请求。不能使用request对象来共享数据
四、HTTP
1、概念
HTTP是超文本传输协议。传输协议:定义了,客户端和服务器端通信时,发送数据的格式。
特点:
- 基于TCP/IP的高级协议
- 默认端口号:80
- 基于请求/响应模型的:一次请求对应一次响应
- 无状态的:每次请求之间相互独立,不能交互数据
2、请求消息数据
客户端发送给服务器端的数据。
请求消息数据格式
1、请求行
请求方式 请求url 请求协议/版本:GET /login.html HTTP/1.1
请求方式:HTTP协议有7种请求方式,常用的有2种
GET:
- 请求参数在请求行中,在url后。
- 请求的url长度有限制的
- 不太安全
POST:
1、 请求参数在请求体中
2、请求的url长度没有限制的
3、相对安全
2、请求头
客户端浏览器告诉服务器一些信息。
-
User-Agent:浏览器告诉服务器,我访问你使用的浏览器版本信息
可以在服务器端获取该头的信息,解决浏览器的兼容性问题 -
Referer:http://localhost/login.html
告诉服务器,我(当前请求)从哪里来?
作用:
1. 防盗链:
2. 统计工作:
3、请求空行
空行,就是用于分割POST请求的请求头,和请求体的。
4、请求体
封装POST请求消息的请求参数的
3、响应消息数据
服务器端发送给客户端的数据
响应消息数据格式
1、响应行
组成:协议/版本,响应状态码,状态码描述。
响应状态码:服务器告诉客户端浏览器本次请求和响应的一个状态
分类:
2、响应头
五、Request
1. request对象和response对象的原理
- request和response对象是由服务器创建的。我们来使用它们
- request对象是来获取请求消息,response对象是来设置响应消息
2. request对象继承体系结构
3. request功能
1、获取请求消息数据
- 获取请求行数据
- GET /day14/demo1?name=zhangsan HTTP/1.1
方法:
-
获取请求头数据
-
获取请求体数据:
请求体:只有POST请求方式,才有请求体,在请求体中封装了POST请求的请求参数