【从无到有】IDEA + maven + java web + springMVC + Tomcat 项目搭建

【本文适用读者】

1、不必太熟悉 IDEA 开发环境,用过或见过那么几次就行。(我们看图说话)

2、完全没有使用过 maven。

3、对 java web 有一定的了解。(知道 jsp、用 java 写后台就可以了)

4、完全没有接触过 springMVC。(建议还是应该先了解一下)

5、了解 Tomcat 的环境配置、启动等,如“service.bat install”、“net start tomcat9”、“startup.bat”。(其实不了解也没事)

6、喜欢看图者。(基本上每一步都有图)

7、最好懂点英文,如果一点也不懂也没关系。(我们看图说话)

【本文说明】

1、本文并不对 maven、java web、springMVC 做过多解释,更多知识请直接学习相关知识。

2、本文内容过多,可以选择跳读,但有可能导致上下文衔接不上,逻辑混乱看不懂。

3、同样由于本文内容过多,如有错误(包括但不限于错别字、行号、排版、图片等)欢迎在评论区指正,但是如果我的图片内容位置和你的不一样,说明我这篇文章过时了,IDEA 或 spring 更新了,这怪不着我。

4、本文于2018年12月26日首发表于CSDN博客,如后续有修改将补充在此处。

【本文参考文章】

IDEA用maven创建springMVC项目和配置(XML配置和Java配置)(修正版)

该文由 苍穹之跃 著于 2017年11月17日 17:03:05。因其文章代码段排版不够清晰,介绍不清晰,且有一些错误,遂发表本文。

【本文涉及软件】

1、Windows 操作系统

2、IntelliJ IDEA 

3、JDK(Java Development Kit)

4、Tomcat

【IDEA 版本】

IntelliJ IDEA 2018.3.2 (Ultimate Edition)
Build #IU-183.4886.37, built on December 17, 2018
Licensed to Rover12421 / Rover12421
Subscription is active until January 1, 2100
JRE: 1.8.0_152-release-1343-b26 amd64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
Windows 10 10.0

【JDK 版本】

【Tomcat 版本】

【目录】

1、构建 maven 项目

2、配置 Tomcat

3、导入 springMVC

4、配置 springMVC 之 xml 配置

5、配置 springMVC 之 java 配置

6、示例

【构建 maven 项目】

1、打开 IDEA,新建项目,点击 “Create New Project”。

2、左侧选择 Maven,右侧勾选“Create from archetype”,在下方找到并选择“org.apache.maven.archetypes:maven-archetype-webapp”,点击 Next。

3、GroupId 类似于包名,公司地址等,可以随意填写,ArtifactId 最好和你的项目一名一样,Version 默认即可。

4、为了快一点创建,我们需要在这个页面添加一个属性值,点击图中所指处的“加号”。

5、Name 输入 archetypeCatalog,Value 输入 internal。

6、添加上之后如图所示,不要着急点击 Next。


7、因为 maven 的官方仓库在国外,用 maven 下载依赖包时会很慢,因此我们使用阿里镜像。打开上图中“User setting file”指向的路径下的“settings.xml”文件。

8、在第146行有一个 <mirrors> 标签(如果没有则可能是因为版本不同,导致行号有变,请自行查找其位置)。在 <mirrors> 标签中加入代码块:

    <mirror>
      <id>alimaven</id>
      <mirrorOf>central</mirrorOf>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
    </mirror>

9、回到 IDEA 中,点击Next。在这个页面可以修改 Project location、Content root、Module file location,如果你不了解他们的区别和作用,填写同一个路径即可,一般大项目中,Project 里有 很多 Module 的情况下才可能会有需求修改这些路径,小项目一般一个 Module 就够了。

10、如果选择的文件夹不存在,会给你提示,点击 OK 即可。

11、等待 IDEA 构建完毕项目,在右下角有一个提示,点击右边的选项“Enable Auto-Import”即可。

【配置 Tomcat】

1、首先,看一下目录结构,IDEA 默认构建的目录结构和文件如图所示。

2、我们手动创建一些文件夹,分别是

src/test

src/main/java

src/main/resources

src/main/webapp/WEB-INF/WebContent(为 SpringMVC 做准备)

文件夹名字不重要,能看懂就行。

3、检查 IDEA 是否自动识别了 Tomcat。按 Ctrl + Alt + S 打开 Settings(在菜单栏 File 中也可以找到打开),找到 Build, Execution, Deployment 里面的 Application Servers,看其右侧是否有配置 Tomcat ,路径是否正确,如果没有则参考第 4 - 5 步。如果有自动配置 Tomcat 则关闭 setting ,然后直接跳到第 6 步。

