web的概念描述
Java WEB
使用的java开发的程序,并且是基于互联网的一个项目
基于互联网的项目的软件架构分为2种
C/S B/S
C/S Client Server 客户端/服务端
客户端需要进行安装,
如 QQ 微信 ....
缺点 开发繁琐.维护麻烦....
B/S
Browser Server 浏览器 服务器
用户只是需要一个浏览器在进行输入一个网站,就可以进行访问 了
不用进行繁琐的安装
缺点:
对硬件 软件的环境要求高,如果应用过大
那么硬件和软件低,用户的体验就不好了
web服务器
服务器: 安装了服务器的软件的计算机
服务器的软件:
JBOSS 收费
weblogic 收费
tomcat 免费
apache 基金组织
作用:
用于接收用户的请求,并切进行响应
说白了用户和网站之间的中间站,进行对数据交互传输
Servlet Server Applet 小型的服务连接器
特点: 用java编写的服务器端的程序,具有独立于平台和协议的特点
主要的功能在与交互式的浏览和生成数据,生成web动态的内容数据
Servlet 的入门
与生命周期
public class Test_Servlet implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("初始化");//特点.在服务器的时候进行加载一次,
}

      @Override
      public ServletConfig getServletConfig() {
          return null;
      }

      @Override
      public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
          System.out.println("在用户发送请求的情况下进行执行,注意只要服务不挂,那么用户请求多少次,执行多少次");
          /**
           * 扩展,
           *   请问,当用户在请求执行get  或者  post 方法的时候,
           *   那么Service这个方法方式怎么进行区别用户执行的get 还是post
           *   解释,源码如下:
                       protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
                       String method = req.getMethod();
                       long lastModified;
                       if (method.equals("GET")) {
                       lastModified = this.getLastModified(req);
                       if (lastModified == -1L) {
                       this.doGet(req, resp);
                       } else {
                       long ifModifiedSince;
                       try {
                       ifModifiedSince = req.getDateHeader("If-Modified-Since");
                       } catch (IllegalArgumentException var9) {
                       ifModifiedSince = -1L;
                       }

                       if (ifModifiedSince < lastModified / 1000L * 1000L) {
                       this.maybeSetLastModified(resp, lastModified);
                       this.doGet(req, resp);
                       } else {
                       resp.setStatus(304);
                       }
                       }
                       }
           */
      }

执行的流程
2.5
用户请求地址http://localhost:8080/test_servlet_war_exploded/httpServlet
然后到WEb.xml中查询地址。-》名称-》类-》Server-》doget、dopsot
如图所示

3.0
@WebServlet("/Test_HttpServlet3")
/**
* @WebServlet("/Test_HttpServlet3")
* 就是相当于
* <servlet>
* <servlet-name>httpServlet</servlet-name>
* <servlet-class>com.test.servlet.Test_HttpServlet</servlet-class>
* </servlet>
* <servlet-mapping>
* <servlet-name>httpServlet</servlet-name>
* <url-pattern>/httpServlet</url-pattern>
* </servlet-mapping>
*
*/
public class Test_HttpServlet3 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("执行了Servlet3.0的方法0.sout");
    }
}

执行的原理与2.5类似
@Target({ElementType.TYPE}) //表示,被修饰的注解能使用在什么地址,如方法上,类上,属性上
@Retention(RetentionPolicy.RUNTIME) //保存的一个生效时间
@Documented //生成JAVADOC的文档的
public @interface WebServlet {
注解的使用的方式
//@WebServlet(name = "",urlPatterns = "/Test_HttpServlet3")
@WebServlet({"/Test_HttpServlet3","/xxxooo"})


请求消息的格式
1.请求行
格式 : GET /XXXXX
请求的方式
get
1.请求的参数在请求的行总共,在URL地址后面
2。请求的URL地址的长度是有限制的
3。不安全
post
1.请求的参数在请求的体中
2。url没限制
3。相当于安全的
2.请求头
客户端(浏览器)告诉服务器的一些信息
请求头:请求值
如":
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-Encoding: gzip, deflate, br
Accept-Language: zh-TW,zh;q=0.9,en-US;q=0.8,en;q=0.7//字符集语言
Connection: keep-alive
Host: localhost:8080 //地址
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
//浏览器告诉服务器,我们进行访问你使用的是什么浏览器器,浏览器的内核与版本信息
//可以在服务端,获取到这请求头的信息,来记下来处理浏览器的兼容问题
或者,进行对某些浏览器现在访问
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36 Edg/86.0.622.58
3.请求空行
空白的行,就是用于分割post请求头和请求体的
4.请求体
正文
封装了post的请求的消息的请求参数的


Request
执行的方式 如图:
1.Tomcat服务器会根据请求的URL的地址中的资源路径,来进行创建对应Servlet的实现类如HttpServlet
2.tomcat服务会创建Request和Response对象
3.tomcat将Request和Response对象传递给Service方法,并且进行调用Service方法
4。程序员同过请求Request对象获取到用户的提交的数据,然后通过Reposne进行响应数据信息给用户展示
5.服务器在给浏览器做出响应之前,会从response对象中拿出程序员进行设置的响应的销售数据
Cookie session
会话
就是一次会话中包含了多次请求和响应 (如:客户端和服务端之间的通信,就是会话)
会话的什么周期,浏览器在第一次给服务器发送请求的时候,会话进行建立,值到有一方断开为止
功能
在一次会话的范围内,进行多次的请求与响应,共享数据
方式:
Cookie (客户端) Session(服务端)
Cookie
客户端会话技术,将数据保存在客户端上
如图逻辑
Cookie共享
在一个tomcat中,进行部署多个web项目。这些WEB项目中的Cookie能不能进行共享
在默认的情况下,Cookie是不能进行共享的
怎么进行共享
同服务器
1.设置Cookie 的获取的访问,
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//格式化字符集
resp.setContentType("text/html;charset=UTF-8");
resp.setCharacterEncoding("UTF-8");
//进行编写Cookie
Cookie cookie = new Cookie("name", URLDecoder.decode("小王", "UTF-8"));
cookie.setPath("/");
resp.addCookie(cookie);

            }
        }
 不同的服务器
        在Cookie中进行设置一级域名相同,那么服务器之间的cookie是可以进行共享
        cookie.setDomain(".baidu.com");
         如:https://tieba.baidu.com/  和  http://news.baidu.com/   就可以进行共享数据了

Cookie的作用 和特点
1. 客户端会话技术,将数据保存在客户端上
2。对于单个Cookie 的大小是有限制的4KB
3。对同一个域名下的总Cookie 也是有限制的,
作用
一般用于存储少量的并且这些数据是不敏感的
不登录的情况下,完成服务器对客户端的身份认证
案例:
记住上一次的访问的时间