• 基于XML配置的Spring MVC 简单的HelloWorld实例应用


    1.1 问题

    使用Spring Web MVC构建helloworld Web应用案例。

    1.2 方案

    解决本案例的方案如下:

    1. 创建Web工程,导入Spring Web MVC相关开发包。

    • Spring API、web、webmvc等开发包。

    2. 在src下添加Spring Web MVC的XML配置文件。

    • 名称可以自定义,例如spring-mvc.xml。

    3. 在web.xml中配置DispatcherServlet前端控制器组件。

    • DispatcherServlet组件在spring mvc中已提供,只需要配置即可。
    • 配置DispatcherServlet时,同时指定XML配置文件。
        <servlet>
            <servlet-name>springmvc</servlet-name>
            <servlet-class>
                     org.springframework.web.servlet.DispatcherServlet
            </servlet-class>
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:spring-mvc.xml</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>springmvc</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>

    4. 配置HandlerMapping组件, 通过HandlerMapping组件,DispatcherServlet控制器可以将客户HTTP请求映射到Controller组件上。 使用如下配置可以实现 当客户发出hello.form请求时,会调用HelloController组件进行处理。

        <bean   class="org.springframework.web.servlet.handler.
           SimpleUrlHandlerMapping">
                 <property name="mappings">
                      <props>
                           <prop key="/hello.form“>helloController</prop>
                      </props>
                 </property>
         </bean>

    5.编写Controller组件,它负责执行具体的业务处理,可调用DAO等组件,编写时需要实现Controller接口及约定方法,代码如下:

        public class HelloController implements Controller {
            public ModelAndView handleRequest(
                    HttpServletRequest request,
                    HttpServletResponse response) throws Exception {
                System.out.println("接受到请求");
                return new ModelAndView("hello");
            }
        }

    Controller组件约定的handleRequest方法执行后返回一个ModelAndView对象,该对象可封装模型数据和视图名响应信息。并且将HelloController配置到spring-mvc.xml, 代码如下:

     <bean id="helloController" class="com.souvc.web.HelloController"/>

    6. 配置视图解析器ViewResolver。所有Controller组件都返回一个ModelAndView实例,封装了视图名。 Spring中的视图以名字为标识,视图解析器ViewResolver通过名字来解析视图。 InternalResourceViewResolver使用示例代码如下:

    <bean id="jspViewResolver" class="org.springframework.web.servlet.view.
        InternalResourceViewResolver">
            <property name="prefix" value="/WEB-INF/jsp/"/> 
            <property name="suffix" value=".jsp"/> 
        </bean> 

    1.3 步骤

    步骤一: 新建web工程,并配置Spring-MVC ,并导入相关jar包。

    http://yunpan.cn/cQwC6VXRtPjG7  访问密码 11a6

    2. 在src下添加Spring Web MVC的XML配置文件,文件名为spring-mvc.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:context="http://www.springframework.org/schema/context"
            xmlns:jdbc="http://www.springframework.org/schema/jdbc"
            xmlns:jee="http://www.springframework.org/schema/jee"
            xmlns:tx="http://www.springframework.org/schema/tx"
            xmlns:jpa="http://www.springframework.org/schema/data/jpa" 
            xmlns:util="http://www.springframework.org/schema/util"
            xsi:schemaLocation="
                http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
                http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
                http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.2.xsd
                http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsd
                http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
                http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
                http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd" >
    
    </beans>

    3. 在web.xml中配置DispatcherServlet前端控制器组件

    代码如下所示:

     <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
        http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
        <servlet>
            <servlet-name>springmvc</servlet-name>
            <servlet-class>
                org.springframework.web.servlet.DispatcherServlet
            </servlet-class>
            <!-- 指定Spring的配置文件 -->
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:spring-mvc.xml</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>springmvc</servlet-name>
            <url-pattern>*.form</url-pattern>
        </servlet-mapping>
        <welcome-file-list>
            <welcome-file>index.jsp</welcome-file>
        </welcome-file-list>
    </web-app>

    4. 部署项目到Tomcat中, 并且启动Tomcat,控制台输出:

    温馨提示,xml 文件需要顶格,不然会报错。

    将 <?xml version="1.0" encoding="UTF-8"?> 头部的空格删除掉,那么重新启动。

    输出结果分析:输出结果中包含Spring MVC 初始化信息以及加载配置文件spring-mvc.xml的信息。这个结果说明Spring MVC配置正确成功。如果有异常输出就要检查配置文件是否正确。

    步骤二:配置Spring HandlerMapping 组件

    1. Spring HandlerMapping用于分发Web请求到Controller的映射,这个类来自Spring MVC API, 只需要配置到Spring中即可。修改spring-mvc.xml添加HandlerMapping配置。配置代码如下:

        <!-- 定义请求处理映射HandlerMapping -->
        <bean id="handlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
            <!-- 指定请求和Controller对应关系 -->
            <property name="mappings" ref="urlMappings" />
        </bean>
        
        <!-- 定义请求映射表 map -->
        <util:properties id="urlMappings">
            <prop key="/hello.form">helloController</prop>
        </util:properties>

    其中HandlerMapping实现类是Spring提供的SimpleUrlHandlerMapping。SimpleUrlHandlerMapping的mappings属性引用了id为urlMappings的Properties集合。

    2. 为当前项目增加JUnit4 API,并且在项目中添加测试案例类TestCase。在TestCase类中添加测试方法testHandlerMapping(), 测试HandlerMapping配置结果, 测试代码如下所示:

    package com.souvc.test;
    import java.util.Properties;
    import org.junit.Test;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    import org.springframework.web.servlet.HandlerMapping;
    public class TestCase {
        
        /** HandlerMapping 映射测试 */
        @Test
        public void testHandlerMapping(){
            String cfg = "spring-mvc.xml";
            ApplicationContext ac = new ClassPathXmlApplicationContext(cfg);
            HandlerMapping obj = ac.getBean("handlerMapping", HandlerMapping.class);
            Properties map = ac.getBean("urlMappings", Properties.class);
            System.out.println(obj); 
            System.out.println(map); 
        }
    }

    测试结果如下:

    org.springframework.web.servlet.handler.SimpleUrlHandlerMapping@62402af3
    {/hello.form=helloController}

    步骤三:新建控制器处理类HelloController,并且配置

    1. 控制用于处理Web URL请求,负责执行具体的业务处理,控制器需要实现Controller接口,并且实现业务处理方法。控制器要返回ModelAndView对象,这个 对象表示控制处理结果选择了那个View(JSP页面作为View)用于显示。控制器实现代码如下所示:

    package com.souvc.controller;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import org.springframework.web.servlet.ModelAndView;
    import org.springframework.web.servlet.mvc.Controller;
    
    public class HelloController implements Controller {
        public ModelAndView handleRequest(HttpServletRequest req,
                HttpServletResponse res) throws Exception {
            System.out.println("处理hello.form请求");
            ModelAndView mv = new ModelAndView("hello");
            return mv;// 调用hello.jsp
        }
    }

    2. 修改spring-mvc.xml文件,将控制器HelloController配置为一个bean。这里要注意bean的ID要与urlMappings中的映射名字对应,如下:

    <!-- 定义请求处理映射HandlerMapping -->
        <bean id="handlerMapping"
            class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
            <!-- 指定请求和Controller对应关系 -->
            <property name="mappings" ref="urlMappings" />
        </bean>
        
        <!-- 定义url请求映射表 map -->
        <util:properties id="urlMappings">
            <prop key="/hello.form">helloController</prop>
        </util:properties>
        
        <!-- 控制器bean配置 -->
        <bean id="helloController"
            class="com.souvc.controller.HelloController" />

    3. 在TestCase类中添加测试方法testHelloController() 方法测试配置bean结果,测试方法代码如下所示:

    /** 控制器测试 */
        @Test
        public void testHelloController(){
            String cfg = "spring-mvc.xml";
            ApplicationContext ac = new ClassPathXmlApplicationContext(cfg);
            Controller obj = ac.getBean("helloController", Controller.class);
            System.out.println(obj); 
        }

    4. 执行测试方法,执行结果

    信息: Loading XML bean definitions from class path resource [spring-mvc.xml]
    2015-8-29 15:12:24 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
    信息: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@e4865ce: defining beans [handlerMapping,urlMappings,helloController,viewResolver]; root of factory hierarchy
    2015-8-29 15:12:24 org.springframework.web.servlet.handler.AbstractUrlHandlerMapping registerHandler
    信息: Mapped URL path [/hello.form] onto handler 'helloController'
    com.souvc.controller.HelloController@44908881

    如果配置正确,将在控制台输出helloController对象。

    步骤四:添加ViewResolver组件配置

    1. 在spring-mvc.xml文件中增加ViewResolver组件的配置,ViewResolver用于视图的显示结果处理。代码如下所示:

    <!-- 定义视图解析器ViewResolver -->
        <bean id="viewResolver"
            class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/WEB-INF/jsp/" />
            <property name="suffix" value=".jsp" />
        </bean>

    2. 在TestCase类中增加testViewResolver()方法,用于测试ViewReolver的配置结果, 测试方法代码如下所示:

     /** 测试ViewResolver配置 */
        @Test
        public void testViewResolver(){
            String cfg = "spring-mvc.xml";
            ApplicationContext ac = new ClassPathXmlApplicationContext(cfg);
            ViewResolver obj = ac.getBean("viewResolver", ViewResolver.class);
            System.out.println("OK"+obj);
        }

    测试结果如下:OKorg.springframework.web.servlet.view.InternalResourceViewResolver@39697b67

    如果配置正确,将在控制台输出viewResolver对象。

    步骤五:新建视图组件hello.jsp

    在viewResolver声明的前缀文件夹/WEB-INF/jsp中, 创建hello.jsp页面。JSP代码如下:

    <%@page pageEncoding="utf-8" contentType="text/html;charset=utf-8"%>
    <!DOCTYPE html>
    <html>
        <head>
            <title>Spring Hello World!</title>
        </head>
        <body>
            欢迎进入Spring Web MVC世界!
        </body>
    </html>

    步骤六:测试Spring MVC流程

    部署SpringMVC项目到Tomcat6中,在浏览器地址栏中输入URL “http://localhost:8080/工程名/hello.form”发起请求,会得到结果如图-7所示:

    提示:发现还是会报404错误。可以查看一下是否是 是 /WEB-INF/jsp/ 目录不对,并且文件名字大小写要正确。

    小结:

    1. 浏览器向Tomcat6服务器发起Web请求“hello.form”。

    2. Tomcat6 会根据web.xml的配置将 “hello.form”请求交给Spring核心控制器DispatcherServlet处理。

    3. DispatcherServlet根据HandlerMapping中的urlMappings将"/hello.form"请求转给helloController处理。

    4. helloController执行handlerRequest()方法,处理请求,并且返回ModelAndView对象代表处理结果, ModelAndView对象中包含了目标视图“hello”。

    5. Spring核心控制器收到ModelAndView中包含的视图“hello”。

    6. Spring核心控制器利用ViewResolver中的前后缀应用“hello”到/WEB-INF/jsp/hello.jsp文件。

    7. 执行hello.jsp 作为响应结果发送到浏览器。

    8. 浏览器收到hello.jsp的执行结果: 欢迎进入Spring Web MVC世界!

  • 相关阅读:
    python的lambda使用
    python的timedelta
    ptyhon读文件一行长度len为1022,出现\x00
    eclipse生成jar包
    linux 文件的软链接与硬链接(看着写的不错就转发了)
    各种VBA excel 命令、属性、方法
    键盘鼠标共享 Synergy
    关于 range 区域 excel
    php mssql几条常见的数据库分页 SQL 语句
    Get the Degree of Angle Between Hour and Minute Hand of a Clock at Anytime
  • 原文地址:https://www.cnblogs.com/liuhongfeng/p/4769076.html
Copyright © 2020-2023  润新知