Spring MVC - 配置Spring MVC

写在前面的话:

  现在开始一段新的学习历程:Spring MVC。还是按照原来的三步走学习模式(what、why、how)进行讲解。

1、Spring MVC是什么(what) 

  Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。

  Spring MVC通过实现Model-View-Controller模式来很好地将数据、业务与展现进行分离。Spring MVC框架围绕DispatcherServlet设计。

  DispatcherServlet的作用是将请求分发到不同的处理器。 Spring MVC框架包括可配置的处理器(handler)映射、视图(view)解析、本地化(local)解析、主题(theme)解析以及对文件上传的支持。

2、为什么要学Spring MVC(why)

  初学者可能会奇怪可以用Servlet同样可以解决相同的问题,为什么还要使用Spring MVC 框架?它有什么优点?

  没错,从功能上来说servlet完全可以满足我们的需求。如果项目比较小,没有很多的功能需求和页面,直接用servlet更加简单、简洁,Spring MVC反而显得比较麻烦。

  但是当项目变得越来越大,要添加新的需求时,你会发现你要改动许多的地方,而且在改动的时候你要相当清楚你的改动对其它功能有没有副作用。这个时候你会感到很烦躁,逻辑也不再那么清晰。这个时候也是最容易出bug的地方。

  这个时候MVC框架的优点就显现出来了:MVC框架强制性的把业务逻辑层(model)、视图层(view)和程序逻辑层(controller)分开。这样你在扩展新的需求的时候至少你的逻辑是非常清晰的,明白哪些地方是干啥的。这样做也符合了“对扩展开放,对修改关闭”的设计原则(OCP原则)。

3、怎么使用Spring MVC(how)

  多说不如多做,下面我们就动手准备配置一个简单的采用Spring MVC框架的程序。

  在动手配置之前我们先来了解一下Spring MVC 几个核心的东西:

  DispatchServlet:Spring提供的前端控制器,所有的请求都有经过它来统一分发。在DispatcherServlet将请求分发给Spring Controller之前,需要借助于Spring提供的HandlerMapping定位到具体的Controller。

  HandlerMapping:Handler映射器,将浏览器的请求映射给确定的controller处理。

  Controller:处理请求,并返回ModelAndView。

  ViewResolver:视图解析器,在web中应用中查找view对象并返回给用户。

  View:视图,只负责展示数据。

  下面是用户发起的请求在Spring MVC中的处理流程图:

  

  

  现在我们就开始创建一个简单的采用Spring MVC的应用:

  A、先来看看项目结构:

  

  大家肯定会说这个项目也太简单了吧!只有一个java文件!

  没错,这个项目确实很简单。因为这个毕竟是一个入门级的文章,我认为没必要弄得很复杂。只要把Spring MVC这个种设计思想和一些需要注意的地方讲清楚就行了,能学会才是最重要的。

  

  B、web.xml作为一个web应用的配置的入口,我们就先从这里顺着思路开始讲起:

  

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
 5     http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
 6     <display-name></display-name>
 7
 8     <!-- 配置DispatcherServlet,注意servlet-name,因为程序会去加载这个[springmvc-servlet.xml]配置文件 -->
 9     <servlet>
10         <servlet-name>springmvc</servlet-name>
11         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
12         <!-- 程序启动时就加载 -->
13         <load-on-startup>1</load-on-startup>
14     </servlet>
15     <servlet-mapping>
16         <servlet-name>springmvc</servlet-name>
17         <!-- 映射路径,所有的用户请求都会通过这个servlet进行处理 -->
18         <url-pattern>/</url-pattern>
19     </servlet-mapping>
20
21     <welcome-file-list>
22         <welcome-file>index.jsp</welcome-file>
23     </welcome-file-list>
24
25 </web-app>

    

  这里的web.xml也很简单,只配置了一个servlet(DispatcherServlet),但是需要注意几个地方:

    a.这个servlet会处理所有来自浏览器的请求。

    b.要注意这个servlet-name这个配置项,因为程序会去默认加载名为[servlet名字]-servlet.xml这个配置文件。如本例的springmvc-servlet.xml。

  C、程序启动后会加载了springmvc-servlet.xml这个配置文件:

  

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4     xmlns:mvc="http://www.springframework.org/schema/mvc"
 5     xmlns:context="http://www.springframework.org/schema/context"
 6     xmlns:aop="http://www.springframework.org/schema/aop"
 7     xmlns:tx="http://www.springframework.org/schema/tx"
 8     xmlns:p="http://www.springframework.org/schema/p"
 9     xsi:schemaLocation="http://www.springframework.org/schema/beans
