web-day01
# web-day01
## 一、服务器
WEB服务器由**硬件**和**软件**组成。
作用:接收客户端的请求和响应客户端的请求。
硬件:主机等。
软件:tomcat等。
` 自己的理解:服务器就是一个公共的电脑,tomcat等软件就是向互联网中其他的主机提供服务的,而服务器会将本地的文件映射为一个url链接作为地址,让其他主机访问。`
## 二、tomcat 的安装与导入
### 1.tomcat分为安装版和压缩版
一般推荐使用压缩版,解压完之后,直接点击startup启动即可。
注意:①启动之后要保证cmd窗口存活,使用http://localhost:8080 进行测试
②一定要将java放到配置环境中,名字为JAVA_HOME
## 三、配置idea的tomcat
### 1.导入tomcat文件
settings --> Build,Execution, Deployment --> Application Servers --> 放入tomcat路径即可导入成功
目录:
bin: 可执行文件
startup.bat 启动服务器
shutdown.bat 终止服务器
conf:配置文件
lib:jar包
logs:日志
temp:临时文件
webapps:部署发布的文件
work:工作目录
## 四、创建动态网页项目
### 1.创建动态web项目
注意:这是低版本的idea,高版本使用的是mavean
new module -- > java enterprise --> 勾选webApplication --> finish
目录:
src:编写动态java代码
web:静态资源
-- web-INF
js
css
.html
-- lib :存放jar包
web.xml :对web工程进行配置
index.jsp: 已经过时删除,直接创建index.html
### 2.tomcal实例 --> web工程的设置
进入 Edit Configurations -- > 可以修改Name 、默认的浏览器 、 On 'Update' action 设为值 redoploy --> 可以在deployment中设置部署的war文件
## 五、Http协议
### 1.定义
超文本传输协议,是TCP/IP下的一个协议,一种详细规定了浏览器和万维网服务器之间互相通信的规则。规定了数据的船传输规则。
报文:数据传输的格式
客户端--->服务端: 请求报文
服务端--->客户端: 响应报文
### 2.浏览器和服务器交互的四个步骤
①创建连接 --> 三次握手
②发送请求
③数据反馈
④断开连接 --> 四次挥手
`查看请求响应的详情 f12 右键 ---> 检查---> 网络`
### 3.Http1.0 和Http1.1的区别
在HTTP1.0版本中,浏览器请求一个带有图片的网页,会由于下载图片而与服务器之间开启一个新的连接;但在HTTP1.1版本中,允许浏览器在拿到当前请求对应的全部资源后再断开连接,提高了效率。
### 4.报文
6.1 请求报文: 客户端向服务器发起请求的数据格式
请求(首)行
请求头:
请求体:
```http
6.1.1 get请求
请求(首)行:
请求方式 提交地址:应用名+资源名 提交的数据 协议 版本
GET /day11Web/success.html?uname=zs&pwd=123 HTTP/1.1
请求头:
Host: localhost:8080 主机虚拟地址
Connection: keep-alive 长连接
Upgrade-Insecure-Requests: 1 请求协议的自动升级[http的请求,服务器却是https的,浏览器自动会将请求协议升级为https的]
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.36
- 用户系统信息
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
- 浏览器支持的文件类型
Referer: http://localhost:8080/05_web_tomcat/login.html
- 当前页面的上一个页面的路径[当前页面通过哪个页面跳转过来的]: 可以通过此路径跳转回上一个页面, 广告计费,防止盗链
Accept-Encoding: gzip, deflate, br
- 浏览器支持的压缩格式
Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7
- 浏览器支持的语言
请求体:请求携带的数据
get请求数据在浏览器的地址栏 没有请求体
```
```http
6.1.2post 请求
请求(首)行 提交地址:应用名+资源名 协议 版本
POST /day11Web/success.html HTTP/1.1
请求方式
请求头
接收的文件类型
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Language: zh-CN,zh;q=0.9 语言类型
Connection: keep-alive 保持连接
Cookie: Idea-dba54f96=c3a62b54-de1c-464e-898b-19755c8e4fdb 会话控制
Host: localhost:8080 主机名
Referer: http://localhost:8080/day11Web/ 防止盗链
客户端信息:判断是手机还是电脑
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36
请求体:发送请求时携带的数据
uname=zs&pwd=123
get
表单没有写请求类型 默认get
```
get 和 post的区别:
GET VS POST:
1.安全问题
get请求数据在地址栏 直接可见 不安全
post数据在请求体中 不直接可见 安全
2.传输的数据量不同
get请求容量大概是4k左右
post请求没有容量限制
3.效率
get请求效率高
post请求效率低
4.如果没有特别指定采用post请求 则默认是get请求
<a href="http://www.baidu.com" >百度一下</a> get
直接在浏览器地址栏 输入网址 回车
6.2 响应报文:服务器返回数据给客户端的数据格式
http://localhost:8080/day11Web/index.html
响应行
协议/版本 状态码
HTTP/1.1 200
响应头
最后修改时间
Last-Modified: Tue, 03 May 2022 06:01:31 GMT
Content-Type: text/html 内容类型
Content-Length: 590 内容的大小 单位是字节
Date: Tue, 03 May 2022 06:15:24 GMT 时间是0时区的 找当前时间是 +8:00
响应体
html
css
js
图片
注意:
响应码
200 成功
404 资源未找到
500 服务器内部问题
50X java代码问题
302 重定向
## 六、web资源
由**静态资源**和**动态资源**组成。
1.静态资源: html css js 图片....
2.动态资源:通过代码控制展示的动态数据
## 七、Servlet
### 1.定义
一套定义动态资源规范
代码层面:就是一个接口。
作用:接收用户请求 响应用户请求
### 2.servlet的使用思路
①创建webModule
②创建html页面
```html
<!--
使用绝对路径: /部署的项目名/要访问的资源路径
-->
<a href="/webday05/hello">访问HelloServlet</a>
```
③创建HelloServlet
```java
package com.atguigu.servlet;
import javax.servlet.*;
import java.io.IOException;
/**
* 包名:com.atguigu.servlet
*
* 编写Servlet的步骤:
* 1. 编写一个类实现Servlet接口,并且重写里面的方法: 主要是要重写service方法
* 2. 重写service方法,service方法中就是接收、处理请求,并且将信息响应给客户端
* 3. 配置Servlet的映射路径(供客户端访问的路径):在web/WEB-INF/web.xml中配置
4.注意,返回数据不能是中文
*/
public class HelloServlet implements Servlet {
@Override
public void init(ServletConfig config) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
//使用响应输出流向浏览器输出: Hello,I am Servlet
System.out.println("helloservlet startup---");
res.getWriter().write("Hello,I am Servlet");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
```
④ 在web.xml中配置HelloServlet
```xml
<!--配置HelloServlet的映射路径 -->
<servlet>
<!--相当于给该Servlet取个名,我们可以就使用Servlet的类名/类名首字母改小写-->
<servlet-name>helloServlet</servlet-name>
<!--你要配置的那个Servlet的全限定名-->
<servlet-class>com.atguigu.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<!--和servlet标签中的servlet-name保持一致 -->
<servlet-name>helloServlet</servlet-name>
<!--这就是要给HelloServlet配置的映射路径,以/开头-->
<url-pattern>/hello</url-pattern>
</servlet-mapping>
------------------------------------------------------------------------------------------
<!-- 配置servlet,告诉tomcat服务器要使用的功能-->
<servlet>
<!-- servlet名字可以随意写,但要与mapping保持一致-->
<servlet-name>HelloServlet</servlet-name>
<!-- 写全包名,实现了servlet接口的java类-->
<servlet-class>com.atguigu.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<!-- 要保持与servlet名字一致,为了完成路径映射-->
<servlet-name>HelloServlet</servlet-name>
<!-- 拦截路径就是 html文件点击了下边的连接之后,会自动映射到上一行的HelloServlet ,同时HelloServlet会自动调用类,完成对应的功能-->
<!-- / 是省略了http://ip:port/工程路径(day06servlet)/资源文件(helloServlet)-->
<url-pattern>/helloServlet</url-pattern>
</servlet-mapping>
```
<span style="color:blue;font-weight:bold;">『映射路径』</span>:Servlet并<span style="color:blue;font-weight:bold;">不是</span>文件系统中<span style="color:blue;font-weight:bold;">实际存在</span>的<span style="color:blue;font-weight:bold;">目录或文件</span>,所以为了方便浏览器访问,我们创建了<span style="color:blue;font-weight:bold;">映射路径</span>来访问它。
### 3.tomcat的总体逻辑

### 4.访问资源的地址
#### 4.1 访问静态资源
/Web应用名称/静态资源本身的路径(就是静态资源在web文件夹中的路径)
#### 4.2 访问动态资源
/Web应用名称/映射路径
### 5.使用注解来配置servlet
@WebServlet("/third")
public class ThiredServlet implements Servlet {
//重写的方法
}
10.1访问Servlet的方式一
<a href="third"> 访问第三个Servlet</a>
10.2访问Servlet的方式一
http://localhost:8080/day11Servlet1/third
### 6.servlet的声明周期
servlet 对象什么时候创建,谁创建?
当请求被拦截时 加载web.xml指定的Servlet 通过反射创建对象
1.默认是当需要此Servlet处理请求时 才会创建指定的Servlet对象
2.Servlet容器创建 容器早tomcat内部
init()初始化方法 只会【执行一次】
可以对处理请求做【准备】工作
service() 处理请求的方法
处理请求的逻辑写在此处
来一次请求执行一次
destroy() 销毁方法
关闭服务器 会导致Servlet销毁
关闭资源操作
如果某个Servlet 需要随着服务器的启动而创建 那么可以配置 <load-on-startup>3</load-on-startup>
数字越小 启动越靠前 最小值是 0
<servlet>
<servlet-name>FirstServlet</servlet-name>
<servlet-class>com.atguigu.servlet.FirstServlet</servlet-class>
<load-on-startup>3</load-on-startup>
</servlet>

浙公网安备 33010602011771号