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号
浙公网安备 33010602011771号