4、点击如图所示的“加号”,然后点击“Tomcat Server”。

5、如果没有自动识别路径,则手动选择路径,点击 OK 后即可添加上,然后点击 Apply、OK来关闭 setting。

6、点击右上角的 Add Configuration。

7、点击左上角的“加号”,选择“Tomcat Server”里面的“Local”。

8、可以给其换个名字,也可以不换。Open browser 一栏中,如果勾选 After launch 则在 IDEA 启动 Tomcat 后自动打开浏览器,打开的浏览器是右侧的浏览器,可以选择更换,URL一项就是访问的网址,将其在后面加上 Test,跟第10步相对应。

9、点击第二个标签“Deployment”,会发现里面是空的,我们需要添加一个,于是点击右边的“加号”,然后点击“Artifact”。

10、弹出窗口选择下面那个“Test:war exploded”。

11、修改下面的“Application context”为“/Test”与第8步相对应,然后点击右侧的那个“笔”

12、弹出窗口,我们先不急着修改,首先要知道这个窗口叫做“Project Structure”,在菜单栏 File 中可以找到打开。

13、点击左上角“Project”,然后在右侧可以修改 Project name(项目名)、Project compiler output(项目编译输出路径),默认即可,或根据实际情况(个人爱好)修改路径,不过默认就好。

14、点击左上角“Modules”,选择“Test”(注意,不是选择“Test”里面的“Web”),然后对右面文件夹进行标记。

15、将 java 文件夹标记为 Sources,resources 文件夹标记为 Resources,test 文件夹标记为 Tests。

16、点击“Web”,可以对 Web 资源的根目录进行编辑,不过默认就好。

17、点击左侧 Artifacts,选择 Test:war exploded,可以修改右侧的 Output directory,就是项目发布的位置,可以根据个人需求修改为 Tomcat 的路径,如“D:\Program Files\apache-tomcat-9.0.12\webapps\Test”或“D:\Program Files\apache-tomcat-9.0.12\wtpwebapps\Test”等,如果没有需求默认即可。下面红框圈起来的的部分默认就好,可以根据个人需求修改,其中的<output root>就是上面的 Output directory,下面的内容就是在 Output directory 中的内容、布局。

 

18、回到添加 Tomcat 配置界面,可以修改下面的“Application context”,这个是发布后访问的网址相关,修改这个会自动同步修改Server菜单里的启动后访问网址。点击  Apply、OK 关闭页面即可。

19、点击 OK 关闭上一步的页面后,IDEA在下方会自动弹出 Application Servers,点击其左侧第一个按钮启动 Tomcat。

20、控制台提示连接到服务了,Artifact deploy 成功,用时 568 毫秒。(为排版美观,图片就这么宽,请见谅,把控制台信息Copy 过来了,有需要的就看看)

Connected to server
[2018-12-27 10:42:37,296] Artifact Test:war exploded: Artifact is being deployed, please wait...
[2018-12-27 10:42:37,864] Artifact Test:war exploded: Artifact is deployed successfully
[2018-12-27 10:42:37,865] Artifact Test:war exploded: Deploy took 568 milliseconds

25、如果在第 8 步配置过启动 Tomcat 后打开浏览器,则现在已经自动弹出了浏览器并打开了第 8 步的 URL。否则需要手动打开浏览器,输入网址 URL。

【导入 springMVC】

1、打开这个 pom.xml 文件

2、找到 <dependencies> 标签

3、在 <dependencies> 标签中增加 <dependency> 标签,具体代码如下:

        <!-- jstl -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.3.3</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <!--springframework-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>5.1.3.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.1.3.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.1.3.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.1.3.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.3</version>
        </dependency>

4、关于版本号,个人习惯用最新的,查询最新版本号的方式有很多,我就不列举了。

5、添加框架支持:右键单击我们的项目文件夹 Test,点击“Add Framework Support...”。

6、勾选 Spring MVC,点击 OK 关闭页面。如果你的“Add Framework Support”并没有 Spring,不要慌,请看第 7 - 8 步。如果成功勾选上 Spring,请直接看第 9 步。

7、如果你的“Add Framework Support”是如下图所示,并没有 Spring MVC,不要慌,先关了它。

8、打开 Project Structure,点击左侧 Modules,选择 Spring,点击上面的“减号”,点击 Apply、OK 关闭页面,回到第6步。

