我使用IDEA开发的第一个简单SpringMVC

一、目录结构

二、导入jar包

大家可以看到位于WEB-INF下的lib包里什么都没有,是因为我是直接将jar包
导入到了modual中,所以你看到他们都跑到了External Libraries里了。具体的
做法如下图

在这里插入图片描述

在这里插入图片描述

三、web.xml

在这里面配置一个很重要的东西,它就是DispatcherServlet(简称:前端控制器)
代码如下

<?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">

    <servlet>
        <servlet-name>dispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:mvc-servlet.xml</param-value>
        </init-param>

    </servlet>

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

</web-app>

四、spring配置文件

(在这里我取的文件名叫mvc-servlet.xml,而且必须这样,具体原因看上面的代码),摘取如下

        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:mvc-servlet.xml</param-value>
        </init-param>

只有名字一致,才可能关联起来嘛,这个道理很容易懂,对吧

这个配置文件中,记住两个东西
第一个是组件扫描器,因为后面我们自己定义的类要想把它作为控制器,就需要使用到@Controller注解,而要想注解起作用,就必须配置组件扫描器,扫描类所在的包即可。
第二个是 InternalResourceViewResolver(内部资源视图解析器),它的作用就是将控制器类返回的结果(我们称为逻辑视图名)+ 前缀 + 后缀后组合成物理视图名。比如待会提到的我们自己定义的MyController控制类,它就返回一个字符串"hello", 就是一个逻辑视图名,InternalResourceViewResolver就把它处理为一个名叫 /hello.jsp 的物理视图,这个物理视图名前面只有一个 / 说明它的位置是在web项目路径下的,所以你再去看一眼目录结构,会更好理解,它的位置在web目录下,也就是web项目路径下。
具体的文件代码,如下

<?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="com.wang.springmvc.controller"/>


    <!--内部资源视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

</beans>

五、自定义控制器类

先看代码

package com.wang.springmvc.controller;


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

@Controller
public class MyController {

    @RequestMapping("/tallAndStrong")
    public String say(){

        System.out.println("执行say()方法...");
        return "hello";
    }
}

一个只有一个方法的简单类,但是由于加上了两个注解,就不一般了
第一个:@Controller
上面已经提到过它的作用了,再说的直白点,被它标记的类,就会成为DispatcherServlet的小跟班,DispatcherServlet就好比是包工头,包公头收到客户的任务需求,也就是收到客户端的请求,他就把这个任务需求匹配给相应的小跟班(MyController类)去做,MyController类有几个方法,就好比小跟班下面有几个打工仔,小跟班再把任务需求交给相应的打工仔,也就是将请求和方法进行匹配,怎么匹配的呢?就是根据下面的注解了

第二个:@RequestMapping
任务需求的人需要高大威猛的(/tallAndStrong),看看打工仔(say方法)的样子 ----->> @RequestMapping("/tallAndStrong"),刚好满足这样的条件,于是他就接到了这个任务需求,开始干活了,也就是执行了say方法。控制台打印出“执行say()方法…”,并且返回一个“hello”字符串

六、物理视图(hello.jsp)

之前我们说过了,控制器类返回的结果(“hello”),通过InternalResourceViewResolver(内部资源视图解析器)的前缀和后缀,组合成了一个名叫 /hello.jsp 的物理视图,位置web目录下,文件名hello.jsp。OK,去看我们的目录结构图,确实没错,代码如下

<%--
  Created by IntelliJ IDEA.
  User: wang
  Date: 2018/12/15
  Time: 16:44
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>hello标题</title>
</head>
<body>
    欢迎加入hello page....
</body>
</html>

七、运行tomcat

1.部署项目(关于tomcat安装和集成略过)
在这里插入图片描述

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

缺少DispatcherServlet类,这就奇怪了??
怎么可能呢,我们确实是导入了包含DispatcherServlet类的

在这里插入图片描述

哈哈,当初可是困惑我半天哦,绞尽脑汁,不得其解呀!
各种百度,果然还是有遇到相同问题的人,而且给出了解决方法,在此,特别感谢他!希望帮助更多的人,原文链接在此[https://www.cnblogs.com/chenloveslife/p/8973912.html]

那么根据那篇文章,原因就是tomcat运行需要的lib文件夹以及其中的jar包都没有而导致的。所以往下看解决办法。
在这里插入图片描述

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

最后,记得点击OK,重启tomcat,再去浏览器看效果吧

在这里插入图片描述

八、总结一下

1.jar包

缺少commons-logging-1.2.jar 或者 spring-expression-5.0.2.RELEASE.jar或者 javax.servlet-api-3.1.0.jar 都会引起tomcat报错。因此,最稳妥的做法就是把spring的jar包和commons-logging-1.2.jar以及javax.servlet-api-3.1.0.jar都导入进去。

2.IDEA tomcat部署

Project Structure --> Artifacts --> 选择Module --> Output Layout ,点击右下角的Fix按钮,选择第二项,确保Output Layout中的lib下都生成了这些jar,这样tomcat才能正常运行。

完成时间:2018.12.17 00:00:00 这可是熬夜呀,明天星期一还要上班呀!上天保佑不要迟到呀!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值