项目的环境配置maven和tomcat 以及servlet的使用

1 maven是 项目构建工具 (编译复制资源). idea通过maven的配置文件 pom.xml, 做项目的构建.
2 配置maven.
第一行 settings.xml 是Maven的全局配置文件
. 第二行 repository 文件是Maven的本地仓库,里边包含依赖包(jar).
项目的环境配置maven和tomcat 以及servlet的使用_第1张图片
3 maven 生命周期Lifecycle.
项目的环境配置maven和tomcat 以及servlet的使用_第2张图片
clean 删除 target目录. 运行项目会生成 target 目录.
compile 编译 开发 的代码, 复制到 target/classes.
test 编译 测试 代码, 复制到 target/test-classes.
package 项目打包. (打包的名称是 项目部署名). 会在 target 目录下生成项目的 jar 包(jar包通常是开发时要 引用的通用类). 如果在pom.xml中设置 packaging 为war,就会打成 war 包(war包是做好一个 web 应用后, 通常是网站, 打成war包部署到容器中).

deploy 部署 提交项目的打包文件到某个远程仓库.

3 Maven 项目标准结构:
main -> java (开发的 代码目录)
main -> resources (开发的 资源文件夹)

test -> java (测试的 代码目录)
test -> resources (测试的 资源文件夹)

项目的环境配置maven和tomcat 以及servlet的使用_第3张图片
tomcat运行前,idea会调用 maven 把 web 编译文件夹 全部构建好:
target -> blog (web 项目部署文件夹)
target -> blog -> classes (开发 的编译路径)
target -> test-classes (测试 的编译路径)
target -> sds (项目部署文件夹) 里面对应的是 webapp 下的文件.

项目的环境配置maven和tomcat 以及servlet的使用_第4张图片
4 Web 项目的标准结构: 相对Maven文件多了一个 webapp 文件夹 (web项目的资源文件夹), 里面有一个 web.xml (web项目的配置描述文件, 比如客户端请求路径等等).

配置 pom.xml 和 web.xml 文件.
(1) 配置 pom.xml 文件. 在创建好maven项目时会 自动生成一个 pom.xml 文件.
可以设置 GroupId: 组织名, 如果是个人名就使用个人名称(英文或拼音).
ArtifactId: 产品名, 一般和项目名写成一样. Version 版本号. 设置打包格式war包 (web项目需要打包为 war 文件).

    <groupId>frank</groupId>
    <artifactId>stu-dorm-sys</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!-- web项目需要配置为war,表示打包为war文件 -->
    <packaging>war</packaging>

然后 在 pom.xml 中设置 各种依赖包. 比如 MySQL数据库JDBC驱动包, servlet 依赖, jackson core 核心包 等等. 可以手动添加, 也可以在maven仓库 https://mvnrepository.com/ 中搜索并复制.

	<dependencies>
		<!-- MySQL数据库JDBC驱动包 -->
		<dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>

        <!-- servlet api -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
        
        <!-- Lombok: 自动插入编辑器并构建工具,以注解的方式,简化一些模版代码的编写,
                    如getter/setter方法、equals/hashcode方法、toString方法等-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.8</version>
            <scope>provided</scope>
        </dependency>

        <!-- JUnit: java的一种测试框架 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

		<!--JSON库, gson -->
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.2</version>
        </dependency>

		<!-- https://mvnrepository.com/artifact/javax.websocket/javax.websocket-api -->
		<!-- websocket api-->
        <dependency>
            <groupId>javax.websocket</groupId>
            <artifactId>javax.websocket-api</artifactId>
            <version>1.1</version>
            <scope>provided</scope>
        </dependency>
        <!-- jackson core: 基础核心包-->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.8.9</version>
        </dependency>

        <!--jackson databind: 数据绑定包,提供Java对象与JSON数据格式进行序列化
                   及反序列化的支持 -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.8.9</version>
        </dependency>

        <!-- jackson annotations: 为Jackson数据绑定包提供的注解支持 -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.9.0</version>
        </dependency>
	</dependencies>

最后 在 pom.xml 中设置 jdk 版本号 和 编码格式. 以及 项目部署名 finalName(如果没有配置就 默认为上面的项目名).

    <build>
        <!-- 打包后的包名(和我们部署的项目名一致) -->
        <finalName>sds</finalName>
        <plugins>
            <plugin>
                <!--指定 jdk的版本 -->
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>

(2) 生成 webapp 文件夹 步骤: open module settings -> module -> 项目名下的web文件 -> 双击文件复制全部 -> 右上角+号 -> 复制到\WEB-INF\web.xml 前面 -> 确定.
webapp -> web项目的 资源文件夹.
web.xml -> web项目的 配置描述文件.
项目的环境配置maven和tomcat 以及servlet的使用_第5张图片
项目的环境配置maven和tomcat 以及servlet的使用_第6张图片
此时 http://localhost:8081/blogg 项目会加载到 webapp 文件夹下面. 可以访问该文件夹下面的资源.