10         http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
11         http://www.springframework.org/schema/mvc
12         http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
13         http://www.springframework.org/schema/context
14         http://www.springframework.org/schema/context/spring-context-3.2.xsd
15         http://www.springframework.org/schema/aop
16         http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
17         http://www.springframework.org/schema/tx
18         http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">
19
20
21     <!-- ViewResolver 视图解析器-->
22     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
23         <property name="viewClass"
24             value="org.springframework.web.servlet.view.JstlView" />
25         <property name="prefix" value="" />
26         <property name="suffix" value=".jsp" />
27     </bean>
28
29     <!-- 处理器 -->
30     <bean name="/hello"    class="com.tony.springmvc.controller.HelloWorldController" />
31
32
33 </beans>

  这个配置文件里面配置了两个东西:

    a.视图解析器(viewresolver)。主要是配置视图的前缀和后缀。这里配置的后缀为.jsp,没有配置前缀。如果controller返回的view  为“/hello”,那么经过这一步以后会变成"/hello.jsp"。

    b.将处理器(controller)注册为bean。例如在这个项目中,如果浏览器发来的请求是"/hello",那么将会映射给com.tony.springmvc.controller.HelloWorldController进行处理。

  该配置文件除了配置这些东西以外,还可以配置拦截器,IoC容器等等,应为Spring MVC 本来就属于Spring Framework的一部分。

  D、现在进入到HelloController里面:

  

 1 package com.tony.springmvc.controller;
 2
 3 import javax.servlet.http.HttpServletRequest;
 4 import javax.servlet.http.HttpServletResponse;
 5
 6 import org.springframework.web.servlet.ModelAndView;
 7 import org.springframework.web.servlet.mvc.Controller;
 8
 9 public class HelloWorldController implements Controller {
10     @Override
11     public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse resp) throws Exception {
12
13         ModelAndView mav = new ModelAndView();
14         mav.addObject("message", "Hello World!");
15         mav.setViewName("hello");
16
17         return mav;
18     }
19 }

  controller的功能与servlet相似:都要传入request和response,然后进行一些程序逻辑处理,返回ModelAndView。

  这里不需要处理表单所以就继承了Controller这个基类。如果有表单域,那么就要仔细地选择基类。

  Spring MVC提供了AbstractController、UrlFilenameViewController、MultiActionController等controller。

    

  返回的ViewResolver会通过ModelAndView中的view去查找web中的view对象,然后返回给浏览器。

  E、返回hello.jsp给浏览器:

  

 1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
 2
 3 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 4 <html>
 5   <head>
 6     <title>HelloWorld</title>
 7
 8     <meta http-equiv="pragma" content="no-cache">
 9     <meta http-equiv="cache-control" content="no-cache">
10     <meta http-equiv="expires" content="0">
11     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
12     <meta http-equiv="description" content="This is my page">
13
14   </head>
15   <body>
16
17    <p align="center">${message}</p>
18
19   </body>
20 </html>

   F、效果如图所示:

   

    至此,一个很简单的采用Spring MVC框架的web应用就搭建完成了。

  

  最后有几点说明:

  1、这篇文章主要讲的是如何配置一个简单的Spring MVC应用,所以就没有对配置文件中的所有配置项进行说明。

  2、因为在代码文件中的注释写的比较详细,所以在文章中就没有用过多的篇幅去重复了。

  3、这篇文章完全是笔者自己在学习Spring时总结的经验和笔记,不免有错误和疏漏的地方,还望大家指正。

  4、本文是属于搭建Spring+Spring MVC+ myBatis(SSM)框架的一部分,会在后面持续更新。

  myBatis:http://www.cnblogs.com/world-mian/p/framework_mybatis_configuration.html

  

