web相关概念回顾
1.软件架构
1.C/S:客户端/服务器端
2.B/S:浏览器/服务器端
2.资源分类
1.静态资源:所有用户访问后,得到的结果都是一样的,称为静态资源。
静态资源可以直接响应给浏览器解析
如:html css javascript
2.动态资源:每个用户访问相同资源后,得到的结果可能不一样,称为动态资源
动态资源被访问后,需要先转换为静态资源,再响应给浏览器解析
如:JSP Servlet
3.网络通信三要素
1.IP:电子设备在网络中的唯一标识
2.PORT:应用程序在计算机中的唯一标识
3.传输协议:规定了数据传输的规则
1.基础协议:
1.tcp(传输控制协议):安全协议,三次握手。面向连接,通信较慢
常用于文件,视频等数据传输
2.udp(用户数据报协议):不安全协议。无连接,通信快
常用语通话,视频等数据传输
Web服务器软件
服务器:安装了服务器软件的计算机---> 硬件+软件
服务器软件:接收用户的请求,处理请求,做出响应
web服务器软件(web容器):可以部署web项目,让用户通过浏览器来访问项目
动态资源必须在web容器中才能运行
常见的java相关web服务器软件:
webLogic:oracle公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费
webSphere:IBM公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费
JBOSS:JBOSS公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费
Tomcat:Apache基金组织,中小型的JavaEE服务器,仅支持少量JavaEE规范(如:JSP Servlet),且开源,免费
JavaEE:Java语言在企业级开发中使用的技术规范的总和,一共规定了13项大的规范
Tomcat:web服务器软件
1.下载:官网下载
2.安装:压缩包解压(安装路径不要存在中文,空格)
3.卸载:删除目录
4.启动:
bin/startup.bat 双击运行服务器(windows)
bin/startup.sh 双击运行服务器(linux)
访问:浏览器输入:http://localhost:8080 访问自己
http://别人IP:8080 访问别人的服务器
可能遇到的问题:
1.黑窗口一闪而过:
原因:没有正确配置JAVA_HOME环境变量
解决方案:正确配置JAVA_HOME环境变量
2,启动报错:
1.找到占用的端口号,找到对应的进程,杀死该进程
dos中netstat -ano调出进程
2.修改自身端口
在conf/server.xml配置文件中
一般讲tomcat的默认端口口设为80,80是http协议默认端口
好处:访问时,无需输入端口
5.关闭:
1.正常关闭
1.bin/shutdown.bat
2.ctrl+c
2.强制关闭
6.配置
部署项目方式:
1.直接将项目放在webapps目录下
/hello/hello.html: /hello--> 虚拟目录
简化部署:将项目打包成war包,将war包放在webapps目录下,war包将自动解压
2.配置conf/server.xml文件
在<Host>标签体中配置
<Context docBase="项目路径" path="设置的虚拟目录名">
3(推荐方式).在conf\Catalina\localhost创建任意名称的xml文件。在文件中编写
<Context docBase="项目路径">
虚拟目录:就是xml文件名称(名称去后缀)
静态项目和动态项目:
目录结构:
java动态项目结构:
项目根目录
WEB-INF目录
web.xml:web项目的核心配置文件
classes目录:字节码文件目录
lib目录:依赖jar包目录
将tomcat集成到IDEA中,并常见JavaEE项目,部署项目
热部署:update和fram两个都设置为update resources
Servlet(web核心知识): server applet
概念:运行在服务器端的小程序
Servlet就是一个接口,定义了Java类被浏览器访问到(tomcat识别)的规则
将来我们自定义一个类,实现Servlet接口,复写方法
基本操作:
1.创建JavaEE项目
2.定义一个类,实现Servlet接口
3.实现接口中的抽象方法
4.配置Servlet
在web.xml中配置servlet及servlet-mapping
执行原理:
1.服务器接收到客户端浏览器请求后,会解析请求URL路径,获取访问的Servlet的资源路径
2.查找web.xml文件,是否有对应的<url-pattern>标签体内容
3.如果有,则再找到对应的<servlet-class>全类名
4.tomcat会将字节码文件加载进内存,并且创建其实例对象(反射技术)
5.调用其方法
Servlet中的方法:
void init(ServletConfig servletConfig)
初始化方法,在Servlet被创建时执行,只会执行一次
ServletConfig getServletConfig()
获取Servlet的配置对象方法
service(ServletRequest servletRequest, ServletResponse servletResponse)
提供服务的方法,每一次Servlet被访问时,执行。访问一次执行一次
String getServletInfo()
获取Servlet一些信息,版本,作者等
void destroy()
销毁方法,在服务器正常关闭时,执行,只执行一次
Servlet中的生命周期:
1.创建:执行init方法,执行一次
Servlet什么时候被创建?
默认情况下,第一次被访问时,Servlet被创建
可以配置执行Servlet的创建时机
在<servlet>标签下配置
1.第一次被访问同时,创建
<load-on-startup>值为负整数
2.在服务器启动时,创建
<load-on-startup>值为0或正整数
Servlet的init方法,只执行一次,说明一个Servlet在内存中只存在一个对象,Servlet是单例
多个用户同时访问时,可能存在线程安全问题
解决:如果定义变量可以定义局部变量,或者不要对定义的成员变量修改值
2.提供服务:执行service方法,执行多次
每次访问Servlet,服务器都会调用service方法一次
3.销毁:执行destroy方法,执行一次
Servlet被销毁时执行。服务器关闭时,销毁Servlet
只有服务器正常关闭,才会执行destroy方法
该方法在Servlet销毁前执行,一般用于释放资源
Servlet3.0:
好处:支持注解配置是,选择Servlet3.0以上版本,可以不创建web.xml配置文件,配置更方便
步骤:
1.创建JavaEE项目6以上
2.定义一个类,实现Servlet接口
3.复写方法
4.在类上使用@WebServlet注解,进行配置
@WebServlet("/资源路径")
Servlet体系结构:
HttpServlet extends GenericServlet Implements Servlet
AbstractClass AbstractClass Interface
GenericServlet:将Servlet接口中其他的方法做了默认空实现,只抽象了service方法
将来定义Servlet类时,可继承GenericServlet,实现service方法即可
HttpService:对http协议的一种封装,简化操作
1.定义类继承HttpServlet
2.复写doGet/doPost方法
Servlet相关配置
1.urlPatterns:Servlet访问路径
1.一个Servlet可以定义多个访问路径:
@WebServlet({"/d4", "/dd4", "/ddd4"})
2.路径定义规则:
1. /xxx
2. /xxx/xxx:多层路径,目录结构
3. *.do-->此形式不要加"/",不然会报错
IDEA与tomcat的相关配置:
1.IDEA会为每一个tomcat部署的项目单独建立一份配置文件
查看控制台的log:Using CATALINA_BASE:
"C:\Users\Administrator\.IntelliJIdea2017.3\system\tomcat\Tomcat_8_5_31_day13_2"
2.工作空间项目 和 tomcat部署的web项目
tomcat部署的web项目可以在CATALINA_BASE的catalina/locahost/下的配置文件中找到
tomcat真正访问的是"tomcat部署的web项目","tomcat部署的web项目"对应着"工作空间"的web目录下所有资源
WEB-INF目录下的资源不能被浏览器直接访问
3.断点调试:使用"虫子图标"按钮启动
Http:
概念:Hyper Text Transfer Protocol 超文本传输协议(应用层协议)
特点:
1.基于TCP/IP的高级协议
2.默认端口号:80
3.基于请求/响应模型的:一次请求对应一次响应
4.无状态的:每一次请求之间相互独立,不能交互数据
历史版本:
1.0:每一次请求响应都会建立新的连接(短连接)
1.1:复用连接(长连接)
请求消息数据格式:
1.请求消息数据格式
1.请求行
请求方式 请求url 请求协议/版本
GET /login.html?username=xxx HTTP/1.1
POST /login.html HTTP/1.1
请求方式
HTTP协议有7种请求方式,常用2种
GET:
1.请求参数在请求行中,在url后
2.请求的url长度有限制
3.不太安全
POST:
1.请求参数在请求体中
2.请求的url长度没有限制
3.相对安全
2.请求头
客户端浏览器告诉服务器一些信息
格式:
请求头名称: 请求头的值
常见请求头:
1.User-Agent:浏览器告诉服务器,我访问你使用的浏览器版本信息
2.accept-xxx:可以接收的信息
3.Referer:http://xxx
告诉服务器,我(当前请求)从哪里来?
作用:
1.防盗链:比如看电影,从别的网站跳转到优酷(防止该行为)
2.统计工作:比如统计来自某站点的访问流量
3.请求空行
空行
windows:"/r/n"
linux: "/n"
mac:"/r"
作用:用于分隔POST请求的请求头,和请求体的
4.请求体(正文)
封装POST请求消息的请求参数的
字符串格式:
POST /login.html HTTP/1.1
Host: localhost
...【多个请求头】
【空行】
username=zhangsan
响应消息数据格式: