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的总体逻辑

![image-20220503191306677](C:\Users\李思坤\AppData\Roaming\Typora\typora-user-images\image-20220503191306677.png)

### 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>

posted @ 2022-05-03 19:19  鸽子gkd  阅读(84)  评论(0)    收藏  举报