小白都能看懂的Java-web运行机制

文章目录

  • 前言
  • 一、首先说下浏览器
  • 二、什么是web服务
  • 三、servlet容器
  • 具体实现
    • 1.添加核心支持pom.xml
    • 2. 我们来探究这个web容器
    • 3. web和顾客都是老大,可怜了Service
  • 总结


前言

从刚开始学习java到慢慢了解web之后初识框架的一路来,我对整个java学习的过程中,也会出现很多的疑惑和迷茫,大学前两年的时间,一开始接触的编程语言是C++,因为第一个学期就有这门课程,所以对初来匝道的大一新生来说,真的很努力学习这门课,学校也有专门搞算法的ACM,在没接触java的那段时间,一直致力于搞算法、身边也会时不时有人会告诉你,搞算法掉头发,但真的挣钱,哈哈,但或许在那些大佬看来,算法真的对他们的学习来说那是只要学就能会的,哈哈,但我要说的是我觉得算法可能真得不适合我,一我一开始错过了进入ACM的机会,没有接受过培训,靠自己在下边摸索前进,是会有所成就,但可能自己摸索半个月的题目和算法,对于人家来说。只是一个小时,或者更少的时间就能看透。虽然自己也觉得咱不行吧,但却没有放弃过,还是硬着头皮学着,为此我也非常庆幸我那段的坚持不懈,因为这为我后期接触编程语言和java开发奠定了很好的思维基础和编程能力

以下是本篇文章正文内容

一、首先说下浏览器

浏览器是什么呢??我们上网使用浏览器可以访问各种各样的网页,因为这些网页是属于不同公司的服务器,所以我们相当于使用浏览器这个工具来访问指定的服务器,然而这些网站被访问后就会返回我们所需要的信息,这些信息并不是简单的格式,需要浏览器对其进行解码和编译之后才会在页面中显示出来,之所以解释这一点,最重要的原因在于,我们在开发过程中,一直就在涉及整个过程,然而我们需要特别注意的是----从我们点击一个页面标签开始,到页面发生变化,整个过程中,请求访问的是浏览器,接受响应的还是浏览器。所以排除服务器之后的开发,都在围绕着一个实体—浏览器。
浏览器用专业点的来说它相当于一个web容器,对于web容器的理解,我们一开始就把它当做一个装着我们上网后产生一个又一个网页的瓶子就好,这也是我们打开浏览器经常见到的不是吗?不然那么多网页,我们访问的时候只看一个页面,其他页面呢,所以浏览器web容器就大致是这个意思。
那么web容器是怎么发挥它的作用,换句话说浏览器又是怎样实现对服务器的访问的呢,首先我们要知道得是,我们想访问一个网页,比如百度,那么我们是不是要知道正确的URL,www.baidu.com这个我想都知道,所以问题也就出在这里,我们知道,但浏览器它知道吗?它一开始是不知道的啊,虽然我们打开浏览器或许就进去百度了,但这实际是一个类似于超链接的静态网页行为,其他正常情况下,我们需要先在导航栏输入URL然后进行访问,但我们在进行动态web开发的时候是不能让给用户一个链接,让人家对着导航栏敲吧,也不能全部写成静态的超链接,那么动态web开发,切不是失去了灵魂
因而,我们要引入一个新的知识点service,也就是web服务

二、什么是web服务

web服务,也就是我们常说的service ,它就像它的名字一样,起到的是服务作用,服务什么?服务的就是web容器所产生的各种操作,这其中就包括最主要的请求(Request)和响应(Response),就好比你点击浏览器的访问一个页面跳转百度的链接,那么这个页面就会告知web容器,web容器说我只管存放你们,但访问你们需要找web服务(服务员,哈哈),然后将这个请求转给了web服务(service),service收到请求后,它要想办法实现啊,那方法呢----这个就是需要我们来写的啊,根据你的需要写适合的方法,这里暂且不说,我们现在需要知道的就是了解service是怎样实现这个整套服务过程。那就是service的核心servlet容器

三、servlet容器

servlet容器是service的核心,整个service都是因为这个容器而运行,这就好比一个机器人的核心动力,而servlet里边的就是处理各种请求的具体实现方法,当service这个服务员接收到请求后,它就会从(servletRequest)req这个请求中获取浏览器发来请求,然后处理后将数据打包,传给(servletResponse)reponse这个响应中,之后便将响应信息发送到浏览器,浏览器对其进行解码和编译,这样就呈现出我们平时所看见的页面

具体实现

1.添加核心支持pom.xml

我们在idea中新建一个 module ,建立之后idea打开的第一个文件就是 pom.xml ,这个是idea相比较eclipse最具特色的体现,pom是整个项目的核心运行支持,包含着各个项目之间的父子继承关系,以及项目所需要的jar包和运行环境的配置小白都能看懂的Java-web运行机制_第1张图片
小白都能看懂的Java-web运行机制_第2张图片
头文件标签,不可变



<project xmlns="http://maven.apache.org/POM/4.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

model的版本和打包方式pom以及各项目之间的父子关系

<modelVersion>4.0.0modelVersion>
  <packaging>pompackaging>

  <name>JavaWebStudentname>
  <modules>
    <module>JavaWebServlet-01module>
    <module>Servlet-02module>
  modules>
  <groupId>org.examplegroupId>
  <artifactId>JavaWebStudentartifactId>
  <version>1.0-SNAPSHOTversion>

这是我运行项目的时候一直报不支持发行版本5,但seting和projiect中设置的jdk版本都是11,如果你们可以按照网上设置运行,就不需要使用这个配置jdk版本

 <properties>
    <java.version>11java.version>
    <maven.compiler.source>${java.version}maven.compiler.source>
    <maven.compiler.target>${java.version}maven.compiler.target>
  properties>

