`
squall140
  • 浏览: 146278 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

Spring 3.x MVC 入门1

 
阅读更多

文章转自http://www.cnblogs.com/zhaoyang/archive/2012/01/07/2315425.html

建立一个web project,并导入spring 3.x的jar包

配置web.xml

根据上面的spring mvc流程图,我们知道DispatcherServlet是spring mvc 的一个前端控制器,所以我们当然要去配置它,以便于将请求转给DispatcherServlet处理

 

  <servlet>

    <servlet-name>dispatcher</servlet-name>

    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

    <init-param>

        <param-name>contextConfigLocation</param-name>

<!-- 如果配置文件位于classpath下,可以这么写: classpath:dispatcher.xml -->

        <param-value>/WEB-INF/dispatcher.xml</param-value>

    </init-param>

    <load-on-startup>1</load-on-startup>

  </servlet>

 

  <servlet-mapping>

    <servlet-name>dispatcher</servlet-name>

    <url-pattern>/</url-pattern>

  </servlet-mapping>

 

注:由于DispatcherServlet在初始化的过程中需要一个配置文件来生产文件中的各种bean,并生成 WebApplicationContext对象,保存到ServletContext中(如果DispatcherServlet有多个,那么每一个 DispatcherServlet都对应一个WebApplicationContext),我们可以在Servlet的init-param中配置配 置文件的路径,当然如果我们没有配置Init-Param,它会默认到WEB-INF的文件夹中找[servletname]-servlet.xml文 件,例如上面如果我们没有配置,则会去寻找dispatcher-servlet.xml这个配置文件。(在init-param中我们可以指定多个配置 文件,用逗号分隔也可以使用通配符*)

配置上文中我们指定的所需的dispatcher.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: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/mvc

    http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd" >

 

    <context:component-scan base-package="com.controls" />

   

    <mvc:annotation-driven />

   

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" >

       <property name="prefix" value="/WEB-INF/views/" ></property>

       <property name="suffix" value=".jsp" ></property>

       <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" ></property>

    </bean>

   

</beans>

 

配置文件说明:

<context:component-scan base-package="com.controls" />

由于我们使用了基于注解的Controller,所以这里指定了需要被扫描的包路径,如果有多个可以使用逗号分隔

 

<mvc:annotation-driven />

上面的spring mvc流程图中我们知道DispatcherServlet接管请求后,会由HandlerMapping来执行映射,所以我们需要注册 HanlderMapping,比如上面的标签会自动注册比如DefaultAnnotationHandlerMapping(执行请求到 Controller的映射)和AnnotationMethodHandlerAdapter(调用controller中的方法)这样的bean,当 然这个标签还提供了其他的一些支持(更多介绍请参照spring官方文档第455页)。

 

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" >

       <property name="prefix" value="/WEB-INF/views/" ></property>

       <property name="suffix" value=".jsp" ></property>

       <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" ></property>

</bean>

上面spring mvc流程图的最后controller处理完毕后会交给一个ViewResolver进行处理,大体上是解析视图逻辑名并经过一定的处理获取一个视图, 这里的意思是设置视图用jsp来处理(比如我们设置viewClass为JstlView)来进行处理,就是以forward的形式转发给jsp,这个地 址是:/WEB-INF/views/[controller返回值].jsp ,当然视图解析器可以定义多个,(视图解析器不会处理ModelAndView中已经设置了View的请求,因为已经有View来处理了,那当然就不需要 它来解析到真正的视图View啦)

编写Controller控制器

这里我们使用例子的形式来说明

 

实现一个控制器类

@Controller

@RequestMapping("/user")

public class UserControl {

}

只要给类加上Controller的注解,并放在被扫描的包中,那么这个类就是一个控制器了,RequestMapping表明匹配的路径,可以写 在类或者类的方法上,如果类上面有RequestMapping注解,那么其下面的方法就是相对于类上面注解地址的一个相对路径

 

 

定义一个接管请求的方法

方法名:无任何要求

--------------------------------------------------------------

参数:(顺序以及个数无任何要求)

HttpServletRequest

HttpServletResponse

PrintWriter             相当于HttpResponse.getWriter()获得的对象

Map                       其实是获得了ModelAndView中的Model

BindingResult           绑定数据的处理结果

HttpSession             如果使用此参数,需要注意如果是第一次访问还没有session的话会报错

@PathVariable           用于接收路径变量

@RequestParam         相当于调用request.getParameter(“name”)方法

@CookieValue           获取cookie的值

@RequestHeader        获取header中的值

实体对象              会根据请求的参数名,注入到这个对象对于得属性中,必须提供set方法

等等等等等

--------------------------------------------------------------

返回值:

void                 

返回值是void,如果接收了PrintWriter 或者  HttpServletResponse 参数,那么返回的ModelAndView就是null,也就是直接将输出流输出到客户端,如果方法没有接收输出参数,后面会默认生成一个视图名

 

String                视图逻辑名

 

ModelAndView        是一个视图逻辑名+Map的封装类

其他任意类型         存入ModelAndView中的Model

--------------------------------------------------------------

 

不管我们的返回类型是什么,返回值会通过处理,最终返回一个ModelAndView或者null

例1:给方法定义一个请求映射并使用路径变量

    @RequestMapping("/id/{userid}/name/{username}")

    public String queryUser(@PathVariable("userid") long userID

           , @PathVariable("username") String userName

           , Map<String, User> model) {

      

       User user = new User();

       user.setUserID(userID);

       user.setUserName(userName);

      

       model.put("userInfo", user);

      

       return "Home";

    }

 

@RequestMapping定义路由映射,其中{userid} {username} 是PathVariable(路径变量)

这样我们只需访问 http://localhost:8080/SpringMVC/user/id/10001/name/liudehua 就能进入上面的方法

RequestMapping还可以使用通配符,如: /test/*/name/{name}

例2:接受请求参数

@RequestMapping("/save")

    public String save(@RequestParam("userName") String userName

           ,@RequestParam("Age") int age) {

      

       System.out .println(userName);

       System.out .println(age);

      

       return "Home";

    }

 

 

例3:请求参数直接注入到Model

@RequestMapping("/save")

    public String save(User user) {

      

       System.out .println(user.getUserID());

       System.out .println(user.getUserName());

      

       return "Home";

    }

 

例4:转发与重定向

转发:   (相当于 request.getRequestDispatcher(“”).forward(request, response))

return “forward:/user/test”;

 

重定向: (相当于response.redirect(“”))

return “redirect:/user/test”

return “redirect:http://www.google.com.hk”;

 

例5:根据HttpMethod来过滤请求

@RequestMapping(value="", method=RequestMethod.POST )

    public String Test(//…) {

       //…

}

 

 

例6:根据参数来进行过滤

@RequestMapping(params="hello=world", method={RequestMethod.GET, RequestMethod.POST})  

public String helloworld() {

}  

必须有个hello的参数并且名称为world,而且只能是get或post请求才会进入此方法

分享到:
评论

相关推荐

    Spring 3.x 企业应用开发实战光盘源码1-19章

    《Spring 3.x 企业应用开发实战》是一本深度探讨Spring框架在企业级应用中的实践指南,涵盖了从基础到高级的广泛主题。光盘源码提供了1-19章的完整示例,虽然去掉了class文件,但依然能为我们提供宝贵的代码结构和...

    基于注解的spring_3.0.x_MVC学习笔记

    在本篇基于注解的Spring 3.0.x MVC学习笔记中,我们将深入探讨Spring MVC在3.0版本中的变化,以及如何通过注解实现快速开发。Spring 3.0.x相较于2.5版本有着显著的改进,尤其在MVC模块上,提供了更加灵活和强大的...

    Spring Security 3.x 完整入门教程 源代码

    7. **CSRF保护**:Spring Security 3.x 默认集成了CSRF(跨站请求伪造)防护,可以通过配置关闭或定制相关行为,以防止恶意攻击。 8. **集成其他Spring模块**:Spring Security 可以无缝集成Spring MVC、Spring Web...

    Spring.3.x企业应用开发实战(完整版).part2

     《Spring3.x企业应用开发实战》是在《精通Spring2.x——企业应用开发详解》的基础上,经过历时一年的重大调整改版而成的,本书延续了上一版本追求深度,注重原理,不停留在技术表面的写作风格,力求使读者在熟练...

    Spring Security 3.x 入门教程 中文WORD版

    8. **集成其他Spring模块**: 3.x版本教程可能包含如何与Spring MVC、Spring Data等其他Spring模块无缝集成的内容。 9. **OAuth2支持**: Spring Security 3.x对OAuth2有初步支持,可以学习如何构建OAuth2服务器端和...

    基于SpringMVC+Hibernate4.0+Spring3.X的一个很简单的cms系统,

    文件名“helloworld-cms”可能表示这是一个入门级别的CMS项目,旨在帮助开发者理解如何结合SpringMVC、Hibernate4.0和Spring3.X来构建这样的系统。通常,这个压缩包可能包含源代码、配置文件、数据库脚本和其他必要...

    struts2+iBatis+spring2.x入门实例

    Struts2、iBatis和Spring 2.x是经典的Java Web开发框架组合,它们共同构建了一个灵活、可扩展且易于管理的应用程序架构。这个入门实例是针对初学者设计的,旨在帮助理解这三个框架如何协同工作。 **Struts2** 是一...

    Spring3.x企业应用开发实战(完整版) part1

     《Spring3.x企业应用开发实战》是在《精通Spring2.x——企业应用开发详解》的基础上,经过历时一年的重大调整改版而成的,本书延续了上一版本追求深度,注重原理,不停留在技术表面的写作风格,力求使读者在熟练...

    《精通Spring2.X企业应用开发详解》16-19章

    ======================================================================== &lt;br&gt;第1篇 概述 第1章 Spring概述 第2章 快速入门 第2篇 Spring核心技术 第3章 IoC容器概述 第4章 在IoC容器中...

    《精通Spring2.X企业应用开发详解》20-23

    ======================================================================== &lt;br&gt;第1篇 概述 第1章 Spring概述 第2章 快速入门 第2篇 Spring核心技术 第3章 IoC容器概述 第4章 在IoC容器中...

    spring bean XML配置入门

    1. **Spring框架基础**: Spring是一个开源的Java平台,它提供了全面的企业级应用程序开发框架,包括依赖注入(Dependency Injection, DI),面向切面编程(Aspect-Oriented Programming, AOP)以及各种容器和服务...

    Spring4.X最新帮助文档带视图结构树的

    ### Spring4.X 最新帮助文档知识点总结 #### I. Spring框架概述 **1. 开始使用Spring** - **介绍:** 本章节介绍了如何快速上手Spring框架的基础配置与使用方法,适合初学者快速理解Spring的基本概念。 - **知识...

    spring的入门程序示例

    在"actionSpring"这个子目录下,可能包含了与Spring MVC相关的文件,Spring MVC是Spring框架的一部分,用于构建Web应用程序。它包含DispatcherServlet、Controller、ViewResolver等组件,实现了请求分发、业务逻辑...

    spring3.0 mvc 注解实现helloworld输出

    这只是一个基础入门,Spring MVC的强大之处在于其灵活的配置、丰富的注解以及对其他Spring模块的无缝集成,可以满足复杂Web应用的需求。在实际开发中,你可以进一步学习`@RequestParam`、`@PathVariable`等注解以...

    strtust1_1_.x入门.

    尽管Struts1_1_.x在当时有着广泛的应用,但随着技术的发展,它逐渐被Spring MVC、Play Framework等更现代的框架取代。这些新框架提供了更好的注解支持、依赖注入和模块化设计,使得开发更加高效和灵活。 七、学习...

    《精通Spring2.X企业应用开发详解》随书源码1-15章

    ======================================================================== &lt;br&gt;第1篇 概述 第1章 Spring概述 第2章 快速入门 第2篇 Spring核心技术 第3章 IoC容器概述 第4章 在IoC容器中...

    Spring mvc参考文档

    3.Spring 3.x企业应用开发实战 4.spring+MVC中文教程pdf 5.Spring2.5.中文帮助文档 6.SpringGuide 7.SpringMVC配置文件 8.Spring从入门到精通 9.spring详细注解 10.精通Spring(清晰书页版) 11.使用注解方式配置的...

    Spring_3.x企业应用开发实战 目录

    ### Spring 3.x 企业应用开发实战:关键知识点解析 #### 第1章 Spring概述 - **1.1 认识Spring** - **定义与作用**:Spring 是一个开源的轻量级 Java 开发框架,它主要的目标是解决企业级应用开发中的复杂性问题...

    spring2.5.6.zip

    在本文中,我们将深入探讨Spring 2.5.6版本的基础模板配置,这是许多开发者入门Spring的重要一步。 1. **Spring概述** Spring 是一个开源的Java平台,它为构建企业级应用提供了全面的框架支持。Spring 2.5.6发布于...

    spring-framework-1.0-m1.zip

    《Spring Framework 1.0-M1 入门详解》 Spring Framework 1.0-M1 是Spring框架的一个早期里程碑版本,标志着Spring项目正式进入公众视野。这个版本为开发者提供了核心的IoC(Inversion of Control)容器和AOP...

Global site tag (gtag.js) - Google Analytics