JAVAWEB-NOTE07-HTTP、TOMCAT、SERVELET

javaweb技术栈简介

  • BS架构
    BS架构就是浏览器服务器架构模式,客户端只需要浏览器,应用程序的逻辑和数据都存储在服务器端。浏览器只需要请求服务器,服务器就会将WEB资源发送给浏览器。
    好处:易于维护升级。只需服务器端做升级和维护,客户端无需任何部署。
  • 服务器资源中分为静态资源和动态资源
    1 静态资源:包括HTML、CSS、JS、图片等,主要负责页面的展示
    2 动态资源:包括JAVA按照一定规则写成的代码:Servlet、JSP等,负责逻辑处理
  • 数据库:负责数据存储
  • HTTP协议:通信规则
  • WEB服务器:负责解析HTTP协议,解析请求数据并返回响应数据

HTTP

概念

超文本传输协议,规定了浏览器和服务器之间传输数据的规则
HTTP特点:

  • 基于TCP协议
  • 基于请求-响应模型:一次请求对应一次响应
  • HTTP是无状态的协议:对事务处理没有记忆能力,每次响应和请求都是独立的
    1 优点:速度块
    2 缺点:多次请求不能共享数据(JAVA通过会话技术来解决这个问题)

请求数据的格式

请求数据分为3部分:
1.请求行:请求数据的第一行。其中GET表示请求方式, /表示请求资源路径,HTTP/1.1表示协议版本
2.请求头:第二行开始,格式为key: value形式。
3.请求体: POST请求的最后一部分,存放请求参数

  • GET和POST区别
    uploading-image-892204.png

响应数据的格式

响应数据分为3部分:
1.响应行:响应数据的第一 行。其中HTTP/1.1表示协议版本,200表示响应状态码,OK表示状态码描述
2.响应头:第二行开始,格式为key: value形式
3.响应体: 最后一部分。存放响应数据

Tomcat

简介

Web服务器是一一个应该程序(软件), 对HTTP协议的操作进行封装,使得程序员不必直接对协议进行操作,让Web开发更加便捷。主要功能是"提供网上信息浏览服务”

概念: Tomcat是Apache 软件基金会-一个核心项目, 是一个开源免费的轻量级Web服务器,支持Servlet/JSP少量JavaEE规范。

JavaEE: Java Enterprise Edition, Java企业版。 指Java企业级开发的技术规范总和。包含13项技术规范: JDBC、JNDI、EJB、 RMI、JSP、 Servlet、XML、 JMS、Java IDL、JTS、 JTA、 JavaMail、JAF

Tomcat也被称为Web容器、Servlet容器。 Servlet 需要依赖于Tomcat才能运行

官网: https://tomcat.apache.org/

基本使用

安装好后可以看到webapps的这个目录,这个目录很重要,就是之后我们需要部署的项目所要放置到的文件夹

启动:

启动成功的标志:

启动的时候命令控制台中文乱码?
这是以为windows的cmd是GBK编码,解决方式如图所示

配置

部署

IDEA中创建Maven Web项目

项目结构

创建项目

在IDEA中创建Maven Web项目有两种情况,第一个是使用骨架,第二种是不使用骨架

使用骨架




创建完成后可以看到项目结构IDEA都帮助我们生成好了

但是缺少了src目录下的java和resources,我们需要手工补齐:

IDEA很智能,提示出了我们想要补全的java文件和resources文件,我们选择添加即可

不使用骨架

不使用骨架也很简单,只不过需要我们手动去配置文件夹:
第一步即不要在创建项目的页面去选择骨架:

然后我们需要在pom.xml中手动地添加打包的方式为war包,如何不设置,那么打包默认是jar包

随后我们发现这个项目结构中缺少最重要的webapp相关的内容,我们可以通过自动的方式将它补齐,进入到project structure当中

在IDEA中使用Tomcat

两种方式:本地集成和添加插件。由于本地集成需要IDEA旗舰版,这里只讲添加插件的方式
在pom.xml中alt+insert新建一个插件的模板,输入以下依赖:

<build>
    <plugins>
      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.2</version>
      </plugin>
    </plugins>
</build>

之后我们在项目运行的时候选择run maven当中的tomcat运行即可:

运行后的效果:

可以看到

在插件配置中,我们可以修改配置来达到更改默认端口号和路径的目的:

<build>
    <plugins>
      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.2</version>
        <port>80</port><!--修改默认端口为80-->
        <path>/</path><!--修改默认路径为/-->
      </plugin>
    </plugins>
</build>

servlet

简介

Servlet是Java提供的一门动态web资源开发技术
Servlet是JavaEE规范之一, 其实就是一个接口, 将来我们需要定义Servlet类实现Servlet接口,并由web服务器运行Servlet

快速入门

1.创建web项目,导入Servlet依赖坐标

<dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>
    </dependency>

2.创建一个类,实现Servlet接口,并重写接口中的所有方法

public class servletdemo1 implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

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

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("hello,world");
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }
}

3.配置:在类上使用@WebServlet注解,作用:配置该Servlet的访问路径:

@WebServlet("/demo1")
public class servletdemo1 implements Servlet

4.访问:启动tomcat,浏览器输入URL进行访问该servlet

执行流程

我们现在来思考一个问题,在刚刚快速入门的代码中,我们并没有创建servletdemo1的对象,也没有调用service这个方法,那为什么控制台还能打印我们service中的helloworld呢?我们需要来了解一下servlet的执行流程
其实servlet的对象是由web服务器创建,也就是这里的tomcat,同时service()也是tomcat去调用执行的。

生命周期

对象的生命周期指一个对象从被创建到被销毁的整个过程。servlet其实也是一个对象,只不过不是由我们创建的,而是由tomcat帮我们创建的。

Servlet运行在Servlet容器(web服务器)中,其生命周期由容器来管理,分为4个阶段:
1.加载和实例化: 默认情况下,当Servlet第一次被访问时, 由容器创建Servlet对象。可以修改以下参数来修改创建的时机:

@WebServlet(value = "/demo1",loadOnStartup = 1)

默认是负整数(-1),也就是当第一次被访问的时候再创建
当为正整数或者是0的时候,就是在服务器启动的时候进行创建和加载,这样的话对于一些加载servlet比较耗时的情况时,能够在启动时就创建对象,节约用户的时间。
2.初始化: 在Servlet实例化之后,容器将调用Servlet的init()方法初始化这个对象,完成一些如加载配置文件、创建连接等初始化的工作。该方法只调用一次。
3.请求处理: 每次请求Servlet时,Servlet容器都会调用Servlet的service()方法对请求进行处理。
4.服务终止: 当需要释放内存或者容器关闭时,容器就会调用Servlet实例的destroy()方法完成资源的释放。在destroy()方法调用之后, 容器会释放这个Servlet实例,该实例随后会被Java的垃圾收集器所回收。

体系结构


我们一般会使用继承HttpServlet来创建我们的servlet类:

@WebServlet(value = "/demo2")
public class servletdemo2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        
    }

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

    }
}

其中有两个方法,第一个时doGet,是浏览器用Get方法来访问服务器时的响应操作
那么我们可以测试一下,我们浏览器在Url位置输入访问资源的时候用到的方法就是get方法,所以当我们启动服务,直接在浏览器中访问demo2时,会打印doGet中的语句:

而表单的提交方式是用的post,我们写一个简单的表单的html:

<form action="/demo1" method="post">
    <input type="text" >
    <input type="submit">
</form>

这个时候我们再去执行会发现打印的消息是this is doPost

urlPattern



posted @ 2023-03-13 23:04  男人的浪漫  阅读(25)  评论(0)    收藏  举报