当前位置:编程学习 > JAVA >>

Spring—spring mvc框架入门

   Spring mvc在Spring特征里面处于满核心的地位,在官网上的对Spring 特征(FEATURES)罗列中,对应这是“MODERN WEB”(现代web),也就是Spring特征的第一项。也反映了其重要作用,另一方面也是因为mvc在Spring项目中诞生比较早。

       只要是同网络应用相关的,无论是有同用户互动的(带UI的)或者没有互动的情况,spring mvc都是种成熟、功能齐全的架构。阅读下面的内容需要对java、spring(依赖注入dependency injection)、servlet需要有些基本的了解。

       Spring的MVC框架如下图所示:

 \

在Spring MVC中前端的控制器就是DispatcherServlet这个Servlet来掌管着用户的请求及最后的系统回应。这个DispatcherServlet同具体的业务逻辑一点都不着边,而是把所有的事情委派给控制器去做(Controller),当然DispatcherServlet是知道该把当前的事情交个那个控制器去做,这个后面会讲;然后当控制器把事情都做完了后,这个时候轮到视图(View)上场了,简单的理解好比我们做PPT,那么这里的视图好比PPT里面的模板,它可以把数据以不同的展现形式交给客户,可以是jsp、xml、json等等。下面来看看如何具体实现的:

  1、Servlet部分,上面说到前端控制器是DispatcherServlet这个Servlet,那很显然需要在web.xml中加入一个servlet,然后把用户的请求都让DispatcherServlet去处理,下面是web.xml文件:

[html] 
<?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"> 
  
    <!-- Processes application requests --> 
    <servlet> 
        <servlet-name>appServlet</servlet-name> 
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
        <init-param> 
            <param-name>contextConfigLocation</param-name> 
            <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value> 
        </init-param> 
        <load-on-startup>1</load-on-startup> 
    </servlet>        
  
    <servlet-mapping> 
        <servlet-name>appServlet</servlet-name> 
        <url-pattern>/</url-pattern> 
    </servlet-mapping> 
</web-app> 
这里有个地方就是contextConfigLocation,这个是个初始化参数(init-param),在servlet进行初始化的时候可以设置它的值,而这个值定义了spring应用上下文(context—上下文,指的是一种环境,主要是各种bean,可以理解为各种component)的配置文件(XML格式)的位置,这个上下文会被DispatcherServlet加载进来,这样Dispatcher工作起来时会依照这个上下文的内容进行分配任务。具体原理可以参考下面这个图:
\

        关于上下文的配置,这里使用的是xml的配置方式,上面代码指定了配置文件是/WEB-INF/spring/appServlet/servlet-context.xml,这个也可以使用java的配置方式,这里需要在DispatcherServlet的初始参数中加入AnnotationConfigWebApplicationContext。另外在下面的例子中我们会看到组件即可以在XML中配置但也可以使用java代码来做。接下来看看第一个controller

2、Controller类,下面是一个最mini的控制类了:

[html] 
package xyz.sample.baremvc; 
  
import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 
  
/** 
 * Handles requests for the application home page. 
 */ 
@Controller 
public class HomeController { 
  
    @RequestMapping(value = "/") 
    public String home() { 
        System.out.println("HomeController: Passing through..."); 
        return "WEB-INF/views/home.jsp"; 
    } 

上面这个类中有几个注意的地方:
        1、使用了@Controller这个annotation(这个可以翻译成“注释”,表示下面的类的作用),来表示HomeController这个类是作为Spring MVC中的Controller(控制器),根据上面的那个图也就是表示这个类具有处理用户请求的能力。另外@Controller是@Component这个annotation中的特定annotation(有点类似@Component是@Controller的父类一样,@Component相当于抽象程度比较高,@Controller是属于一种特定的@Component),所以这里HomeController也是作为一个组件(Component),在Spring初始化扫描的时候它会被自动检测到并且加入到Spring container中(Spring容器或者叫Spring上下文,都是类似的概念),然后生成对应的类实例,最后像其他任何Spring组件一样允许注入到系统中。

        2、home这个方法使用了@RequestMapping这个注释,表示home这个方法可以用来处理对应于路径“/”(根路径)的用户请求

        3、这里home的处理就是在log中打印一个字符串,然后返回WEB-INF/views/home.jsp,这个是交给View去处理的,这里就是个jsp文件,默认情况下,如果我们没有设置特定的View的话,Spring会使用默认的View来处理WEB-INF/views/home.jsp这个Response(回应);对应View在后面将详细讲,这里只要知道View会把系统的home.jsp这个文件呈现给客户就好

下面是对应的home.jsp文件,文件很简单,只是个Hello:

[html] 
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 
<%@ page session="false" %> 
<html> 
    <head> 
        <title>Home</title> 
    </head> 
    <body> 
        <h1>Hello world!</h1> 
    </body> 
</html> 
3、配置Spring上下文,上面在Servlet中提到的Spring上下文还没有创建(/WEB-INF/spring/appServlet/servlet-context.xml),看看下面的代码:
[html] 
<?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:mvc="http://www.springframework.org/schema/mvc" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation=" 
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd 
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd&quo

补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,