• 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的流程就走通了。当然这是最简单的例子,接下来我们需要更细致地讨论一些问题。 
  • 相关阅读:
    javaWeb接口开发
    .NET设计模式(4):建造者模式(Builder Pattern)(转载)
    .net数据库连接池(转载)
    系统操作日志设计(转载)
    系统操作日志设计-代码实现(转载)
    GOF对Builder模式的定义(转载)
    Javascript中的对象和原型(一)(转载)
    Javascript中的对象和原型(二)(转载)
    Javascript中的对象和原型(三)(转载)
    服务器安全设置(转载)
  • 原文地址:https://www.cnblogs.com/ooo0/p/11103436.html
Copyright © 2020-2023  润新知