注解式开发初步

常用的两个注解:

@Controller:是SpringMVC中最常用的注解,它可以帮助定义当前类为一个Spring管理的bean,同时指定该类是一个控制器,可以用来接受请求。标识当前类是控制层的一个具体的实现

@requestMapping:放在方法上面用来指定某个方法的路径,当它放在类上的时候相当于命名空间需要组合方法上的requestmapping来访问

扩充:

注解名称

作用

@Controller

注解标明该类需要Spring容器自动加载,将一个类成为 Spring 容器的 Bean。

@RequestMapping

可以标注在类定义处,将 Controller 和特定请求关联起来;还可以标注在方法签名处。所以在类声明处标注的 @RequestMapping 相当于让 POJO 实现了 Controller 接口,而在方法定义处的 @RequestMapping 相当于让 POJO 扩展 Spring 预定义的 Controller(如 SimpleFormController 等)。

@Resource

用来注解该属性的SETTER方法参数来源于Spring Bean

@ModelAttribute

①绑定请求参数到命令对象:放在功能处理方法的入参上时,用于将多个请求参数绑定到一个命令对象,从而简化绑定流程,而且自动暴露为模型数据用于视图页面展示时使用;

②暴露表单引用对象为模型数据:放在处理器的一般方法(非功能处理方法)上时,是为表单准备要展示的表单引用对象,如注册时需要选择的所在城市等,而且在执行功能处理方法(@RequestMapping注解的方法)之前,自动添加到模型对象中,用于视图页面展示时使用;

③暴露@RequestMapping方法返回值为模型数据:放在功能处理方法的返回值上时,是暴露功能处理方法的返回值为模型数据,用于视图页面展示时使用。

@SessionAttributes

代表被注解对象会被存放到HttpSession作用域

@PathVariable

用于将请求URL中的模板变量映射到功能处理方法的参数上

@requestParam

用于将请求参数区数据映射到功能处理方法的参数上

前提是:配置一个包扫描器

案例:使用@Controller和@RequestMapping()实现欢迎程序

配置包扫描器:

FirstController:

  1. package cn.controller;
  2.  
  3. import org.springframework.web.bind.annotation.RequestMapping;
  4. import org.springframework.stereotype.Controller;
  5. /**
  6. *
  7. * @author 景佩佩
  8. *
  9. */
  10. @Controller
  11. public class FirstController{
  12. @RequestMapping("/dofirst.do")
  13. public String doFirst(){
  14.  
  15. return "/WEB-INF/index.jsp";
  16. }
  17.  
  18. }

一个处理类中定义N个处理器方法

  1. package cn.controller;
  2.  
  3. import org.springframework.web.bind.annotation.RequestMapping;
  4. import org.springframework.stereotype.Controller;
  5. /**
  6. *
  7. * @author 景佩佩
  8. *
  9. */
  10. @Controller
  11. public class FirstController{
  12. @RequestMapping("/dofirst.do")
  13. public String doFirst(){
  14.  
  15. return "/WEB-INF/index.jsp";
  16. }
  17.  
  18. @RequestMapping("/dosecond.do")
  19. public String doSecond(){
  20. return "/WEB-INF/index.jsp";
  21. }
  22.  
  23. }

命名空间:

请求中的通配符用法

  1. package cn.controller;
  2.  
  3. import java.util.HashMap;
  4. import java.util.Map;
  5.  
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. import javax.servlet.http.HttpSession;
  9.  
  10. import org.springframework.stereotype.Controller;
  11. import org.springframework.ui.Model;
  12. import org.springframework.web.bind.annotation.RequestMapping;
  13. import org.springframework.web.bind.annotation.RequestMethod;
  14. /**
  15. *
  16. * @author 景佩佩
  17. *
  18. */
  19. @Controller
  20. //命名空间
  21. @RequestMapping("/hr")
  22. public class FirstController{
  23. @RequestMapping("/dofirst.do")
  24. public String doFirst(){
  25.  
  26. return "/WEB-INF/index.jsp";
  27. }
  28.  
  29. @RequestMapping("/dosecond.do")
  30. public String doSecond(){
  31. return "/WEB-INF/index.jsp";
  32. }
  33.  
  34. @RequestMapping("/*third.do") // *代表的0个或者N个字符,匹配上的所有以third结尾的格式
  35. public String doThird(){
  36. return "/WEB-INF/index.jsp";
  37. }
  38.  
  39. @RequestMapping ("/fourth*.do") //*代表的0个或者N个字符,匹配所有以fourth开头的地址格式
  40. public String doFour(){
  41. return "/WEB-INF/index.jsp";
  42. }
  43.  
  44. @RequestMapping("/**/fiveth.do") //必须以fiveth结尾,前面可以有N级别目录,也可以是0级
  45. public String doFive(){
  46. return "/WEB-INF/index.jsp";
  47. }
  48.  
  49. @RequestMapping("/*/sixth*.do") //在hr和sixth之前必须存在一级路径。并且只能是一级
  50. public String doSix(){
  51. return "/WEB-INF/index.jsp";
  52. }
  53.  
  54. }

