0%

3.第一个SpringMVC程序

3.第一个SpringMVC程序

  1. 新建普通maven项目,删除src目录,使之成为父项目

  2. 添加pom依赖

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    <!-- https://mvnrepository.com/artifact/junit/junit -->
    <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.1.5.RELEASE</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/javax.servlet/servlet-api -->
    <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.5</version>
    <scope>provided</scope>
    </dependency>
    <dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>jsp-api</artifactId>
    <version>2.2</version>
    <scope>provided</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
    <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
    </dependency>
    <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.5</version>
    </dependency>
    <dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>jsp-api</artifactId>
    <version>2.2</version>
    </dependency>
  3. 新建普通model,然后添加web支持(Add framework support)

  4. 由于Maven可能存在资源过滤的问题,我们将配置完善(父工程pom)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <build>
    <resources>
    <resource>
    <directory>src/main/java</directory>
    <includes>
    <include>**/*.properties</include>
    <include>**/*.xml</include>
    </includes>
    <filtering>false</filtering>
    </resource>
    <resource>
    <directory>src/main/resources</directory>
    <includes>
    <include>**/*.properties</include>
    <include>**/*.xml</include>
    </includes>
    <filtering>false</filtering>
    </resource>
    </resources>
    </build>
  5. 配置web.xml

    注意点:

    1. 注意web.xml版本问题,要最新版!(因为我们手动添加的web支持,默认就是最新版4.0)

    2. 注册DispatcherServlet

    3. 关联SpringMVC的配置文件

    4. 启动级别为1

    5. 映射路径为 / 【不要用/*,会404】

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      <?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">

      <!--1.注册servlet-->
      <servlet>
      <servlet-name>SpringMVC</servlet-name>
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
      <!--通过初始化参数指定SpringMVC配置文件的位置,进行关联-->
      <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc-servlet.xml</param-value>
      </init-param>
      <!-- 启动顺序,数字越小,启动越早 -->
      <load-on-startup>1</load-on-startup>
      </servlet>

      <!--所有请求都会被springmvc拦截 -->
      <servlet-mapping>
      <servlet-name>SpringMVC</servlet-name>
      <url-pattern>/</url-pattern>
      </servlet-mapping>

      </web-app>
    6. 添加SpringMVC配置文件

      • IOC的注解生效
      • 静态资源过滤 :HTML . JS . CSS . 图片 , 视频 …..
      • MVC的注解驱动
      • 配置视图解析器

      在resource目录下添加springmvc-servlet.xml配置文件,配置的形式与Spring容器配置基本类似,为了支持基于注解的IOC,设置了自动扫描包的功能,具体配置信息如下:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      <?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
      https://www.springframework.org/schema/context/spring-context.xsd
      http://www.springframework.org/schema/mvc
      https://www.springframework.org/schema/mvc/spring-mvc.xsd">

      <!-- 自动扫描包,让指定包下的注解生效,由IOC容器统一管理 -->
      <context:component-scan base-package="com.lwj.controller"/>
      <!-- 让Spring MVC不处理静态资源 .css .js .html .jpg-->
      <mvc:default-servlet-handler />
      <!--
      支持mvc注解驱动
      在spring中一般采用@RequestMapping注解来完成映射关系
      要想使@RequestMapping注解生效
      必须向上下文中注册DefaultAnnotationHandlerMapping
      和一个AnnotationMethodHandlerAdapter实例
      这两个实例分别在类级别和方法级别处理。
      而annotation-driven配置帮助我们自动完成上述两个实例的注入。
      -->
      <mvc:annotation-driven />

      <!-- 视图解析器 -->
      <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
      id="internalResourceViewResolver">
      <!-- 前缀 -->
      <property name="prefix" value="/WEB-INF/jsp/" />
      <!-- 后缀 -->
      <property name="suffix" value=".jsp" />
      </bean>

      </beans>

      在视图解析器中我们把所有的视图都存放在/WEB-INF/目录下,这样可以保证视图安全,因为这个目录下的文件,客户端不能直接访问。

    7. 创建controller

      编写一个Java控制类: com.lwj.controller.HelloController , 注意编码规范

      1
      2
      3
      4
      5
      6
      7
      8
      9
      @Controller
      public class HelloController {
      @RequestMapping("h1")
      public String hello(Model model){
      //封装数据
      model.addAttribute("msg","hello world!");
      return "hello";//会被视图解析器处理
      }
      }
      • @Controller是为了让Spring IOC容器初始化时自动扫描到;
      • @RequestMapping是为了映射请求路径,所以访问时应该是h1;
      • 方法中声明Model类型的参数是为了把Action中的数据带到视图中;
      • 方法返回的结果是视图的名称hello,加上配置文件中的前后缀变成WEB-INF/jsp/hello.jsp。
    8. 创建视图层

      在WEB-INF/ jsp目录中创建hello.jsp , 视图可以直接取出并展示从Controller带回的信息;

      可以通过EL表示取出Model中存放的值,或者对象;

      1
      2
      3
      4
      5
      6
      7
      8
      9
      <%@ page contentType="text/html;charset=UTF-8" language="java" %>
      <html>
      <head>
      <title>SpringMVC</title>
      </head>
      <body>
      ${msg}
      </body>
      </html>
    9. 配置tomcat运行

      • 添加artifact

        选择好模块,确认

      • 添加lib依赖,否则会404

        web-inf目录下新建lib文件夹

        添加所有的lib依赖,确认

        启动tomcat,访问controller

### 小结

实现步骤其实非常的简单:

1. 新建一个web项目
2. 导入相关jar包
3. 编写web.xml , 注册DispatcherServlet
4. 编写springmvc配置文件
5. 接下来就是去创建对应的控制类 , controller
6. 最后完善前端视图和controller之间的对应
7. 测试运行调试.

使用springMVC必须配置的三大件:

**处理器映射器、处理器适配器、视图解析器**

通常,我们只需要**手动配置视图解析器**,而**处理器映射器**和**处理器适配器**只需要开启**注解驱动**即可,而省去了大段的xml配置