一,服务器
1.1 web 相关的概念
软件结构C/S 和 B/S的对比:
- C/S:客户端/服务端
- B/S:浏览器/服务端
资源的分类:
- C/S 的页面更加精美
- C/S 的宽带占用更小
- B/S 的硬盘占用更小
- B/S 更易于更细维护
网络通信的三要素:
- 静态资源:任何用户访问后,得到的结果就是一样的就称为静态资源,静态资源可以直接被浏览器解析,例如:html、css、js
- 动态资源:每一个用户访问后,得到的结果可能不同的就称为动态资源,动态资源会先转换成静态资源,再返回给浏览器,例如:servlet、jsp
- ip:计算机设备在网络中的唯一标识
- 端口:应用程序在计算机中的唯一标识
- 传输协议:数据在网络中传输的规则
1.2 web 服务器
服务器:安装了服务器软件的计算机
服务器软件:接收用户的请求,处理请求,做出响应
常见的 web 服务器:
tomcat:
- tomcat:Apache组织的,中小型 JavaEE 服务器。开源,免费。
- webLogic:Oracle公司的大型 JavaEE 服务器。收费。
- webSphere:IBM公司的大型 JavaEE 服务器。收费。
- 下载地址:http://tomcat.apache.org
- 安装:解压即可,只能解压到纯英文路径下
- 目录结构:
- bin:可执行文件,里面有 startup.bat、shutdown.bat
- conf:配置文件,里面有 web.xml、server.xml
- lib:依赖的 jar 包
- logs:日志文件
- temp:临时文件
- webapps:存在 web 项目
- work:运行时产生的文件或者数据
- 启动服务器:
运行 bin 下的 startup.bat
可能遇到的问题:
补充:
一闪:
原因:没有正确配置环境变量
解决:去配啊
报错:
原因:端口冲突
解决:
方法1. 杀死进程,在 cmd 中 通过 netstat -ano 找到端口号冲突进行的 pid ,在任务管理器中结束进程
方法2. 修改配置文件的端口号,配置文件是 conf 下的 server.xml
- 如果将默认的端口号从8080改成80,那么访问服务器时就不需要写端口号了
<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
- 访问方式是在浏览器的地址栏上输入:
- 访问自己:http://localhost:8080
- 访问其他人:http://其他人的ip:8080
- 服务器不要重复开启
- 关闭服务器:
- 运行 bin 下的 shutdown.bat
- ctrl + c
- 点击 x 关闭窗口
- 将项目部署到服务器上:
- 直接将项目放到 webapps 目录下,通过 http://ip地址:端口号/项目名/资源名 进行访问
- 在 conf 下的 server.xml 中的 Host 标签 下配置:
- docBase:项目所在的文件夹
- path:虚拟路径
- 通过 http://ip地址:端口号/abc/项目名/资源名 进行访问
- 在 conf 下的 catalina 下的 localhost 目录下创建任意文件名的 abc.xml 文件,配置:
- docBase:项目所在的文件夹
- 该 xml 文件的名字就是虚拟路径
- 通过 http://ip地址:端口号/abc/项目名/资源名 进行访问
1.3 将 tomcat 部署到 eclipse
步骤:
- 点击 window,点击 preferences
- 找到 server,点击 runtime enviroments
- 点击 add,选择 tomcat7.0,点击 next
- 点击 browse,选择你所安装的 tomcat 服务器的根目录,点击确定,点击 finish,点击 ok
- 创建项目,选择动态网页工程(dynamic web project)
1.4 eclipse 中创建 web 工程
步骤:
- 点击 file,点击 new
- 选择动态网页工程(dynamic web project)
- 给项目起个名字
选择 2.5 或者 3.0 版本
注:如果选择的是 3.0 系统将不会为你自动创建 web.xml
二,Servlet
2.1 概念和基本使用
概念:运行在服务器端的程序,Server applet
Servlet是一个接口,它定义Java类能被服务器访问到的规则
步骤:
- 定义一个类,实现 Servlet 接口
- 重写方法
配置 Servlet
在 web.xml 中配置:
<!-- 配置Servlet类 --> <servlet> <servlet-name>abc</servlet-name> <servlet-class>com.qf.servlet.TestServlet</servlet-class> </servlet> <!-- 配置Servlet映射 --> <servlet-mapping> <servlet-name>abc</servlet-name> <url-pattern>/tt</url-pattern> </servlet-mapping>
2.2 Servlet 执行原理
Servlet的执行原理:
- 当服务器接收到客户端请求时,会解析请求的地址,访问到Servlet资源的路径
- 在 web.xml 中进行查找,是否有对应 url-pattern 标签体中内容与只匹配
- 如果没有,页面会出现 404 (资源找不到)错误
- 如果有,会查找是否有一个servlet标签下的servlet-name标签体中的内容与该url-pattern所在映射下的servlet-name标签体中的内容一致的servlet标签。
- 如果没有,服务器开启过程中会报错
- 如果有,就能根据全类名找到对应的 Java 类,执行其中的功能
2.3 Servlet 的生命周期
init():默认第一次访问时执行,只执行一次
可以通过配置,将servlet的初始化从第一次访问执行修改成服务器启动时就执行
<!-- 配置该Servlet的初始化时机是在服务器启动时, n可以是任意整数, n为负数:表示第一次访问时执行 0或者整数:表示服务器启动时就初始化 数值越小,越优先启动 --> <load-on-startup>n</load-on-startup>
service():每次访问时都执行一次
在这个方法中提供了tomcat服务器已经封装好了的请求和响应对象
destroy():正常关闭服务器时执行,只执行一次
一般用于释放资源,只有服务器正常关闭时才会执行,执行后servlet被销毁
2.4 Servlet 的体系结构
HttpServlet抽象类 -> GenericServlet抽象类 -> Servlet接口
HttpServlet:专门针对Http协议的一种Servlet接口的封装,简化了Servlet中的操作,并且明确了 get/post 请求时会访问到的相关方法。
使用步骤:
注:使用浏览器直接访问servlet,默认的提交方法是get
- 创建类时,选择Servlet
- 自定义Servlet的类名和url
- 选择 doPost() 和 doGet() 方法
2.5 url-pattern 的配置
注:目录匹配和扩展名匹配不能混用
- 完全匹配:/xxx
- 目录匹配:/xxx/xxx/*
- 扩展名匹配:*.xxx
2.6 欢迎页面
<welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list>
作用:配置默认的起始页面,在访问服务器首页时,可以不写首页的资源名,就可以直接访问到首页
例如:上述配置文件中,第一个欢迎页是 index.html,那么在访问该应用时,地址栏中只需要写
http://ip:端口/虚拟路径 即可
注:
- 如果自己项目中没有配置,也会遵循tomcat中的web.xml的首页配置
- 在中,系统会从上到下依次查找项目中是否有该页面,有的话就作为主页,没有就向下继续查找,直到最后;如果没有任何一个中配置的页面,那么会发生404。
三,Http
3.1 概念
概念:HyperText Transfer protocol 超文本传输协议
Http 它定义客户端和服务器在通信时发送数据和接收数据的格式
特点:
- 基于TCP/IP的协议
- 默认端口号是8080
- 基于请求/响应的:一次请求对应一次响应
- 无状态的:每次请求之间是互相独立的,不能交互数据
- 版本:
- 1.0 版本:每一次请求响应都会建立新的连接
- 1.1 版本:复用连接
3.2 请求消息数据的格式
- 请求行:
- 请求方式:POST、GET
- GET:
- 请求的参数在请求行中,拼接在地址后
- 请求地址的长度有限制,64K
- 不安全
- POST:
- 请求的参数封装在请求体中
- 请求的地址没有限制的限制
- 相对安全
- 请求的地址:http://localhost/day41_05_login_register/register
- 请求协议/版本:http/1.1
请求头
格式:" 请求头名称 : 请求头值 "
请求头是客户端告知服务器的信息
常见的请求头:
- Referer:告知服务器,当前请求从哪个页面过来,常用于防盗链
- User-Agent:告知服务器,当前浏览器的版本信息,常用于解决浏览器的兼容性问题
- 请求体:封装了POST提交方式的请求参数
3.3 响应消息数据的格式
- 响应行:
- 组成:协议/版本 响应状态码 状态码的描述,例如:http/1.1 200 ok
- 响应状态码:服务器告知浏览器本次请求和响应的状态
- 状态码都是3位数字
- 分类:
- 1xx:服务器接收到了浏览器的消息,但是还没有接收完毕,需要等待
- 2xx:表示成功。例如:200 成功
- 3xx:表示重定向。例如:302(重定向)、304(访问缓存)
- 4xx:客户端错误。例如:404(资源找不到)、405(请求方式没有对应的doXxx方法)
- 5xx:服务器错误、例如:500(服务器内部出现异常)
- 响应头:
- 组成:" 响应头的名称 : 响应头的值 "
- 常见的响应头:
- Content-Type:服务器告知浏览器本次响应的数据要以何种编码格式解析
- Content-disposition:服务器告知浏览器以什么格式打开响应的数据
- inline:(默认)响应的数据在页面中显示
- attachment;filename=文件名 :告知浏览器指定文件不要解析,以附件形式打开(这就是文件下载)
- 响应体:服务器传输给浏览器的数据