`
chenruieye
  • 浏览: 37762 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

spring mvc 原理及应用

    博客分类:
  • Java
 
阅读更多

原址:http://blog.csdn.net/baple/article/details/11880393

 

 

 一,前言

近年来,Struts因为其各种优异的属性,成为风靡全球的时兴技术,而这里要讨论的不是Struts,而是同样提供web 前端解决方案的框架:springMVC;

springMVC作为spring的一部分,继承了spring轻量级,高度可配置性,良好的拓展性和兼容性等特征,使其成为企业的新选择。

 

二,springMVC工作原理(括号内为相关接口)

SpringMVC主要由调度器(DispatcherServlet)、处理器映射(HanderMapping)、处理器(HandlerAdapter)、拦截器(HandlerInterceptor )、控制器(Controller)、视图解析器(ViewResolver)、视图(View)这几部分构成。下面根据springMVC的工作流程依次介绍以上接口。

一个请求到达服务器,首先经过的是DispacherServlet,它是springMVC的入口,也是核心所在,主要职责是:

1,截获相应请求(具体将在下面配置中讲到).

2,初始化其WebApplicationContext上下文.

3,初始springMVC各个组件,并装配到DispacherServlet.

 

DispacherServlet拿到请求后,根据配置的处理器映射,将去寻找HanderMapping.HanderMapping有两个实现:

1,SimpleUrlHandlerMapping 通过配置文件,把一个URL映射到Controller

2,DefaultAnnotationHandlerMapping 通过注解,把一个URL映射到Controller类上

 

接下下来是根据注解或者配置找到对应的Controller,执行其业务逻辑(若有拦截器,当然先走拦截器,springMVC拦截器类型不同,此处暂不提,下面有讲到)。Controller里面的方法返回值类型有String,ModelAndView,View,json等等。它的返回值包含了响应所需数据和url等信息。

 

接下来将到达ViewResolver(这个过程是DispacherServlet定位到ViewResolver还是框架既定的步骤?求解),根据配置的ViewResolver将找到对应的View,然后构造response呈递给浏览器。

 

大致步骤就是这样子。

 

三,入门小例子

下面我们来做个springMVC的小东西.

首先到spring官网下载jar包,附上地址:

http://www.springsource.org/download/community

(家里网速很不给力啊,- -!)

环境:eclipse4.2,tomcat;

1,新建一个web项目,这里我们取名为demo,打开web.xml,配置DispacherServlet,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>demo</display-name>

 <servlet>
  <servlet-name>spring</servlet-name><!-- 此处指定servlet的名字,它将决定springmvc配置文件的名字,
  默认是[servletName-servlet.xml],也可以自定义。-->
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <load-on-startup>1</load-on-startup><!-- 该值用于确定优先级;正数值越小优先级越高 -->
 </servlet>

 <servlet-mapping>
  <servlet-name>spring</servlet-name>
  <url-pattern>/</url-pattern><!-- 这里表示DispacherServlet所拦截的请求,拦截方式很多,以下分别讲到 -->
 </servlet-mapping>

  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

自定义springmvc配置文件名字:通过为servlet指定init-param实现,如下:

 <servlet>
  <servlet-name>spring</servlet-name><!-- 此处指定servlet的名字,它将决定springmvc配置文件的名字,
  默认是[servletName-servlet.xml],也可以自定义。-->
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <init-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>classpath*:/springMVC.xml</param-value>
  </init-param>

  <load-on-startup>1</load-on-startup><!-- 该值用于确定优先级;正数值越小优先级越高 -->
 </servlet>
此处指定的文件是web根目录下的叫做springMVC.xml

 

拦截地址:

  <url-pattern>/</url-pattern>:这种方式拦截了类似/user/login的地址;会导致静态资源无法访问。

  <url-pattern>/*</url-pattern>:错误的拦截方式,可以走到Action中,但转发到jsp时再次被拦截,不能访问到jsp。

  <url-pattern>/path/*</url-pattern>:拦截包含/path/路径的请求。

  <url-pattern>*.do</url-pattern>:简单,实用的拦截方式,不存在静态资源访问的问题。

 

好了,接下来就在WEB-INF目录下新建springmvc的配置文件。名字根据以上配置取。我使用的默认配置,所以我的配置文件名字就是:spring-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:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="
        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
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">

    <!-- 自动扫描的包名 -->
    <context:component-scan base-package="com.my.test" />
    <!-- 配置使用注解 -->    
    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />
        
    <!-- 视图解释类 -->  
   <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
        <property name="prefix" value="/jsp/"/>  
        <property name="suffix" value=".jsp"/>
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />  
   </bean>  
   
</beans>

来解释下:

    <context:component-scan base-package="com.my.test" />这句指定springmvc扫描的包名,在该目录下的都将被扫描~也可以写*,比如:com.*.test

    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />这句启用springmvc注解功能,网络上还有一种配置方式:

  1. <!-- 默认的注解映射的支持 -->  
  2.    <mvc:annotation-driven /> 
  3.  

不知道是版本还是其他原因,这种方式我用不了, o(╯□╰)o

 

下面是指定物理目录用的, springmvc将根据controller里面方法的返回值查找物理路径,规则是这样的:

项目路径下/[prefix的value]+[controller的返回值]+[suffix指定的后缀]

比如我的controller里面某个方法返回index,那么,springmvc所找的页面就是:demo/jsp/index.jsp

 

好了接下来写一个Controller,代码如下:

package com.my.test;

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class MainController
{
    @RequestMapping(value = "/test/dotest")
    public String refreshmeta(Model model,HttpServletRequest request)
    {
        request.setAttribute("name","susan");
        return "index";
    }

}
简单得很,能说明大致工作原理就成了。

顺便说几句吧:

    @RequestMapping(value = "/test/dotest")表示将处理为/test/dotest的请求,也可以在后面加上请求类型,像这样:,@RequestMapping(value="/test/dotest/",method = RequestMethod.GET);也可以一个方法拦截多个请求,像这样:    @RequestMapping(value = { "/test/dotest", "/test/mytest" })

    public String refreshmeta(Model model,HttpServletRequest request)
这句方法名可以任意,后面的参数,Model是spring封装的一个request对象,把他当成request用没一点问题;后米娜的HttpServletRequest都清楚,不必多说了~其实还可以在后面参数中加入从表单取值的东西,比如这样写:   public String refreshmeta(Model model,HttpServletRequest request@RequestParam(required = false) String email),这里的email是可以直接拿来用的,它的值对应于页面中的email元素的值。

        return "index";
这句上面有提到,springMVC通过这个返回值来确定需要返回的视图的物理路径,按照我们spring-servlet.xml的配置,框架去找的物理路径就是:/demo/jsp/index.jsp

好吧,物理路径是这个,那么就在这个路径下建一个jsp页面,内容够简洁:

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Insert title here</title>
</head>
<body>
    welcome to spring mvc ,your name is  ${name}
</body>
</html>


好了,部署到tomcat,在浏览器中输入:http://localhost:8080/demo/test/dotest/就可以看到以下结果:



以上代码在eclipse4.2+tomcat6.0.26的环境中可用。



四,配置拓展

关于springMVC以上所说只是一些简单的应用,不能满足实际需求。有一句话叫做什么来着,不重复发明轮子,那么,这里就贴出个链接,个人感觉还可以,有空可以去看看:
http://elf8848.iteye.com/blog/875830;
另外,如果想深入了解,还是去看看源码吧~~虽然比较耗时,不过绝对值得~


版权声明:本文为博主原创文章,未经博主允许不得转载。

分享到:
评论

相关推荐

    Spring MVC jar包

    Spring MVC 是一个基于Java的轻量级Web应用框架,它为开发者提供了模型-视图-控制器(MVC)架构,使开发人员能够更好地组织和分离应用程序的业务逻辑、数据处理和用户界面。Spring MVC是Spring框架的一个核心组件,...

    struts1原理,struts2原理,spring mvc原理,struts1和struts2,struts和spring mvc

    **Spring MVC原理:** Spring MVC是Spring框架的一部分,它遵循MVC模式,提供了处理HTTP请求的DispatcherServlet。DispatcherServlet接收请求后,根据请求URL和方法找到对应的HandlerMapping,然后调用对应的Handler...

    Spring MVC原理

    "Spring MVC原理" Spring MVC原理是指Spring框架中MVC模式的实现原理。...Spring MVC原理是基于MVC模式的,通过DispatcherServlet、Controller、View和HandlerMapping等组件来实现Web应用程序的开发。

    Spring MVC使用Demo

    Spring MVC是Spring框架的一个核心模块,专用于构建Web应用程序。这个"Spring MVC使用Demo"提供了实践操作,帮助开发者深入理解Spring MVC的开发环境配置、注解的使用以及工作原理。 首先,Spring MVC的设计模式...

    开发Spring MVC应用程序补充—程序源码下载.rar_spring_spring mvc_spring mvc 源码_sp

    标题中的"开发Spring MVC应用程序补充—程序源码下载.rar_spring_spring mvc_spring mvc 源码_sp"表明这是一个关于Spring MVC框架的开发教程,其中包含了源代码供学习者参考。Spring MVC是Spring框架的一个核心组件...

    Spring MVC MYBatis企业应用实战

    Spring MVC MYBatis企业应用实战,详细描述spring mvc原理及注解,怎么与mybatis整合,构建企业级web实战

    Java EE企业级应用开发教程(Spring Spring MVC MyBatis)(黑马程序员编著)

    通过学习本书,开发者不仅可以掌握Java EE开发的基本技能,还能深入理解Spring、Spring MVC和MyBatis这三个框架的原理和最佳实践。这将有助于他们在实际工作中构建出更加高效、可扩展的后端应用,同时也能提升团队...

    spring MVC简单示例

    这个"spring MVC简单示例"是为了帮助初学者理解Spring MVC的基本工作原理和配置,通过实践这个例子,你可以了解到如何创建一个简单的Controller、配置视图解析器并建立一个基本的请求处理流程。随着对Spring MVC的...

    Spring 2.0 MVC的应用

    总结,"FirstSpringWebApp"项目是一个很好的起点,帮助开发者理解Spring 2.0 MVC的工作原理和实践。通过逐步学习和实践这个项目,你可以掌握如何创建RESTful API,处理表单提交,实现用户认证和授权等Web开发的关键...

    《Java EE企业级应用开发教程Spring+Spring MVC+MyBatis》_源代码.zip

    《Java EE企业级应用开发教程Spring+Spring MVC+MyBatis》是一本深入探讨Java企业级应用程序...通过学习和实践这些源代码,开发者可以深入理解Spring、Spring MVC和MyBatis的工作原理,并能熟练地在实际项目中应用。

    spring-MVC.zip_Java spring mvc_spring mvc_spring mvc

    对于初学者来说,这是一份很好的实践指南,可以帮助理解Spring MVC的工作原理,并快速上手开发基于Spring MVC的Web应用。通过阅读和实践这份教程,你可以掌握Spring MVC的基本使用,为进一步深入学习和应用Spring...

    spring mvc案例+配置+原理详解+架包

    Spring MVC 是一个强大的Java Web开发框架,用于构建可维护、高性能和灵活的Web应用程序。它作为Spring框架的一部分,提供了一种模型-视图-控制器(MVC)架构,简化了处理HTTP请求和响应的复杂性。这个压缩包包含了...

    Spring MVC 简单Demo

    下面,我们将深入探讨Spring MVC的核心概念、工作原理以及如何创建一个简单的示例。 1. **Spring MVC 概述** Spring MVC是Spring框架的一部分,用于处理HTTP请求和响应。它采用Model-View-Controller(MVC)设计...

    spring mvc集成webservice

    Spring MVC 是一个强大的Java Web开发框架,用于构建可维护、...通过理解Spring MVC的MVC模式,掌握Web服务的基本原理,以及学习如何在Spring环境中配置和调用Web服务,开发者可以构建更加灵活和可扩展的Web应用程序。

    spring mvc mybatis 整合源码,带数据库脚本,带详细注释

    - Spring MVC是基于Model-View-Controller(MVC)设计模式的Web应用框架,提供了一种组织和处理请求的机制。 - 它的核心组件包括DispatcherServlet、HandlerMapping、HandlerAdapter、ModelAndView和ViewResolver...

    spring MVC配置详解

    要想灵活运用 Spring MVC 来应对大多数的 Web 开发,就必须要掌握它的配置及原理。 一、Spring MVC 环境搭建 1. jar 包引入 在使用 Spring MVC 之前,需要引入相应的 jar 包,包括 Spring 2.5.6 和 Hibernate ...

    spring MVC 基本应用

    通过分析这些文件,你可以更好地理解 Spring MVC 的工作原理和配置方式。 总的来说,Spring MVC 提供了一种结构化的 web 应用开发方式,结合 Eclipse 的强大支持,可以让开发者高效地构建健壮的、可扩展的应用程序...

    Mastering Spring MVC 3中文版

    《Mastering Spring MVC 3中文版》是一本深入解析Spring MVC框架的专业书籍,它涵盖了Spring MVC的核心概念、设计原理以及实际应用。Spring MVC是Spring框架的一部分,主要用于构建Web应用程序的模型-视图-控制器...

Global site tag (gtag.js) - Google Analytics