9、成功添加框架支持后,会发现多出现了两个文件,“applicationContext.xml”和“dispatcher-servlet”。

【配置 springMVC 之 xml 配置】

1、打开 web.xml 文件。

2、由于 IDEA 用 maven 创建的 web.xml 文件版本比较低,可以先重新创建一个 Project,选择 Java Enterprise 里面的 Web Application,然后将其中的 web.xml 中的内容复制过来。

3、然后根据下面的代码对应补全。(主要就是创建一个中央的控制器,想了解各参数意义,请学习 SpringMVC 相关课程,代码中注释取自本文参考文章)

<?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_4_0.xsd"
         version="4.0">
    <display-name>Archetype Created Web Application</display-name>

    <!--welcome pages-->
    <welcome-file-list>
        <welcome-file>index</welcome-file>
    </welcome-file-list>

    <!--把applicationContext.xml加入到配置文件中-->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/applicationContext.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <!--配置springmvc DispatcherServlet-->
    <servlet>
        <servlet-name>springMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <!--配置dispatcher.xml作为mvc的配置文件-->
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/dispatcher-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
        <async-supported>true</async-supported>
    </servlet>
    <servlet-mapping>
        <servlet-name>springMVC</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

4、打开并编辑“dispatcher-servlet.xml”文件,记住下面代码中的最后一行的“base-package”的值,后面会用到。(想了解各参数意义,请学习 SpringMVC 相关课程,代码中注释取自本文参考文章)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!--启用spring的一些annotation -->
    <context:annotation-config/>

    <!-- 配置注解驱动 可以将request参数与绑定到controller参数上 -->
    <mvc:annotation-driven/>

    <!--静态资源映射-->
    <!--本项目把静态资源放在了webapp的WebContent目录下,资源映射如下-->
    <mvc:resources mapping="/css/**" location="/WEB-INF/WebContent/css/"/>
    <mvc:resources mapping="/js/**" location="/WEB-INF/WebContent/js/"/>
    <mvc:resources mapping="/images/**" location="/WEB-INF/WebContent/images/"/>

    <!-- 对模型视图名称的解析,即在模型视图名称添加前后缀(如果最后一个还是表示文件夹,则最后的斜杠不要漏了) 使用JSP-->
    <!-- 默认的视图解析器 在上边的解析错误时使用 (默认使用html)- -->
    <bean id="defaultViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
        <property name="prefix" value="/WEB-INF/WebContent/"/><!--设置JSP文件的目录位置-->
        <property name="suffix" value=".jsp"/>
        <property name="exposeContextBeansAsAttributes" value="true"/>
    </bean>

    <!-- 自动扫描装配 -->
    <context:component-scan base-package="com.example.controller"/>
</beans>

5、打开并编辑“applicationContext.xml”文件,主要就是增加了一行代码

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">
    <context:component-scan base-package="cn.example"/>
</beans>

【配置 springMVC 之 java 配置】

1、在 java 文件夹中新建一个包“cn.example.config”。

2、在 config 中新建三个文件。

(1)WebXml.java,代替 web.xml。

(2)DispatcherServletXml.java,代替 dispatcher-servle.xml。

(3)ApplicationContextXml.java,代替 applicationContext.xml。

3、编辑 WebXml.java 文件。(代码中注释的目的是说明该方法替换了哪些 xml 标签,内容取自本文参考文章)

package cn.example.config;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class WebXml extends AbstractAnnotationConfigDispatcherServletInitializer {
    /*
        <!--把applicationContext.xml加入到配置文件中-->
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/applicationContext.xml</param-value>
        </context-param>
        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>
      */
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class<?>[] {ApplicationContextXml.class};
    }

    /*
        <!--配置springmvc DispatcherServlet-->
        <servlet>
            <servlet-name>springMVC</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <init-param>
                <!--配置dispatcher.xml作为mvc的配置文件-->
                <param-name>contextConfigLocation</param-name>
                <param-value>/WEB-INF/dispatcher-servlet.xml</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
            <async-supported>true</async-supported>
        </servlet>
     */
    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class<?>[] {DispatcherServletXml.class};
    }

    /*
        <servlet-mapping>
            <servlet-name>springMVC</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>
     */
    @Override
    protected String[] getServletMappings() {
        return new String[] {"/"};
    }
}

4、编辑 DispatcherServletXml.java 文件。(代码中注释的目的是说明该方法替换了哪些 xml 标签,内容取自本文参考文章)

package cn.example.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.*;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

