JavaWeb
- HTTP(超文本传输协议) 是一种分布式,合作式,多媒体信息系统服务,面向应用层的协议。
- 功能:用于在服务器和客户端之间传输超文本文件。
HTTP协议的主要特点:
- 1.遵循请求/响应模型:支持客户端/服务器模型
- 2.无连接:限制每次连接处理只处理一个请求。服务器处理完客户端的请求,并收到客户的应答后,即断开链接。(本质有连接)
- 3.无状态:HTTP协议是无状态协议。指协议对于事物处理没有记忆能力,缺少状态意味着如果后续处理需要前面的信息重新传送**
- 4.简单快速:只需要传送请求方法路径。
- 5.灵活:HTTP允许传送任意类型的数据对象
HTTP协议-请求
- HTTP协议请求由三部分组成,分别是:请求行,消息报头,请求正文
- 请求方法有多种,常用GET和POST方法。
- GET:向Web服务器请求一个页面。
- POST:向Web服务器发送数据请求处理。
HTTP协议-响应
HTTP响应也由三部分组成:分别是:状态行,消息报头,响应正文。
Web服务器的缺陷
静态Web和动态Web是最本质区别是静态Web是无法继续进行数据库操作,而动态Web是可以进行数据库操作,动态Web最大的特点是具有交互性,所谓交互性就是服务器端会自动根据用户请求响应不同的结果。
Servlet
Web容器
- Web容器负责管理和运行Servlet
- 容器对Servlet的支持包括:
- 通信支持
- 生命周期管理
- 多线程支持
- JSP支持
- 处理安全性
Servlet规范
规范只定义了一个容器必须实现的标准功能
Servlet容器有很多不同的实现
-Tomcat,Jboss,WebLogic,WebSphere,Oracle9i AS;
Servlet与Web容器配合处理请求和响应的处理总结。
- 客户端向Web服务器发起一个HTTP请求。
- HTTP请求被Web服务器接受,如果请求是静态页面,则由Web服务器负责处理。如果请求是JavaWeb组建(Servlet或者JSP),则移交给Web处理。Web容器可以在主机的同一个进程、不同的阶段或其他的Web服务主机的进程中启动。
- Web容器根据Servlet的配置文件确定调用的具体Servlet类,并把request对象、response对象传给它。
- Servlet通过request对象知道客户端的使用者是谁,客户的请求信息是什么和其他的一些信息Servlet处理完请求后把要返回的信息房屋response对象返回到客户端。
- 一旦Servlet完成了请求的处理,Web容器就会刷新response,把控制权返回给web服务器。
Tomcat配置外部IP
- 打开Tomcat下的conf/server.xml配置文件
- 找到配置文件中的Host字段
- 将Host字段的属性名name的值修改为本机服务器Ip地址
- 重新启动Tomcat使修改后配置生效
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Context path="/test" docBase="E:/JavaWeb" />
修改为
<Host name="192.168.31.189" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Context path="/test" docBase="E:/JavaWeb" />
- 对应的修改端口号修改:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
修改为
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
Tomcat部署
发布Web应用
Servlet
- 是运行在Web服务器或应用服务器上的Java程序
- 在Web上创建动态内容的有效而强大的解决方案
- 由容器来管理生命周期与Web服务器交互
- 由Sun规范了其功能
Servlet生命周期
Servlet程序是运行在服务器端的一段Java程序,器生命周期将受到Web容器的控制。
生命周期包括加载(创建)程序、初始化、服务、终止(销毁)、卸载5个部分在正常情况下,Servlet只会初始化一次,而处理服务会调用多次,销毁也只会调用一次。但在特殊情况下初始化和销毁可能会进行多次。如一个Servlet长时间不使用的情况。
匹配规则分为一下几种方式
完全匹配
如:<url-pattern>/servlet/MyServlet.do</url-pattern>
目录匹配
如:<url-pattern>/servlet/*</url-pattern>
扩展名匹配
如:<url-pattern>*.do</url-pattern>
容器查找规则
**容器会首先查找完全匹配,如果找不到则查找目录匹配,如果仍找不到再查找扩展名匹配
如果一个请求可以匹配多个目录匹配,容器会选择最长的目录匹配**
如:servletA的url-pattern为/test/,而servletB的url-pattern为test/b/,此时访问
http://localhost/test/b时,容器会选择路径最长的servlet来匹配,也就是这里的servletB。