JavaWeb~创建一个maven项目使用HttpServlet在Tomcat服务器上实现一个动态页面

maven的简介

  • Apache Maven 是一种用于软件项目管理工具,基于 Project Object Model(POM),用来管理项目的构建,汇报及文档生成等功能。
  • 依赖管理 与maven仓库

maven 仓库是一个类似手机上的 App Store 的东西,上面会有全世界的人上传的各种第三方的 jar 包供我们使用,当我们的项目需要用到其中的内容,可以像手机安装 app 一样方便的进行查找和按照。

其中我们的项目用到了另一个项目,叫做依赖关系。而一个项目中往往需要很多的依赖,所以诞生了依赖管理的概念。

  • maven 的作用

maven 的目标是完成项目构建解决的一切繁琐事宜。我们具体关注它的以下功能:

  1. 提供一个标准的项目工程目录
  2. 提供项目描述
  3. 提供强大的版本管理工具
  4. 可以分阶段的进行构建过程
  5. 提供了丰富的插件库使用

使用IDEA创建一个maven项目

在这里插入图片描述

  • 然后一路finish知道出现如下页面表示创建成功
    在这里插入图片描述

main文件配置

在这里插入图片描述

  • Test用于测试代码 resources用于提供资源的文件 java写源代码

pom.xml文件配置

  • 倒入HttpServcet的jar包
    <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>
    </dependency>
  • 导入mysql包
    <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.49</version>
    </dependency>
  • 这是最后我们导出war包的配置
  <groupId>org.example</groupId>
  <artifactId>20200712</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>
  • 这是一些插件 第一行是导出war包的名字
<build>
    <finalName>listen</finalName>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>

写实现代码

  • 在main文件里创建java文件继承HttpServlet
  • 按请求报文方法重写doXX方法(不如请求是get方法 就重写doGet方法)
    在这里插入图片描述
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class HttpServletCal extends HttpServlet{

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取请求中的数据
        String aStr = req.getParameter("a");
        String bStr = req.getParameter("b");
        int ret = Integer.parseInt(aStr) + Integer.parseInt(bStr);
        //将结果写回到响应报文中
        resp.getWriter().write("<h1>ret=" + ret + "</h1>");
    }
}

配置web.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<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_3_1.xsd"
         version="3.1"
         metadata-complete="true">
  
  <servlet>
    <servlet-name>HttpServletCal</servlet-name>
    <servlet-class>HttpServletCal</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>HttpServletCal</servlet-name>
    <url-pattern>/cal</url-pattern>
  </servlet-mapping>

</web-app>

在这里插入图片描述
本质的目的就是在于将 Servlet的类与url关联起来 这样 后序tomcat收到HTTP请求后 发现url中带有的路径与web.xml路径相吻合 就会找到对应的Servlet的代码

生产war包

在这里插入图片描述

  • maven的生命周期

clean: 清空之前编译生成的临时文件
validate: 验证合法性
compile: 编译 自动地道用javac编译java文件为字节码文件
test: 此时单元 一般搭配junit完成
package: 打包
verify: 确认 也可以看做是一个校验的动作
install: 安装 把程序部署到一个本地目录中 提供其他程序使用
deploy: 部署到中央仓库
依赖管理时,可以指定一个依赖被用于哪个阶段,例如 junit 作为一种著名的单元测试框架,用于测试阶段,后面的阶段就不再需要了。
在这里插入图片描述
在这里插入图片描述
看着到这就说明打包成功

部署到Tomcat

  • 直接把war包拷贝到Tomcat的webapps目录中即可(一般Tomcat会自动检测到你的war包 除非他卡死)
    在这里插入图片描述
    出现这样说吗部署成功

Tomcat基本原理

在这里插入图片描述

  1. Tomcat启动/初始化
  1. 会创建一个Socket对象绑定端口号(一般是8080) 然后扫描webapps加载当前目录中的webapps(把每个webapp加载到内存中
  2. 这里主要是加载对应的web.xml文件)
  3. 创建一个单独的线程 监控webapps目录中的webapp的变化 如果有就会自动加载
  1. 处理过程
  1. 收到GET请求处理url得到想要的url 比如我的 /listen/cal
  2. 根据一级路径确认是webapp中的哪个目录
  3. 再根据二级路径/cal 找到对应的Servlet的类的名字
  4. 根据类的名字进行加载类 也就是反射机制得到该类
  5. 初次加载完毕 会调用该类的init方法 (如果已经加载了, 后序就不需要加载了)
  6. 调用该类的service方法 service方法会根据Http请求中的方法 决定调用对于的doXX 方法 (这也是我们需要重写doXX方法的原因)

测试

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Shangxingya/article/details/107295800