@Configuration
@EnableWebMvc
/*
    <!-- 自动扫描装配 -->
    <context:component-scan base-package="cn.example.controller"/>
*/
@ComponentScan("cn.example.controller")
public class DispatcherServletXml implements WebMvcConfigurer {
    /*
        <!-- 对模型视图名称的解析,即在模型视图名称添加前后缀(如果最后一个还是表示文件夹,则最后的斜杠不要漏了) 使用JSP-->
        <!-- 默认的视图解析器 在上边的解析错误时使用 (默认使用html)- -->
        <bean id="defaultViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
            <property name="prefix" value="/WEB-INF/WebContent/"/><!--设置JSP文件的目录位置-->
            <property name="suffix" value=".jsp"/>
            <property name="exposeContextBeansAsAttributes" value="true"/>
        </bean>
     */
    @Bean
    public ViewResolver viewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setViewClass(org.springframework.web.servlet.view.JstlView.class);
        resolver.setPrefix("/WEB-INF/WebContent/");
        resolver.setSuffix(".jsp");
        resolver.setExposeContextBeansAsAttributes(true);
        return resolver;
    }

    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

    // 静态资源配置
    /*
        <mvc:resources mapping="css/**" location="/WEB-INF/WebContent/css/"/>
        <mvc:resources mapping="/js/**" location="/WEB-INF/WebContent/js/"/>
        <mvc:resources mapping="/images/**" location="/WEB-INF/WebContent/images/"/>
     */
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/css/**").addResourceLocations("/WEB-INF/WebContent/css/");
        registry.addResourceHandler("/js/**").addResourceLocations("/WEB-INF/WebContent/js/");
        registry.addResourceHandler("/images/**").addResourceLocations("/WEB-INF/WebContent/images/");
    }
}

5、编辑 ApplicationContextXml.java 文件。(代码中注释的目的是说明该方法替换了哪些 xml 标签)

package cn.example.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;

@Configuration
/*
    <context:component-scan base-package="cn.example"/>
*/
@ComponentScan(basePackages = {"cn.example"},
        excludeFilters = {
                @ComponentScan.Filter(type = FilterType.ANNOTATION, value = EnableWebMvc.class)
        })
public class ApplicationContextXml {
}

【示例】

1、在 java 文件夹中新建 Package。

2、输入“cn.example.controller”。

3、在“cn.example.controller”中新建一个 Java Class文件,文件名随意取,但最好有点标志,如“IndexController”。

4、编辑“IndexController.java”,代码如下。其中有两个方法,方法名不重要,重要的是注解中的value,代表访问的网址,return 的值则是在“WebContent/WEB-INF/WebContent/”文件夹中,加上“.jsp”后缀找到的文件(“dispatcher-servlet.xml”文件中 id="defaultViewResolver" 的 bean 中配置的)。注解中的 method 可以根据需求修改,这里可以删掉。

package cn.example.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class IndexController {

    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String index() {
        return "index";
    }

    @RequestMapping(value = "/index", method = RequestMethod.GET)
    public String indexPage() {
        return "index";
    }
}

5、我们在 WebContent 文件夹中根据需要新建几个文件夹 css、js、images,再新建一个 jsp 文件,取名“index.jsp”。在 css 文件夹中新建一个 css 文件“index.css”。

6、编辑 index.css 文件。

p{
    font-size: 100px;
    color: red;
}

7、编辑 index.jsp 文件,其中 href 中用的是 jstl 标签,因此需要在顶部加入 taglib 标签引入 jstl。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <title>Title</title>
    <link rel="stylesheet" type="text/css" href="<c:url value='/css/index.css'/>" />
</head>
<body>
<p>Hello World</p>
</body>
</html>

经测试,这么写也完全 OK。

<link rel="stylesheet" type="text/css" href="css/index.css" />

8、启动 Tomcat。

9、运行成功。

【注意事项】

1、我们新建 maven 项目时直接在 webapp 文件夹中创建了一个 index.jsp,当我们在 webapp/WEB-INF/WebContent 中创建index.jsp 时,记得把它自动创建的 index.jsp 删去。(按道理说,不删的话也不会有事,但是实际运行中却加载到了那个自动创建的 index.jsp 页面中,不明觉厉)

2、在从 xml 切换到 Java Config 的过程中,记得打开 Project Structure,将 Module 中的 Spring 的 xml 配置删去。并且在项目路径中,将对应的 xml 文件删去(反正不能在WEB-INF里面了,不然会报"check whether you have multiple ContextLoader* definitions in your web.xml"错误)

  • 23
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值