一、环境介绍

    idea版本:  IntelliJ IDEA 2019.3.3 x64

    jdk版本:如果不知道自己装了什么版本,可以使用cmd窗口输入   java -version   命令就可以看到对应的版本号

                   java version "1.8.0_121"
                   Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
                   Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)

    是否联网:是   也可以在不联网的环境下使用,我这里联网主要使用了idea的工程创建功能,在工程创建中需要联网下载最新的 spring MVC 包;

    操作系统:Windows10 64位 

    tomcat版本:apache-tomcat-9.0.1-windows-x64  

    注:这里我简单说一下tomcat版本和java版本的关系,在查找关系的时候一定要看tomcat官网,现在网上的资料真的是~,【嗯嗯  不吐槽,专心写】,之前通过网上查看资料有博主说tomcat9支持jdk8之前的所有版本,但是我在建立工程的时候会报一些协议不匹配的问题,其实就是jdk版本和tomcat版本不匹配,高级版本的tomcat实现的协议本版也比较高,查看tomcat和jdk版本的关系的官网地址:http://tomcat.apache.org/whichversion.html对应关系内容如下,协议实现的具体解释还是去官网查看,  强烈推荐优先使用官网查资料,不然有些信息在你第一次获取的时候就是错的,这样很伤,有的问题非常难找。  

Servlet SpecJSP SpecEL SpecWebSocket SpecAuthentication (JASIC) SpecApache Tomcat VersionLatest Released VersionSupported Java Versions
5.03.04.02.02.010.0.x10.0.0-M4 (alpha)8 and later
4.02.33.01.11.19.0.x9.0.348 and later
3.12.33.01.11.18.5.x8.5.547 and later
3.12.33.01.1N/A8.0.x (superseded)8.0.53 (superseded)7 and later
3.02.22.21.1N/A7.0.x7.0.1036 and later
(7 and later for WebSocket)
2.52.12.1N/AN/A6.0.x (archived)6.0.53 (archived)5 and later
2.42.0N/AN/AN/A5.5.x (archived)5.5.36 (archived)1.4 and later
2.31.2N/AN/AN/A4.1.x (archived)4.1.40 (archived)1.3 and later
2.21.1N/AN/AN/A3.3.x (archived)3.3.2 (archived)1.1 and later

二、工程创建过程

        使用过程我尽量写的详细一点,以免漏掉坑没有说明白:

        使用idea,File—》new—》project,会出现如下界面:

        我选择使用idea自带的创建工具创建工程,这个自带的工具创建过程需要联网,从网上下载包,网络不好的情况下包可能会下载不成功,像上图中选择spring—》勾选spring MVC,点击下一步,给自己的工程起一个名字选择保存路径,我使用的名字是myfirstMVC;

    点击Finish就会出现从网上下载包,准备工程界面,我的网速还行,下载过程持续2分钟左右,如果不能联网或者下载失败的朋友,下篇我会介绍离线环境下建立工程。

工程建立完成之后,如下图,我这个是测试后的,可能会有点不一样,不过没关系:

在src下建立control包,在control下新建一个测试用的controler类,我的名字用IndexController内容如下:

package control;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Controller
public class IndexController {
    @RequestMapping("/index")
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception{
        ModelAndView model=new ModelAndView("index");
        model.addObject("message","这是第一个SpringMVC网页");
        return model;
    }
}

在WEB-INF目录下新建一个page目录,保存静态资源,在page目录下面新建一个jsp文件,命名为index.jsp,

jsp文件内容如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>SpringMVC</title>
</head>
<body>
<h1>测试</h1>
<h1>${message}</h1>
</body>
</html>

