一,服务器
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:Apache组织的,中小型 JavaEE 服务器。开源,免费。
- webLogic:Oracle公司的大型 JavaEE 服务器。收费。
- webSphere:IBM公司的大型 JavaEE 服务器。收费。
tomcat:
下载地址: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 目录下创建任意文件名的 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服务器已经封装好了的请求和响应对象
destory():正常关闭服务器时执行,只执行一次
一般用于释放资源,只有服务器正常关闭时才会执行,执行后servlet被销毁
2.4 Servlet 的体系结构
HttpServlet抽象类 -> GenericServlet抽象类 -> Servlet接口
HttpServlet:专门针对Http协议的一种Servlet接口的封装,简化了Servlet中的操作,并且明确了 get/post 请求时会访问到的相关方法。
使用步骤:
- 创建类时,选择Servlet
- 自定义Servlet的类名和url
- 选择 doPost() 和 doGet() 方法
注:使用浏览器直接访问servlet,默认的提交方法是get
2.5 url-pattern 的配置
- 完全匹配:/xxx
- 目录匹配:/xxx/xxx/*
- 扩展名匹配:*.xxx
注:目录匹配和扩展名匹配不能混用
三,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提交方式的请求参数