这个·标签是添加项目所以的依赖jar包,只要你将对应的jar包依赖写入,idea就会自动下载并整合到项目中,这里添加的是支持servlet容器和servlet-jsp中jar包,只有在他们存在的支持下,我们的service核心servlet才能正常运行。这就好比机器人所需要对应型号的电池。

  <dependencies>
    <dependency>
      <groupId>javax.servletgroupId>
      <artifactId>javax.servlet-apiartifactId>
      <version>3.1.0version>
    dependency>
    <dependency>
      <groupId>javax.servlet.jspgroupId>
      <artifactId>javax.servlet.jsp-apiartifactId>
      <version>2.3.3version>
    dependency>
  dependencies>

2. 我们来探究这个web容器

当我们打开web.xml这个文件,其实我们就已经进入这个容器内部,但我们看到其实只是容器的表象,我们在后边的学习会深度发觉它的核心组成元素,现在我能只用了解它的一些主要部件,以及他们的工能都是些什么即可。

这只是它的头文件,所有的xml都会有这样的头文件,你们可以摸索下他们的规律,额很有的。


<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0"
         metadata-complete="true">

下边这个标签是最重要的部件,就如同它的大脑,它是一个指挥请求来去方向的标签

 <servlet>
    <servlet-name>ErrorServletservlet-name>
    <servlet-class>com.kuang.servlet.errorServletservlet-class>
  servlet>
  <servlet-mapping>
    <servlet-name>ErrorServletservlet-name>
    <url-pattern>/*url-pattern>
  servlet-mapping>
web-app>

我们回想下,之前和大家说的 servlet 的功能------一个实现具体服务(service)的服务员,他的作用不就是处理web容器里边装的那各种不能直接处理的请求。那么我们现在看这些标签,servlet-name 和 servlet-class 分别是指servlet的名字和servlet的具体实现类--------这里就好比,web容器要把提交的请求交给能实现这个请求的服务员,这个服务员是谁-----> servlet-class ,这个服务员叫什么名字servlet-name,当然web容器还是比较优秀的吧,因为实际上他应该就是这个餐厅的老板,他愿意给服务员叫啥名就叫啥名,(本来想之后和你说的,没办法,还是早点告诉你web容器这善于隐藏的Boss,知道为啥不–不要觉得web容器啥也不会干,那是因为人家是老板,管着你们所有人呢,在想啥呢,老板会去端盘子吗?除非他崩了)。
所以也就是说当web容器这个老板把你的请求分给指定的服务员后,服务员就会满足你的需求,之后你就等着从这个服务员手上接受你应该得到的响应就OK了。那么具体有怎么得到这个响应呢??web容器老大哥就告诉你了

 <servlet-mapping>
    <servlet-name>ErrorServletservlet-name>
    <url-pattern>/Errorurl-pattern>
  servlet-mapping>

不过这里你要遵守web容器的规则,必须从得到你请求的服务员手中接收响应。
这里重点说下第二个标签url-pattern ----> /Error <----- 这是页面请求的具体链接也就是URL,在请求的时候,要给web一个可以知道的地址吧,不然人家都不知道你在哪里坐着,怎么给你分配服务员,这是你和service(服务员)对接的路径,当然这个路径也不唯一,你可以修改的 例如 : /* 这个意思及时所有路径都可以,(很任性包场了),这里满足规律的是正则表达式。
我们知道一个服务员有时不可能只为一个顾客服务,因此请看

<servlet-mapping>
    <servlet-name>ErrorServletservlet-name>
    <url-pattern>/wangurl-pattern>
  servlet-mapping>

`<servlet-mapping>
    <servlet-name>ErrorServletservlet-name>
    <url-pattern>/zhaourl-pattern>
  servlet-mapping>

提示 : 不要想你一个人霸占多个服务员,web表示你不够资格,Boss不支持

3. web和顾客都是老大,可怜了Service

前边忙了半天,web老大让你干啥你就要干啥,请求说要实现啥,你就要实现,完了还要记得认真打包成response转给顾客(其实中间还要先交给web老大过个审才阔以)太难了,
来吧,我们来看看service这个苦命的服务员是具体怎么做的吧
小白都能看懂的Java-web运行机制_第3张图片
要了解service(服务员)那就必须知道它在公司的地位,它必须要在一个合理的位置,这里会有各种各样service,这样才能方便管理—合理建包的重要性

然后才开始看看服务员的工作方法
首先每一个合格的service都必须拥有一个servlet工具,这是工作必备的工具,没有它,那就不是一个真正的service(服务员),没有老板愿意找个空壳机器人做服务员

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {

        resp.setContentType("text/html");
        resp.setCharacterEncoding("UTF-8");
        PrintWriter writer = resp.getWriter();
        writer.print("我假装从服务器那边得到的一句话 , 因为我现在还没向服务器发送请求,所以不会有响应信息回来,这只是模拟输出的");

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

当service拥有了servlet后,就好比有了一个可以在顾客点餐时用做记录的小本本,上边写着顾客想要实现的一切(HttpServletRequest req),然后才能想尽办法完成。这里我对实现过程不做解释,具体也就是写各种方法,我们之后慢慢讲解。
我们这里展示的service就是模拟从服务器获得处理后的一句话,因为我们实际上没有将请求发送处理,只是伪造了一个响应,所以全部都是response的方法,response就是处理后的响应。哈哈服务员有点坏哦。

总结

就这样所有工作完成后,我们从头开始,发布项目,在浏览器输入请求URL,便可以找到service,得到响应页面

你可能感兴趣的:(java基础知识整理使用,java)