请求中方式的定义

对于@RequestMapping,有一个属性method,用于对被注解方法所处理请求的提交方式进行限制,只有满足该method属性指定的提交方式,才会执行被注解方法。 method属性的取值为RequestMethod,是一个枚举常量。常用值为 RequestMethod.GET 与 RequestMethod.POST

  1. package cn.controller;
  2.  
  3. import java.util.HashMap;
  4. import java.util.Map;
  5.  
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. import javax.servlet.http.HttpSession;
  9.  
  10. import org.springframework.stereotype.Controller;
  11. import org.springframework.ui.Model;
  12. import org.springframework.web.bind.annotation.RequestMapping;
  13. import org.springframework.web.bind.annotation.RequestMethod;
  14. /**
  15. *
  16. * @author 景佩佩
  17. *
  18. */
  19. @Controller
  20. //命名空间
  21. @RequestMapping("/hr")
  22. public class FirstController{
  23.  
  24. @RequestMapping(value="/dofirst.do",method=RequestMethod.GET)
  25. public String doFirst(){
  26. return "/WEB-INF/index.jsp";
  27. }
  28.  
  29. }

默认是GET,POST的话会报错405

处理器方法的参数

处理器方法中常用的参数有五类,这些参数会在系统调用时由系统自动赋值,即程序员可在方法内直接使用
1)HttpServletRequest
2)HttpServletResponse
3)HttpSession
4)用于承载数据的Model
5)请求中所携带的请求参数

我们先用前三种

  1. package cn.controller;
  2.  
  3. import java.util.HashMap;
  4. import java.util.Map;
  5.  
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. import javax.servlet.http.HttpSession;
  9.  
  10. import org.springframework.stereotype.Controller;
  11. import org.springframework.ui.Model;
  12. import org.springframework.web.bind.annotation.RequestMapping;
  13. import org.springframework.web.bind.annotation.RequestMethod;
  14. /**
  15. *
  16. * @author 景佩佩
  17. *
  18. */
  19. @Controller
  20. //命名空间
  21. @RequestMapping("/hr")
  22. public class FirstController{
  23. @RequestMapping(value="/dofirst.do",method=RequestMethod.GET)
  24. public String doFirst(HttpServletRequest request,HttpServletResponse response,HttpSession session,Model model){
  25. System.out.println("request\t"+request);
  26. System.out.println("response\t"+response);
  27. System.out.println("session\t"+session);
  28. System.out.println("model\t"+model);
  29. return "/WEB-INF/index.jsp";
  30. }
  31.  
  32. }

请求中所携带的请求参数——零散参数

  1. @RequestMapping(value="/dofirst.do",method=RequestMethod.GET)
  2.     public String doFirst(Model model){
  3.      
  4.         Map<String,Object> datas=new HashMap<String, Object>();
  5.         datas.put("uname", "火狐");
  6.         model.addAllAttributes(datas);
  7.         System.out.println(model);
  8.          
  9.         return ""/WEB-INF/index.jsp";
  10.     }

对象参数:装配成实体

自定义实体类:UserInfo

  1. package cn.entity;
  2.  
  3. public class UserInfo {
  4. private String uname;
  5.  
  6. public String getUname() {
  7. return uname;
  8. }
  9.  
  10. public void setUname(String uname) {
  11. this.uname = uname;
  12. }
  13.  
  14. }

FirstController控制器类方法参数是实体类对象:

  1. package cn.controller;
  2.  
  3. import org.springframework.stereotype.Controller;
  4. import org.springframework.web.bind.annotation.RequestMapping;
  5.  
  6. import cn.entity.UserInfo;
  7.  
  8. @Controller
  9. //命名空间
  10. @RequestMapping("/hr")
  11. public class FirstController{
  12.  
  13. @RequestMapping(value="/dofirst.do")
  14. public String doFirst(UserInfo info){
  15. System.out.println(info.getUname());
  16.  
  17. return "/WEB-INF/index.jsp";
  18. }
  19.  
  20. }

appliactiobContext.xml

jsp页面form表单提交:

解决乱码问题:Web.xml配置编码过滤器---CharacterEncodingFilter

