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世界!

基于XML配置的Spring MVC 简单的HelloWorld实例应用的更多相关文章

  1. 基于注解配置的Spring MVC 简单的HelloWorld实例应用

    2.1 问题 使用注解的方式重构helloworld应用案例. 2.2 方案 1. @RequestMapping注解应用 @RequestMapping可以用在类定义和方法定义上,它标明这个类或方法 ...

  2. Spring Aop(七)——基于XML配置的Spring Aop

    转发:https://www.iteye.com/blog/elim-2396043 7 基于XML配置的Spring AOP 基于XML配置的Spring AOP需要引入AOP配置的Schema,然 ...

  3. 一步一步深入spring(6)--使用基于XML配置的spring实现的AOP

    上节我们提到了使用基于注解实现的AOP,这节我们将用基于xml配置的方式来实现的AOP. 1.首先建立一个类,作为切面类,这个类主要用来实现注解中各种通知要实现的方法. package com.yan ...

  4. 基于XML配置的spring aop增强配置和使用

    在我的另一篇文章中(http://www.cnblogs.com/anivia/p/5687346.html),通过一个例子介绍了基于注解配置spring增强的方式,那么这篇文章,只是简单的说明,如何 ...

  5. 使用JavaConfig和注解方式实现零xml配置的Spring MVC项目

    1. 引言 Spring MVC是Spring框架重要组成部分,是一款非常优秀的Web框架.Spring MVC以DispatcherServlet为核心,通过可配置化的方式去处理各种web请求. 在 ...

  6. Spring MVC简单的HelloWorld例子

    1.web.xml配置(主要配置Servlet)[默认情况 Spring的配置文件在WEB-INF的<servlet-name>-servlet.xml] <?xml version ...

  7. 注解配置的Spring MVC

    基于注解配置的Spring MVC 简单的HelloWorld实例应用   2.1 问题 使用注解的方式重构helloworld应用案例. 2.2 方案 1. @RequestMapping注解应用 ...

  8. spring实战六之使用基于java配置的Spring

    之前接触的都是基于XML配置的Spring,Spring3.0开始可以几乎不使用XML而使用纯粹的java代码来配置Spring应用.使用基于java配置的Spring的步骤如下: 1. 创建基于ja ...

  9. Unit03: Spring Web MVC简介 、 基于XML配置的MVC应用 、 基于注解配置的MVC应用

    Unit03: Spring Web MVC简介 . 基于XML配置的MVC应用 . 基于注解配置的MVC应用 springmvc (1)springmvc是什么? 是一个mvc框架,用来简化基于mv ...

随机推荐

  1. 准备.Net转前端开发-WPF界面框架那些事,搭建基础框架

    题外话 最近都没怎么写博客,主要是最近在看WPF方面的书<wpf-4-unleashed.pdf>,挑了比较重要的几个章节学习了下WPF基础技术.另外,也把这本书推荐给目前正在从事WPF开 ...

  2. 使用RazorEngine对ASP.NET MVC的Views进行UnitTest

    有的时候我们需要对Razor最后生产的文本(HTML OR XML OR..)进行单元测试. 使用Nuget安装RazorEngine. 新建一个ASP.NET MVC项目,并且带有测试项目. 修改I ...

  3. SQL Server中的连接查询【内连接,左连接,右连接,。。。】

    在查询多个表时,我们经常会用“连接查询”.连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志. 什么是连接查询呢? 概念:根据两个表或多个表的列之间的关系,从这些表中查询数据 ...

  4. WinForm输入网址打开源码

    无聊练习一下WinForm,输入网址,点击按钮就在浏览器打开网址. 源代码下载: http://hovertree.com/h/bjaf/cao15h74.htm

  5. 【循序渐进学Python】11.常用标准库

    安装完Python之后,我们也同时获得了强大的Python标准库,通过使用这些标准库可以为我们节省大量的时间.这里是一些常用标准库的简单说明.更多的标准库的说明,可以参考Python文档 sys 模块 ...

  6. jquery ajax给外部变量赋值 async: false

    开发过程中用到检查是否存在手机号问题. //验证手机号是否注册            var bl = false;            $.ajax({                type: ...

  7. vmware screen

    1. Question Description: the screen of the vmware looks small . 2. Solution: 2.1 look the size of sc ...

  8. linux 常用技巧

    1--查看版本 查看内核版本 # cat /proc/version 查看linux版本 # lsb_release -a或者 cat /etc/issue 2--linux服务器测速 speedte ...

  9. AI - Ideas

    Idea: Comprehend code and re-factory code to more readable. The AI program can comprehend source cod ...

  10. python面向对象(一),Day6

    connfigparser模块 xml模块 shutil模块以及压缩解压 subprocess模块 面向对象(上) 类和对象 onfigParser 用于对特定的配置进行操作,当前模块的名称在 pyt ...