`
残血舞
  • 浏览: 31715 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

springMVC基于注解(annotation)的Hello world

阅读更多
spring2.5全面支持了annotation方式(当然spring3肯定支持了),使用annotation的方式,可以大大减少xml的维护量。现在写一个hello world例子

web.xml和原来一样,没有变化。可以见《我的第一个springMVC例子之Hello world》里面的web.xml配置。也就说“分发器(Dispatcher)”没有变。主要变化在“控制器”和“映射处理器”方面。“视图解析器”也没有变化。见roadrantz-servlet.xml的内容,这里面变化挺大的。



roadrantz-servlet.xml

<?xml version="1.0"encoding="UTF-8"?>

<beansxmlns="http://www.springframework.org/schema/beans"

              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

              xmlns:context="http://www.springframework.org/schema/context"

            xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <context:annotation-config></context:annotation-config>

    <context:component-scanbase-package="com.baidu"></context:component-scan>

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

        <propertyname="prefix">

            <value>/</value>

        </property>

        <propertyname="suffix">

             <value>.jsp</value>

        </property>

    </bean>

</beans>


在这里,不用在指定具体的Controller了,只需要指定Controller 具体的包(base-package="com.baidu")即可,spring回到此包下的所有注解进行扫描。这样配置就结束了。再看HomePageControler.java的代码:

HomePageController.java
packagecom.baidu;

importorg.springframework.stereotype.Controller;

importorg.springframework.ui.Model;

importorg.springframework.web.bind.annotation.RequestMapping;

/**

  * Created by IntelliJ IDEA.

  * User: liuzhaoyang

  * Date: 2011-2-28

  * Time: 22:43:08 */

@Controller


public class HomePageController {

     @RequestMapping("/home.htm")

     public String sayHello(Model model) {

         model.addAttribute("rants","hello,world");

         return "index";

     }

     @RequestMapping("/url/homePage.htm")

     public String sayHelloHomePage(Model model) {

         model.addAttribute("rants","spring MVC");

         return "index";

     }    

  }

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

用“@Controller ”指定控制类,用@RequestMapping("/home.htm")指定“映射器”的映射路径。用“@RequestMapping()”指定控制器的执行方法,以及返回的对象。在这里,HomePageController不需要在继承什么Controller对象了。如果访问http://localhost:8080/url/homePage.htm就触发sayHelloHomePage(Model model)方法,如果访问http://localhost:8080/home.htm,就会触发sayHello(Model model)。这样就OK了,当然,如果不需要向页面传值,Model model参数可以不要。index.jsp不需要修改。运行一下,看看结果:

[img] http://hiphotos.baidu.com/hivemind/pic/item/2f599811f44dba2acb80c43a.jpg[/img]
在使用同一个Controller处理多个URL时,可以通过一个URL地址,不同的请求参数来区别,如


@Controller


public class HomePageController {

     @RequestMapping("/home.htm")

     public String sayHello(Model model) {

         model.addAttribute("rants","hello,world");

         return "index";

     }


     @RequestMapping("/home.htm")

     public String sayHelloHomePage(Model model) {

         model.addAttribute("rants","spring MVC");

         return "index";

     }


}

执行结果如图:



另外,还可以通过HTTP Method来区别这些相同的URL请求


     @RequestMapping(method = RequestMethod.GET,value = "/home.htm")

     public String sayHello(Model model) {

         model.addAttribute("rants","hello,world");

         return "index";

     }


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

     public String sayHelloHomePage(Model model) {

         model.addAttribute("rants","spring MVC");

         return "index";

     }


执行结果如图:




通过Controller方法返回一个ModelMap对象,在这种情况下,视图名由请求的URL决定


     @RequestMapping(value = "/home.htm")

     public String sayHelloModelMap() {

          ModelMap model = new ModelMap();

          model.addAttribute("rants", "spring ModelMap");

         return model;

     }

访问的路径必须是 http://localhost:8080/index.htm,需要和  @RequestMapping(value = "/home.htm") 对应

执行结果如下图示:



spring MVC还可以向Controller方法传入request,session等HttpServlet等特殊的对象

例如:

@RequestMapping(value = "/index.htm")

public void sayHelloHandleRequest(HttpServletRequest request, HttpServletResponse response, HttpSession session) {

        String param = request.getParameter("param");

        logger.debug("parma value is: " + param);

         if (param != null) {

             session.setAttribute("param", param);

       }

}

通过访问 http://localhost:8080/index.htm?param=hi,world ,可以得到如下结果:



请求参数的获取

在Controller方法中声明方法参数,那么同名的HTTP请求参数会自动转换为响应的类型,并传入到方法中。

如下面的代码,方法中的参数会自动和地址栏的参数做对应。

@RequestMapping(value = "/index.htm")

public void sayHelloParam(String username, String password, int age) {

      logger.debug("username is: " + username);

      logger.debug("password is: " + password);

      logger.debug("age is: " + age);

}

执行截图:



参数自动映射到对象

具体就不多说了,见截图即可。





小结如下:

1、处理多个请求

>> 在每个方法前面使用@RequestMapping("/名称.htm"),不同的名称,处理不同的请求  缺点:xxx.htm太多不利于跟踪,复制程度增加。

>>在controller类前面定义@RequestMapping("/名称.htm"),在方法前面添加注释@RequestMapping(params="param=sec")来处理,分发器通过参数来决定执行哪个方法。

2、处理不同的http请求:

>>在方法前面增加注释:RequestMethod 有Post,get,put...如@RequestMapping(params="param=sec",method=RequestMethod.POST)

3、参数处理(自由转换类型):

>>普通属性:如果入参是基本数据类型(如int、long、float等),URL请求参数中一定要有对应的参数,否则将抛出TypeMismatchException异常,提示无法将null转换为基本数据类型。

>>对象及属性:Userbean的userID属性的类型是基本数据类型,但是如果URL中不存在userID参数,spring也不会报错,此时UserBean.userID的值为0 。如果userBean对象拥有一个dep.deptId的级联属性,那么它将和dept.deptId参数绑定。

4、参数处理(明确指定参数 匹配 自动转换类型)

>>普通属性和对象及属性:@RequestParam("id")注解,所以它将和id的URL参数绑定

5、绑定域中的某个属性

>> request    ModelMap类,它作为通用的模型数据承载对象,传递数据供视图所用,代替request.setParam

>> Session    @SessionAttributes("currUser")  //(1)将ModelMap中属性名为currUser的属性放到session属性列表中,以便这个属性可以跨请求访问(写在类目的前面)

>> Session 多参数 @SessionAttributes({“attr1”,”attr2”})

>> 取值绑定到方法上 (@ModelAttribute("currUser") User user)。

 

分享到:
评论

相关推荐

    Maven+SpringMVC的入门级HelloWorld实例

    例如,在创建一个简单的HelloWorld项目时,我们会在pom.xml中声明SpringMVC的依赖: ```xml &lt;groupId&gt;org.springframework &lt;artifactId&gt;spring-webmvc &lt;version&gt;5.3.22 ``` **SpringMVC简介** SpringMVC...

    springmvc-helloworld

    本教程将通过 "springmvc-helloworld" 这个示例项目,帮助你了解如何搭建 SpringMVC 环境以及其工作原理。 ### 一、SpringMVC 架构 SpringMVC 的核心组件包括 DispatcherServlet、Model、ViewResolver 和 ...

    springmvc框架入门 输出hello world

    本教程将引导你入门Spring MVC,并通过一个简单的“Hello, World”示例来展示其基本用法。 首先,你需要了解Spring MVC的基本组成部分: 1. **DispatcherServlet**:它是Spring MVC的入口点,负责接收HTTP请求并将...

    基于注解的springMVC简单的例子

    **基于注解的SpringMVC简介** SpringMVC是Spring框架的一个模块,主要负责处理Web应用的请求和响应。在传统的SpringMVC配置中,我们需要通过XML文件来配置控制器、视图解析器、模型-视图-控制器(MVC)的各个组件。...

    SpringMVC 3.0 HelloWorld 源码 (Maven)

    在本项目“SpringMVC 3.0 HelloWorld”中,我们将深入探讨如何使用Maven构建一个简单的Spring MVC应用。Maven是一个项目管理和综合工具,它帮助开发者管理依赖、构建项目并遵循标准的开发过程。 首先,我们需要了解...

    使用Springmvc创建一个HelloWorld.zip

    在本文中,我们将深入探讨如何使用Spring MVC框架创建一个简单的"Hello World"应用程序。Spring MVC是Spring框架的一个组件,专门用于构建Web应用程序。它提供了一种模型-视图-控制器(MVC)架构,使开发者可以更...

    SpringMVC跑Hello World

    在“Springmvc_1_helloworld”这个项目中,我们可以找到上述所有配置和代码的示例。通过运行这个项目,我们可以验证SpringMVC如何处理一个简单的“Hello World”请求,并了解其背后的机制。这只是一个起点,...

    SpringMVC------从HelloWorld开始

    让我们从一个简单的"HelloWorld"示例开始,深入了解SpringMVC的工作原理。 首先,创建一个`HelloWorld`控制器是开始任何SpringMVC项目的第一步。在Java中,我们通常会创建一个继承自`org.springframework....

    Springmvc的helloWorld实例

    **Spring MVC HelloWorld 实例详解** 在Java Web开发中,Spring MVC是一个非常重要的框架,它用于构建灵活、可扩展的Web应用程序。本实例将带你深入理解Spring MVC 4.0的基本用法,通过一个简单的"Hello World"应用...

    springMVC使用注解方式进行页面跳转

    - 在`helloWorld`方法上使用`@RequestMapping("helloWorld")`注解指定了处理`/index/helloWorld`路径的请求。 - 方法体中的`return "success";`表示返回名为`success`的视图。根据视图解析器的配置,最终会指向`/...

    SpringMVC版本HelloWorld

    **SpringMVC版本HelloWorld详解** SpringMVC是Spring框架的一部分,它是一个用于构建Web应用程序的模型-视图-控制器(MVC)架构。在本文中,我们将详细讲解如何搭建一个基本的SpringMVC环境,并实现一个简单的...

    (代码)SpringMVC第1讲:HelloWorld

    在本教程的第1讲中,我们将深入理解SpringMVC的基础,通过一个简单的"HelloWorld"示例来开启我们的学习之旅。 首先,我们需要在项目中引入SpringMVC的依赖。这通常通过在Maven或Gradle的配置文件中添加对应的依赖项...

    使用springmvc框架编写helloworld,使用eclispe开发工具

    在本文中,我们将深入探讨如何使用Spring MVC框架创建一个简单的"Hello, World!"应用程序,并结合Eclipse集成开发环境(IDE)进行开发。Spring MVC是Spring框架的一个模块,它专门用于构建Web应用程序,提供了模型-...

    SpringMvc HelloWorld

    在创建一个 Spring MVC 的 "Hello, World!" 程序时,通常需要以下步骤: 1. **环境准备**:确保已安装 JDK 和 Apache Maven 或 Gradle,这两个是构建工具,用来管理项目的依赖。 2. **创建 Maven 项目**:使用 IDE...

    SpringMVC Helloworld AbstractController 实例

    然而,自Spring 3.0之后,推荐使用基于注解的控制器(如`@Controller`注解),因为它们更简洁且易于理解。尽管如此,了解`AbstractController`可以帮助我们理解Spring MVC的历史和工作原理。 首先,让我们理解MVC...

    SpringMVC 配置 最简单的MAVEN hello world

    4. **编写Controller**:在指定的包(如`com.example.helloworld`)下创建Java类,添加`@Controller`注解,并定义处理方法。例如: ```java package com.example.helloworld; import org.springframework....

    Spring MVC HelloWorld入门例子

    本篇文章将带你通过一个简单的 "HelloWorld" 示例,深入了解 Spring MVC 的基本工作原理和配置过程。 首先,我们来了解一下 Spring MVC 的核心概念: 1. **DispatcherServlet**:这是 Spring MVC 的前端控制器,...

    基于xml配置的spring mvc Helloworld实例

    在这个基于XML配置的Spring MVC HelloWorld实例中,我们将深入理解如何设置并运行一个基本的Spring MVC项目。 首先,Spring MVC的核心在于DispatcherServlet,它是整个应用的入口点,负责处理所有的HTTP请求。在`...

    基于annotation的SpringMVC入门小例子

    **基于Annotation的SpringMVC入门小例子** 在Java Web开发中,SpringMVC是一个非常流行的框架,它使得构建Web应用程序变得更加简洁和高效。本篇将详细介绍如何使用注解(Annotation)来配置和运行一个基本的...

    SpringMVC注解例子

    ### SpringMVC注解配置详解 #### 一、SpringMVC简介 SpringMVC是Spring框架的一个模块,它提供了一种清晰的模型-视图-控制器(MVC)设计模式实现,帮助开发人员创建灵活且松散耦合的Web应用程序。与Struts等其他MVC...

Global site tag (gtag.js) - Google Analytics