Spring MVC注解开发入门的更多相关文章

  1. Spring _day02_IoC注解开发入门

    1.Spring IoC注解开发入门 1.1 注解开发案例: 创建项目所需要的jar,四个基本的包(beans core context expression ),以及两个日志记录的包,还要AOP的包 ...

  2. Spring MVC 注解开发详解

    @Controller控制器定义 1.Controller是单利模式,被多个线程请求共享,因此设计成无序状态. 2.通过@controller标注即可将class定义为一个controller类.为使 ...

  3. Spring的IOC注解开发入门1

    基本知识点如下: 引入注解约束,配置组件扫描 类上的注解: @Conponent  @Controller @Service @Repository 普通属性的注解   @value 对象属性的注解  ...

  4. spring mvc 注解入门示例

    web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi=" ...

  5. Spring MVC 教程,快速入门,深入分析

    http://elf8848.iteye.com/blog/875830/ Spring MVC 教程,快速入门,深入分析 博客分类: SPRING Spring MVC 教程快速入门  资源下载: ...

  6. MyBatis+Spring+Spring MVC整合开发

    MyBatis+Spring+Spring MVC整合开发课程观看地址:http://www.xuetuwuyou.com/course/65课程出自学途无忧网:http://www.xuetuwuy ...

  7. spring mvc 注解@Controller @RequestMapping @Resource的详细例子

    现在主流的Web MVC框架除了Struts这个主力 外,其次就是Spring MVC了,因此这也是作为一名程序员需要掌握的主流框架,框架选择多了,应对多变的需求和业务时,可实行的方案自然就多了.不过 ...

  8. Spring MVC注解的一些案列

    1.  spring MVC-annotation(注解)的配置文件ApplicationContext.xml <?xml version="1.0" encoding=& ...

  9. spring mvc(注解)上传文件的简单例子

    spring mvc(注解)上传文件的简单例子,这有几个需要注意的地方1.form的enctype=”multipart/form-data” 这个是上传文件必须的2.applicationConte ...

随机推荐

  1. Dreamweaver 扩展开发:C-level extensibility and the JavaScript interpreter

    The C code in your library must interact with the Dreamweaver JavaScript interpreter at the followin ...

  2. [C#] 简单的 Helper 封装 -- RegularExpressionHelper

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  3. JS魔法堂:不完全国际化&本地化手册 之 理論篇

    前言  最近加入到新项目组负责前端技术预研和选型,其中涉及到一个熟悉又陌生的需求--国际化&本地化.熟悉的是之前的项目也玩过,陌生的是之前的实现仅仅停留在"有"的阶段而已. ...

  4. JAVA FreeMarker工具类

    FreeMarkerUtil.java package pers.kangxu.datautils.utils; import java.io.File; import java.io.StringW ...

  5. 手把手教你做个人 app

    我们都知道,开发一个app很大程度依赖服务端:服务端提供接口数据,然后我们展示:另外,开发一个app,还需要美工协助切图.没了接口,没了美工,app似乎只能做成单机版或工具类app,真的是这样的吗?先 ...

  6. Toast显示图文界面——Android开发之路1

    Toast的多种使用方法 Toast其实是一个功能特别强大的组件,不仅仅可以吐司一个文本内容,还可以吐司图片以及图文混排的界面.具体用法如下: 第一种:简单的纯文本内容的吐司: Toast.makeT ...

  7. 敏捷转型历程 - Sprint3 回顾会

    我: Tech Leader 团队:团队成员分布在两个城市,我所在的城市包括我有4个成员,另外一个城市包括SM有7个成员.另外由于我们的BA离职了,我暂代IT 的PO 职位.PM和我在一个城市,但他不 ...

  8. 面向未来的友好设计:Future Friendly

    一年前翻译了本文的一部分,最近终于翻译完成.虽然此设计思想的提出已经好几年了,但是还是觉得应该在国内推广一下,让大家知道“内容策略”,“移动优先”,“响应式设计”,“原子设计”等设计思想和技术的根源. ...

  9. DOM对象模型接口规范中的四个基本接口

    DOM对象模型的四个基本接口 在DOM对象模型接口规范中,有四个基本的接口:Document,Node,NodeList以及NamedNodeMap.在这四个基本接口中,Document接口是对文档进 ...

  10. 利用HTML5 的Datalist 元素实现输入提示

    HTML5有无限可能,总是在释出一些新鲜实用的功能,让原生的web环境更加炫酷. 今天看到datalist 这个元素,可以用来预先定义一个输入框的潜在选项,也就是我们在平时项目中经常用jQuery插件 ...