Intellij IDEA 创建使用Maven管理的Web项目(包含Tomcat部署运行)的三种方式

版权声明:本文为博主原创文章,愿转就转吧~ https://blog.csdn.net/slx3320612540/article/details/83594333

Intellij IDEA 创建使用Maven管理的Web项目的三种方式

前言

曾经混过的,都需要偿还。

环境准备

IDE:Intellij IDEA 2018.2 64位专业版

Maven:3.5.4

Tomcat:9

JDK:10

概述

现在项目大多使用Maven管理,就我现在的理解,Maven是一个构建工具,可以管理项目模块之间的依赖关系,有了它,我们不需要到处寻找各种jar包,当所依赖的jar包需要更新时,不需要一个个去lib覆盖;Maven所涉及的知识和理念以及其强大之处必然不限于这些,有兴趣的伙伴可以自行深入了解~

这里我们将介绍使用Intellij IDEA创建Maven管理的Web项目(简单返回百度首页)的三种方式:

  1. Web+Maven
  2. Maven+Web
  3. Maven

第一种方法 Web+Maven

在这种方式里,我们将首先创建一个Web项目,然后向其添加Maven支持。具体步骤如下:

  1. 使用IDEA创建Web项目
    在这里插入图片描述

  2. 修改项目结构

    原来结构如下:
    在这里插入图片描述

    这里,首先将src目录取消源码根目录标记:

    在这里插入图片描述

    然后在src下创建main文件夹,并在其内创建java和resources文件夹,之后通过Mark Directory as 菜单项分别将其标记为Sources Root和Resources Root。于main同级,创建test目录,然后在其中创建java文件夹,将其标志为Test Sources Root。这个结构是Maven所要求的~

  3. 添加Maven支持

    与src同级,创建pom.xml文件(该文件内容其实是来自第二种方法里IDEA创建的pom.xml文件),然后点击右侧Maven Projects按钮,点击+添加Maven 支持:
    在这里插入图片描述

    选择我们创建的pom文件,最后结果如下:
    在这里插入图片描述
    在这里插入图片描述

  4. 配置Tomcat

    这里,为了让项目run起来,需要配置一下Tomcat,值得注意的是,因为我们首先创建的是一个Web Application,所以这里IDEA为我们做了一些事情(虽然,并没有什么用,至于为什么,请关注文末后记部分)
    在这里插入图片描述
    我们点击Tomcat旁边的倒三角,点击Edit Configurations,可以看到:
    在这里插入图片描述

    嗯,看一看就好,接下来我们进入Project Structure,结果如下:
    在这里插入图片描述
    可以发现,IDEA自己创建了一个Artifact,需要注意的是它的目录结构。这就使得run的时候,会发现run不起来。

  5. 修改Artifact

    我们这里把它删掉,点击-就行。然后我们自己创建一个。
    在这里插入图片描述

    最后结果如下:
    在这里插入图片描述
    这里需要注意的是它的结构。我知道需要这么做,是因为不这么做,就会发现run的时候会出错,而出错原因正是前者没有lib,所以找不到一些类。可以不修改,然后自己试一试(不保证一定会出现问题哦,bug这回事,谁说的准呢?)

  6. 编写pom.xml和Controller

    为了测试Maven的确管理了我们所以来的第三方包,我们编写一个Servlet,用以返回百度的首页,这里我们使用OkHttp3+Servlet 来实现,需要注意的是,IDEA不会自己引入Servlet相关包,所以我们需要添加对servlet的依赖。
    pom.xml如下:

    <?xml version="1.0" encoding="UTF-8"?>
     <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/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
     
     <groupId>xiaomo</groupId>
     <artifactId>aslx</artifactId>
     <version>1.0-SNAPSHOT</version>
     <packaging>war</packaging>
    
     <name>aslx Maven Webapp</name>
     <url>http://www.example.com</url>
    
     <properties>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <maven.compiler.source>1.7</maven.compiler.source>
         <maven.compiler.target>1.7</maven.compiler.target>
     </properties>
    
     <dependencies>
         <dependency>
           <groupId>junit</groupId>
           <artifactId>junit</artifactId>
           <version>4.11</version>
           <scope>test</scope>
         </dependency>
    
         <dependency>
             <groupId>com.squareup.okhttp3</groupId>
             <artifactId>okhttp</artifactId>
             <version>3.11.0</version>
         </dependency>
       <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
         <dependency>
             <groupId>javax.servlet</groupId>
             <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
             <scope>provided</scope>
         </dependency>
     </dependencies>
    
     <build>
       <finalName>aslx</finalName>
       <pluginManagement> 
         <plugins>
           <plugin>
             <artifactId>maven-clean-plugin</artifactId>
             <version>3.0.0</version>
          </plugin>
    
          <plugin>
             <artifactId>maven-resources-plugin</artifactId>
             <version>3.0.2</version>
           </plugin>
           
          <plugin>
             <artifactId>maven-compiler-plugin</artifactId>
             <version>3.7.0</version>
           </plugin>
           
           <plugin>
           <artifactId>maven-surefire-plugin</artifactId>
           <version>2.20.1</version>
         </plugin>
         
         <plugin>
           <artifactId>maven-war-plugin</artifactId>
           <version>3.2.0</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>
    
     package controllers;
     import okhttp3.Call;
     import okhttp3.OkHttpClient;
     import okhttp3.Request;
     import okhttp3.Response;
     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 BaiDuController extends HttpServlet {
     	@Override
     	protected void doGet(HttpServletRequest req, HttpServletResponse resp){
     		try {
     			OkHttpClient client = new OkHttpClient.Builder().build();
     			Request baiduHomeRequest = new Request.Builder()
     				.get()
     				.url("https://www.baidu.com/")
     				.build();
     			Call homeCall = client.newCall(baiduHomeRequest);
     			Response homeResponse = homeCall.execute();
     			String content = homeResponse.body().string();
     			PrintWriter writer = resp.getWriter();
     			writer.write(content);
            }catch (Exception e){
                e.printStackTrace();
            }
        }
        
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws   ServletException, IOException {
        	this.doGet(req, resp);
        }
        
        @Override
        protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        	this.doGet(req, resp);
        }
     }
    
  7. 最后结果如下:

    我们发现中文乱码,其实也很正常,我们没做关于字符集编码的设置,所以乱码了,关于乱码,可以看看这篇文章
    在这里插入图片描述
    至此,第一种方法工作正常~