时间: 2024-10-06 09:18:18

Spring MVC - 配置Spring MVC的相关文章

spring boot系列(五)spring boot 配置spring data jpa (查询方法)

接着上面spring boot系列(四)spring boot 配置spring data jpa 保存修改方法继续做查询的测试: 1 创建UserInfo实体类,代码和https://www.cnblogs.com/kxm87/p/9273555.html中的一样. 2 创建数据库操作类相当于dao层,主要创建一个接口UserRepository,继承JpaRepository接口即可.本代码中主要都是自定义方法. 使用findXX 或者countXX(这两个不用编写sql,jpa会自动生成)

MVC配置spring.NET的问题

mvc中配置spring.NET的步骤: 1.引入nuget包 2.配置Global.asax文件, 3.写配置文件, 4.然后就可以在控制器中调用了 但是这种方法不能用于父类控制器,对于父类控制器只能单独调用

Spring定时器配置的两种实现方式OpenSymphony Quartz和java Timer详解

原创整理不易,转载请注明出处:Spring定时器配置的两种实现方式OpenSymphony Quartz和java Timer详解 代码下载地址:http://www.zuidaima.com/share/1772648445103104.htm 有两种流行Spring定时器配置:Java的Timer类和OpenSymphony的Quartz. 1.Java Timer定时 首先继承java.util.TimerTask类实现run方法 import java.util.TimerTask; p

Spring.Net框架二:配置Spring.Net框架环境

一.下载DLL文件 去Spring的官方网站下载并解压,然后直接添加dll文件的引用就可以了.在上一篇文章中,已经介绍过Spring.Net框架中需要使用到的dll文件.这些程序集文件位于Spring.NET-1.3.1\Spring.NET\bin\net\4.0\debug或Spring.NET-1.3.1\Spring.NET\bin\net\4.0\release中. 二.编程方式的容器 在Spring.Net中,对于通过编程方式使用容器的环境,提供了Spring.Context.Sup

两种流行Spring定时器配置:Java的Timer类和OpenSymphony的Quartz

1.Java Timer定时 首先继承java.util.TimerTask类实现run方法 import java.util.TimerTask; public class EmailReportTask extends TimerTask{ @Override public void run() { ... } } 在Spring定义 ... 配置Spring定时器 <bean id="scheduleReportTask" class="org.springfra

通过eclipse配置Spring MVC项目

上一篇刚建立了一个简单的Spring项目,其实Spring MVC是一个和Struts2一样的基于MVC设计模式的web框架,并且继承了MVC的优点,是基于请求驱动的轻量级的web框架,spring mvc可以认为是spring其中的一个web扩展,小巧灵活,但是功能强大,可以直接传入ServletAPI使用起来开发会比较简单顺手,并且通过配置注解的方式,很轻松的对web资源进行管理,提高了开发的速度和应用程序的可维护性 使用spring mvc可以设计出干净的web层和薄薄的web层:目前非常

spring mvc 配置

之前配置spring mvc 怎么都访不到对应的jsp,后来把prefix里面的jsp改为views,就能访问到了,然后再改回jsp也可以访问到 搞了两天,都崩溃了,不管怎样先把没问题的例子给记录下来 首先是web.xml <servlet> <servlet-name>HighSchoolServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServl

Spring 4 官方文档学习(十一)Web MVC 框架之配置Spring MVC

在前面的文档中讲解了Spring MVC的特殊beans,以及DispatcherServlet使用的默认实现.在本部分,你会学习两种额外的方式来配置Spring MVC.分别是:MVC Java config 和  MVC XML namespace. 原文: Section 22.2.1, "Special Bean Types In the WebApplicationContext" and Section 22.2.2, "Default DispatcherSer

spring mvc 配置(xml配置详解)

如果您曾经使用Spring MVC框架开发过Web应用程序,本文提供关于Spring MVC框架的配置技巧,以帮助管理基于Spring的web应用程序的多个实例. Spring Framework(J2EE框架),Spring(Spring框架)下载 2013-08-26Spring Framework(J2EE框架) 3.2.4 2013-08-26Spring(Spring框架) 4.0.0.M2 web.xml 配置: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 <s