Spring MVC入门的实例

   作为Spring MVC入门,以XML配置的方式为例。首先需要配置Web工程的web.xml文件。
  代码清单14-1:web.xml配置Spring MVC
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" 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_3_1.xsd">

    <!-- 配置Spring IoC配置文件路径 -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/applicationContext.xml</param-value>
    </context-param>

    <!-- 配置ContextLoaderListener用以初始化Spring IoC容器 -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <!-- 配置DispatcherServlet -->
    <servlet>
        <!-- 注意:Spring MVC 框架会根据 servlet-name 配置,找到/WEB-INF/dispatcher-servlet.xml作为配置文件载入Web工程中 -->
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!-- 使得Dispatcher在服务器启动的时候就初始化 -->
        <load-on-startup>2</load-on-startup>
    </servlet>

    <!-- Servlet拦截配置 -->
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>

</web-app>
  •系统变量contextConfigLocation的配置,它会告诉SpringMVC其Spring IoC的配置文件在哪里,这样Spring就会找到这些配置文件去加载它们。如果是多个配置文件,可以使用逗号将它们分隔开来,并且它还能支持正则式匹配,进行模糊匹配,这样就更加灵活了,其默认值为/WEB-INF/applicationContext.xml。
  •ContextLoaderListener实现了接口ServletContextLis-tener,通过Java Web容器的学习,我们知道ServletContextListener的作用是可以在整个Web工程前后加入自定义代码,所以可以在Web工程初始化之前,它先完成对Spring IoC容器的初始化,也可以在Web工程关闭之时完成Spring IoC容器的资源进行释放。
  •配置DispatcherServlet,首先是配置了servlet-name为dispatcher,这就意味着需要一个/WEB-INF/dispatcher-servlet.xml文件(注意,servlet-name和文件名的对应关系)与之对应,并且我们配置了在服务器启动期间就初始化它。
  •配置DispatcherServlet拦截以后缀“do”结束的请求,这样所有以后缀“do”结尾的请求都会被它拦截。

  在最简单的入门例子中暂时不配置applicationContext.xml的任何内容,所以其代码也是空的,如代码清单14-2所示。
  代码清单14-2: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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans         
       http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">

</beans>
  代码清单14-3:Spring MVC配置文件dispatcher-servlet.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:p="http://www.springframework.org/schema/p"
       xmlns:tx="http://www.springframework.org/schema/tx" 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-4.0.xsd
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
       http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">

    <!-- 使用注解驱动 -->
    <mvc:annotation-driven/>
    <!-- 定义扫描装载的包 -->
    <context:component-scan base-package="com.ssm.chapter14.*"/>

    <!-- 定义视图解析器 -->
    <!-- 找到Web工程/WEB-INF/JSP文件夹,且文件结尾为jsp的文件作为映射 -->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/WEB-INF/jsp/" p:suffix=".jsp"/>

    <!-- 如果有配置数据库事务,需要开启注解事务的,需要开启这段代码 -->
    <!--  <tx:annotation-driven transaction-manager="transactionManager" />      -->

</beans>
  •<mvc:annotation-driven/>表示使用注解驱动SpringMVC。
  •定义一个扫描的包,用它来扫描对应的包,用以加载对应的控制器和其他的一些组件。
  •定义视图解析器,解析器中定义了前缀和后缀,这样视图就知道去Web工程的/WEB-INF/JSP文件夹中找到对应的JSP文件作为视图响应用户请求。

  代码清单14-4:简单的Controller
package com.ssm.chapter14.controller;

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

//注解@Controller表示它是一个控制器
@Controller("myController")
//表明当请求的URI在/my下的时候才有该控制器响应
@RequestMapping("/my")
public class MyController {

    //表明URI是/index的时候该方法才请求
    @RequestMapping("/index")
    public ModelAndView index() {
        //模型和视图
        ModelAndView mv = new ModelAndView();
        //视图逻辑名称为index
        mv.setViewName("index");
        //返回模型和视图
        return mv;
    }
}
  首先注解@Controller是一个控制器。Spring MVC扫描的时候就会把它作为控制器加载进来。然后,注解@RequestMapping指定了对应的请求的URI,Spring MVC在初始化的时候就会将这些信息解析,存放起来,于是便有了HandlerMapping。当发生请求时,Spring MVC就会去使用这些信息去找到对应的控制器提供服务。
  方法定义返回ModelAndView,在方法中把视图名称定义为index,大家要记住在配置文件中所配置的视图解析器,由于配置前缀/WEB-INF/jsp/,后缀.jsp,加上返回的视图逻辑名称为in-dex,所以它会选择使用/WEB-INF/jsp/index.jsp作为最后的响应,于是要开发/WEB-INF/jsp/index.jsp文件,如代码清单14-5所示。

  代码清单14-5:/WEB-INF/jsp/index.jsp文件
<%@page contentType="text/html" pageEncoding="UTF-8" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Welcome to Spring Web MVC project</title>
</head>

<body><h1>Hello, Spring MVC</h1></body>

</html>
  启动服务器比如Tomcat,输入对应的URL


  图14-6中展示了实例的组件和流程,其中阿拉伯数字是其执行顺序。当Spring MVC启动的时候就会去解析MyController的注解,然后生成对应URI和请求的映射关系,并注册对应的方法。当请求来到的时候,首先根据URI找到对应的HadlerMapping,然后组织为一个执行链,通过请求类型找到RequestMappingHandlerAdapter,它的实例是在Dispatch-erServlet初始化的时候进行创建的。然后通过它去执行HandlerExecutionChain的内容,最终在MyController的方法中将index视图返回DispatcherServlet。由于配置的视图解析器(InternalResourceViewResolver)前缀为/WEB-INF/jsp/,后缀为.jsp,视图名为index,所以最后它会找到/WEB-INF/jsp/in-dex.jsp文件作为视图,响应最终的请求,这样整个Spring MVC的流程就走通了。当然这是最简单的例子,接下来我们需要更细致地讨论一些问题。 
原文地址:https://www.cnblogs.com/ooo0/p/11103436.html