第二种方法 Maven+Web

在这种方法里,我们将先创建一个Maven项目,然后添加Web模块;

  1. 使用IDEA创建Maven项目;
    在这里插入图片描述
    注意,不要勾选create from archetype选择框哦;

    然后,默认结构如下:

    在这里插入图片描述

    这里的结构,也就是我们在第一种方法里所模仿的结构;

  2. 添加Web模块;

    进入Project Structure,选择Modules,然后点击+号,选择Web:
    在这里插入图片描述

  3. 创建Artifact

    完成第二步时,你会看到如下图所示的界面:
    在这里插入图片描述
    按箭头操作即可;

  4. 选择默认,点击ok
    在这里插入图片描述
    这里,需要注意的是,如果你展开WEB-INF,会发现没有lib,而且是Web exploded哦!当然,这是我后来才意识到的,所以截图中没有显示;然后点击Apply。(后面我们再修改~);

  5. 添加Web结果如下
    在这里插入图片描述

  6. 配置Tomcat
    在这里插入图片描述
    进入,然后得到界面如下:
    在这里插入图片描述

    按箭头操作即可;然后会是这样的:
    在这里插入图片描述

    这是因为我们没有选择部署的Artifact(我们刚刚添加Web结构的时候,按照IDEA提示创建了一个Artifact),这里点击fix即可;然后,点击ok退出,把web.xml、pom.xml、Controller拷贝一下,这很重要哦,然后run,接着就会出错原因在第四步提到了

  7. 修改Artifact

    进入Project Structure,然后选择Artifact,将创建的Artifact删除,然后点击加号,新建一个。
    在这里插入图片描述
    结果如下:
    在这里插入图片描述
    这次,我们创建的是一个war exploded:它包含lib!而原来的Web exploded,好像再也找不到了。

  8. 修改Tomcat 配置
    在这里插入图片描述
    点击-,然后点击+,就会出现我们修改后的war。

  9. 这下可以run了。
    在这里插入图片描述
    嗯,还是熟悉的乱码

    值得注意的是,如果在修改Artifact的时候,controller没有到位的话,创建的WEB-INF下还是没有lib。这样就可以理解为什么IDEA创建了一个不能run的Artifact:创建Artifact的时候,java下是没有代码的,大胆猜测,如果先把Controller等文件写到相应位置,说不定就ok了。但我没去尝试哦;

第三种方法 Maven

在这种方法里,我们你将通过Maven+Archetype的方法创建Maven Web项目

  1. 使用Intellij IDEA创建项目
    在这里插入图片描述
    值得注意的地方都标出来了;哈哈哈,其实最重要的是把create from archetype 选择框选上~

  2. 默认结构
    在这里插入图片描述

  3. 模拟Maven项目结构,创建java、resources等文件夹,操作同第一种方法;
    在这里插入图片描述

  4. 填充Controller、web.xml、pom.xml等信息

  5. 配置Tomcat

    操作同第二种方法中的配置Tomcat,在deployment选项卡下,点击fix,此时会有两个选项,war和war exploded,我们选择war就好,值得注意的是,这两个Artifact是IDEA创建的在这里插入图片描述

  6. 然后run
    在这里插入图片描述

后记

从以上各种方法来看,第三种方法最统一,因为IDEA创建的Artifact是ok的,而第一二种方法里都涉及到对Artifact的修改,其核心问题是对WEB-INF下lib文件的处理,我们知道Web项目里依赖的第三方库都会在lib中去寻找,没有lib,自然会报找不到类的错误。

猜你喜欢

转载自blog.csdn.net/slx3320612540/article/details/83594333