然后配置servlet,在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_4_0.xsd"
         version="4.0">
    <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>
    <listener>
        <listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>
    </listener>
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet>
        <description>JAX-WS endpoint</description>
        <display-name>WSServlet</display-name>
        <servlet-name>WSServlet</servlet-name>
        <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet>
        <!--        两个HelloMVC必须一样,随意自己取名-->
        <servlet-name>HelloMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>*.form</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>WSServlet</servlet-name>
        <url-pattern>/services/*</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>HelloMVC</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

上面的配置中增加了下面两个配置,这两个配置是成对的,

    <servlet>
        <!--        两个HelloMVC必须一样,随意自己取名-->
        <servlet-name>HelloMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>HelloMVC</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

然后再WEB-INF下建立一个HelloMVC-servlet.xml文件,对应servlet配置,

文件内容如下:

<?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="control"/>
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--    /WEB-INF/page/意为页面的路径,.jsp为页面格式-->
        <property name="prefix" value="/WEB-INF/page/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
</beans>

文件按写完了目录结构如下:

下面就是关键啦,开始调试、部署:

应该是先配置工程的project structure,这里我先不配,再下面我会介绍project structure常用项的功能

点下面的配置,进行调试运行相关配置:

再界面中点击左边的加号,新建一个tomcat:

然后在下面的界面中,配置运行环境

1先配置tomcat容器根目录

2配置端口号

3部署配置

第3步部署配置如下,context使用根目录就行:

好啦配置tomcat结束,咱们先启动看看,能不能起来。肯定是不行的啦,报错如下:

[2020-04-25 11:27:35,567] Artifact untitled:war exploded: Artifact is being deployed, please wait...
25-Apr-2020 11:27:36.715 严重 [RMI TCP Connection(3)-127.0.0.1] org.apache.catalina.core.StandardContext.startInternal One or more listeners failed to start. Full details will be found in the appropriate container log file
25-Apr-2020 11:27:36.721 严重 [RMI TCP Connection(3)-127.0.0.1] org.apache.catalina.core.StandardContext.startInternal Context [] startup failed due to previous errors
[2020-04-25 11:27:36,778] Artifact untitled:war exploded: Error during artifact deployment. See server log for details.
25-Apr-2020 11:27:45.300 信息 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [F:\apache-tomcat-9.0.1\webapps\manager]
25-Apr-2020 11:27:45.502 信息 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [F:\apache-tomcat-9.0.1\webapps\manager] has finished in [201] ms

基本意思已经很明显了,就是再部署的时候出现问题,外部容器没能找到你部署的东西,这个是怎么回事,简单来说就是spring MVC没有内置容器,需要借助外部容器才能运行起来,然而刚才咱们的配置并不能使外部容器也就是tomcat9找到对应的文件,或者类库,所以要通过部署配置让外部容器知道你的项目结构和内容,这个配置也就是idea的project structure配置下面我介绍下这个配置的配置方法和作用;

重点来啦:project structure配置

点击idea右上角的project structure

出现如下界面

上图的project功能标签如下:

1主要配置本机的jdk版本,

2主要配置和jdk对应的project language level

3是你的工程编译输出目录          这个和部署调试没有关系!!!!素所以无所谓,你自己找个目录就行了

module标签主要配置和组件相关的编译路径,一个工程可以有好多module,可以为不同的module配置编译数据路径

这个地方source使用默认配置就行,

path可以使用和主工程相同的目录,也可以为单个module配置输出路径

dependencies这个主要用于添加module的依赖项,在工程中一般会添加tomcat的lib目录,就是这个F:\apache-tomcat-9.0.1\lib目录,然后就是添加工程的其他依赖类包,这里我建议使用maven管理类包资源,这样非常方便,有兴趣的朋友可以在网上找找资源看一下,我这里应为是演示,所以就不配置了

下一项是libiaries这个也是添加外部依赖包用的

facets这个个可以配置工程的servlet配置文件

下一个就是和调试部署最相关的东西了artifacts

这个界面在最开始的时候可能是空的,点击+号,可以添加,这里我们使用Exploded中的From Modules,有的朋友可能没有From Modules  ,这个是因为在第二个界面中没有建立Modules,建完就好了

建立完成之后,我们看界面上,界面分为3个区

1就是工程部署目录

2是部署目录中包含哪些内容,

3是可以在部署目录中添加的依赖

1区工程部署目录,这个部署目录不一定是tomcat的webapps目录,也可以是自己的目录,在使用idea调试时这个也是可以的,我使用了工程默认的web目录

2区部署目录中包含的内容,这个很关键啊!!!!!!!!!一般的时候新建artifacts在WEB-INF下只有classes目录,这里我们需要建立一个lib文件夹,像上面那样,这个必须有,这个目录下面放的东西就是我们的外部依赖包

3区中部署的工程中可用依赖项,我们在2区选中lib,在这个区中双击,就可以将依赖包含到工程部署目录中。

配置完成图如下:

下面我们启动下看看。

好啦,可以访问和调试了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

输出信息正常:

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