我们之前是使用 servlet访问, 使用 @WebServlet("/articleList") 这个注解, 通过 /articleList 找到 ArticleListServlet 这个类, 然后服务器进行处理. (相当于在 web.xml 中配置了 url 的路径和类的关联关系, JS(网页) 要通过这里 描述的路径和服务器建立连接).
当使用websocket 访问时, 就要使用 @ServerEndpoint 注解.

在这里插入图片描述
配置 web.xml 文件.
现在我们直接在 web.xml 中配置 servlet 映射.
(1) 先通过 servlet-mapping 中的路径 url-pattern 找到 /articleList.
(2) 然后找到 servlet-mapping 中的 servlet-name 中的 articleList.
(3) 然后通过 name 找到 servlet-class 里面的 dk.servlet.ArticleListServlet.
它们是一层一层的映射关系.

    <servlet>
        <servlet-name>articleList</servlet-name>
        <servlet-class>dk.servlet.ArticleListServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>articleList</servlet-name>
        <url-pattern>/articleList</url-pattern>
    </servlet-mapping>

dk.servlet.ArticleListServlet 的意思:
项目的环境配置maven和tomcat 以及servlet的使用_第7张图片
也可以映射首页路径为 指定的路径. 此时访问 http://localhost:8081/blogg/ 就会 跳转到 指定的首页.

  <welcome-file-list>
        <welcome-file>jsp/articleList.jsp</welcome-file>
  </welcome-file-list>

5 部署项目到 Tomcat服务器上. 部署方式有两种:
一是 命令启动(也适用于 Linux环境 部署项目), 通过package命令 打包 文件, 然后丢到 tomcat webapps 下面运行. 会自动加载 webapps 下的所有项目. 要在网址输入资源路径, 不能在文件夹里面 直接请求资源. 此时的请求路径就是 localhost: 8080 / maven-test / index.html, 请求的是index.html 静态资源.
项目的环境配置maven和tomcat 以及servlet的使用_第8张图片

二是 不打包, 指定某个 idea 本地依赖文件. 在 IDEA 中我们一般使用第二种:
项目的环境配置maven和tomcat 以及servlet的使用_第9张图片
(1) 先新建一个tomcat.
Run -> Edit Configration -> 左上角+号 -> tomcat Server -> local.

(2) 配置依赖.
deployment -> 点击右上角+号 -> 添加 项目名: war exploded 作为依赖.

(3) 配置 资源请求路径 (客户端请求资源时的路径).
Application context -> 一般和 项目部署名 (也就是 finalName 中设置的名字) 设置成一样的.
我们就以 http://localhost: 8081/sds/ 作为请求资源时的开始路径.

(4) 配置 tomcat服务器名字, VM options等等.
项目的环境配置maven和tomcat 以及servlet的使用_第10张图片
(5) 我们也可以在 依赖中找到 项目部署的全路径.
项目的环境配置maven和tomcat 以及servlet的使用_第11张图片
6 Servlet 和 Tomcat关系:
Servlet 是用来处理 Http客户端请求 并产生动态网页内容的Java类.
Tomcat 实现了它. 是用来部署 web项目的 web服务器, 内部实现了一个Http服务器.

7 Servlet的生命周期: 初始化, 服务, 销毁.
(1) init(). 在第一次创建Servlet时被调用, 在Servlet生命周期, 仅执行一次, 负责初始化Servlet对象.
(2) service(). 每当请求一个 HttpServlet对象的时候, 该对象的 Service()方法就要调用, 一般只重写 doPost/doGet类似的方法.
(3) destroy(). 仅执行一次, 在服务端停止且卸载Servlet的时候执行该方法, 当Servlet对象退出生命周期的时候, 负责释放占用的资源;

9 Servlet和Tomcat是怎么工作的?
(1) 客户端向 Servlet容器(Tomcat) 发出Http请求.
(2) Tomcat接收客户端的请求, 创建一个 HttpRequest对象, 将 客户端请求的信息封装到这个对象里, 同时创建一个 HttpResponse对象.
(3) Tomcat调用 HttpServlet对象的 service方法, 把HttpRequest对象和HttpResponse对象 传给HttpServlet对象.
(4) HttpServlet调用HttpRequest对象的方法, 获取Http请求信息.
(5) HttpServlet调用HttpRequest对象的方法, 生成响应数据.
(6)Tomcat 把HttpServlet的响应结果 传给客户端.

10 Servlet 对象工作在多线程环境下, 需要考虑线程安全问题.

11 请求资源时, 如果找不到资源就检查请求路径(端口号之后以 Application context开始的路径)是否正确. 请求时 Application context 会定位到 webapp 目录下面, 然后开始找资源文件.
项目的环境配置maven和tomcat 以及servlet的使用_第12张图片

你可能感兴趣的:(项目的环境配置maven和tomcat 以及servlet的使用)