这篇文章要实现的功能是:在一个Action中,有些业务方法只能是post提交上来的才能执行,有些方法是只能get提交上来的才能执行。

比如上篇文章中的UserAction.java(代码如下)

  1. package com.guigu.shen.Action6;
  2.  
  3. import org.springframework.stereotype.Controller;
  4. import org.springframework.ui.Model;
  5. import org.springframework.web.bind.annotation.RequestMapping;
  6. /**
  7. *
  8. *
  9. 请求路径可以拆分为:根模块的名字+分模块的名字
  10. 就是相当于当访问http://127.0.0.1:8080:项目名/user/register时就会进入到
  11. registerMethod方法。
  12.  
  13. */
  14. @Controller
  15. @RequestMapping(value="/user")//根模块的请求名字
  16. public class UserAction {
  17. /*
  18. * 员工注册
  19. *
  20. */
  21. @RequestMapping(value="/register")//分模块的请求名字
  22. /*
  23. * 重点注意我这里写的参数名字。String username,String salary这里的username,salary和
  24. * 表单提交上来的那个名字是一模一样的。神奇的是只要保证一模一样,就可以收集页面上的值,
  25. * 这也是Springmvc和Struts2很不同的一点,Spring是基于参数收集数据的。Struts2是基于实体去
  26. * 收集数据的。造成这个问题的原因是SpringMvc里面的Action(控制器类是单例模式),如果我们采用和Struts2
  27. * 中一个的方式,里面定义一个Emp emp这样,emp只有一个,如由80个人提交这个请求执行这个方法的话,
  28. * 会导致第80个人会把之前的人的数据都替换掉。所以SpringMvc这么做的话,80个人执行80个方法,就能把每次的
  29. * 数据都保存下来了。
  30. *
  31. *
  32. */
  33. public String registerMethod(Model model,String username,String salary)
  34. {
  35.  
  36. model.addAttribute("message", "员工注册成功");
  37. /*
  38. * username参数只要和页面中的name属性一样,就会被赋值。
  39. * salary同理
  40. */
  41. System.out.print("员工的信息"+username+";"+salary);
  42. return "/jsp/success.jsp";
  43. }
  44. @RequestMapping(value="/login")//分模块的请求名字
  45. public String loginMethod(Model model,String username)
  46. {
  47. model.addAttribute("message", "员工注册成功");
  48. System.out.println(username);
  49. return "/jsp/success.jsp";
  50.  
  51. }
  52.  
  53. }

我要把上面的public String registerMethod(Model model,String username,String salary)改为只能Post请求。

把上面的public String loginMethod(Model model,String username)即能Get请求也能接受Post请求。

怎么解决呢?通过注解。

代码修改如下:

  1. package com.guigu.shen.Action6;
  2.  
  3. import org.springframework.stereotype.Controller;
  4. import org.springframework.ui.Model;
  5. import org.springframework.web.bind.annotation.RequestMapping;
  6. import org.springframework.web.bind.annotation.RequestMethod;
  7. /**
  8. *
  9. *
  10. 请求路径可以拆分为:根模块的名字+分模块的名字
  11. 就是相当于当访问http://127.0.0.1:8080:项目名/user/register时就会进入到
  12. registerMethod方法。
  13.  
  14. */
  15. @Controller
  16. @RequestMapping(value="/user")//根模块的请求名字
  17. public class UserAction {
  18. /*
  19. * 员工注册
  20. *
  21. */
  22. @RequestMapping(method=RequestMethod.POST,value="/register")//分模块的请求名字
  23. /*
  24. * 重点注意我这里写的参数名字。String username,String salary这里的username,salary和
  25. * 表单提交上来的那个名字是一模一样的。神奇的是只要保证一模一样,就可以收集页面上的值,
  26. * 这也是Springmvc和Struts2很不同的一点,Spring是基于参数收集数据的。Struts2是基于实体去
  27. * 收集数据的。造成这个问题的原因是SpringMvc里面的Action(控制器类是单例模式),如果我们采用和Struts2
  28. * 中一个的方式,里面定义一个Emp emp这样,emp只有一个,如由80个人提交这个请求执行这个方法的话,
  29. * 会导致第80个人会把之前的人的数据都替换掉。所以SpringMvc这么做的话,80个人执行80个方法,就能把每次的
  30. * 数据都保存下来了。
  31. *
  32. *
  33. */
  34. public String registerMethod(Model model,String username,String salary)
  35. {
  36.  
  37. model.addAttribute("message", "员工注册成功");
  38. /*
  39. * username参数只要和页面中的name属性一样,就会被赋值。
  40. * salary同理
  41. */
  42. System.out.print("员工的信息"+username+";"+salary);
  43. return "/jsp/success.jsp";
  44. }
  45. @RequestMapping(value="/login",method={RequestMethod.POST,RequestMethod.GET})//分模块的请求名字
  46. public String loginMethod(Model model,String username)
  47. {
  48. model.addAttribute("message", "员工注册成功");
  49. System.out.println(username);
  50. return "/jsp/success.jsp";
  51.  
  52. }
  53.  
  54. }

注意:如果不书写method=RequestMethod.POST的话,GET和POST请求都支持

13SpringMvc_限定某个业务控制方法,只允许GET或POST请求方式访问的更多相关文章

  1. 限定某个业务控制方法,只允许GET或POST请求方式访问

    可以在业务控制方法前,指明该业务控制方法只能接收GET或POST的请求 @Controller @RequestMapping(value="/user") public clas ...

  2. 15SpringMvc_在业务控制方法中写入模型变量收集参数,且使用@InitBind来解决字符串转日期类型

    之前第12篇文章中提到过在业务控制方法中写入普通变量收集参数的方式,也提到了这种凡方式的弊端(参数很多怎么办),所以这篇文章讲的是在业务控制方法中写入模型变量来收集参数.本文的案例实现的功能是,在注册 ...

  3. 在业务控制方法中写入包装User的模型来收集参数

    可以在业务控制方法中书写0个或多个模型来收集客户端的参数 1)  如果多个模型中有相同的属性时,可以用user.name或admin.name来收集客户端参数 2)  用一个新的模型将User和Adm ...

  4. 在业务控制方法中写入User,Admin多个模型收集参数

    1)  可以在业务控制方法中书写1个模型来收集客户端的参数 2)  模型中的属性名必须和客户端参数名一一对应 3)  这里说的模型不是Model对象,Model是向视图中封装的数据 @Controll ...

  5. 在业务控制方法中写入Request,Response等传统web参数

    可以在业务控制方法中书写传统web参数,这种方式我们不提倡,耦合了 @Controller @RequestMapping(value="/user") public class ...

  6. 17SpringMvc_在业务控制方法中写入包装User的模型来收集参数——解决问题

    在解决问题之前,我要说明一下jsp页面上填入信息,一个用户的信息比如用户的名字,用户的电话,用户的手机等等,在这个jsp页面上填好信息后,转到有个action处理这个信息.原理是什么? 在jsp页面上 ...

  7. 16SpringMvc_在业务控制方法中写入User,Admin多个模型收集参数——引出问题

    上面文章时普通的业务那个方法中收集一个实体类,这篇文章想收集两个实体类. 文本要做的是:在person.jsp页面上,有两个表单.分别是普通用户和管理员用户的表单(普通用户的表单和管理员用户的表单里面 ...

  8. 14SpringMvc_在业务控制方法中写入HttpServletRequest,HttpServletResponse等传统web参数(这个知识点知道就好了,不推荐这么去做)

    这篇文章解决的问题是怎么在业务方法里面引入我们熟悉的HttpServletRequest和HttpServletRespon? 答案:这种引入传统的web参数的做法不推荐去做,因为这么做会实行高度耦合 ...

  9. 19SpringMvc_在业务控制方法中收集List集合中包含JavaBean参数

    本文要实现的功能是给一张表单:

随机推荐

  1. SAP中的Currency Converting Factor

    ABAP编程中,有个概念很重要,即Currency Converting Factor(货币转换因子).可能很多ABAP初学者都不知道这是什么东西,这里我们就简单探讨下. 1. 什么是货币转换因子 在 ...

  2. 设置ArcGIS的外观改回到出厂

    在一般的软件中,都可以在工具-选项中打开相关设置将应用程序的外观改回到出厂.但ArcGIS好像没有,但查帮助文档原来是这样: 配置的更改保存在模板文档中(例如,ArcMap 将其更改保存在 Norma ...

  3. Microsoft Dynamics CRM 2011/2013 JS操作集锦

    1.Xrm.Page.context用户ID:getUserId()用户角色:getUserRoles()用户语言:getUserLcid()组织名称:getOrgUniqueName()组织语言:g ...

  4. Sharepoint 2013 创建TimeJob 自动发送邮件

    创建Time Job 继承继承SPJobDefinition 并且实现里边的 Execute方法 部署 可以手动部署,把程序集放到GAC,手动激活feature 如果部署的时候说feature已经存在 ...

  5. SharedPreference.Editor的apply和commit方法异同

    这两个方法的区别在于: 1. apply没有返回值而commit返回boolean表明修改是否提交成功 2. apply是将修改数据原子提交到内存, 而后异步真正提交到硬件磁盘, 而commit是同步 ...

  6. Android SDK Manager 在win8.1上的闪退问题

    全新安装的Windows 8.1的系统,Android SDK,JDK都是最新的版本,但是SDK Manager打开是命令行窗口一闪而过,就再没反映了. 通过搜索,确定了一个问题就是SDK目录tool ...

  7. GCD中的dispatch_set_target_queue的用法及作用

    (一),使用dispatch_set_target_queue更改Dispatch Queue的执行优先级 dispatch_queue_create函数生成的DisPatch Queue不管是Ser ...

  8. 多线程基础(五)NSThread线程通信

    5.多线程基础 线程间通信   什么叫线程间通信 在一个进程中,线程往往不是孤立存在的,多个线程之间需要经常进行通信   线程间通信的体现 1个线程传递数据给另一个线程 在1个线程中执行完特定任务后, ...

  9. JavaScript Patterns 2.12 Writing API Docs

    Free and open source tools for doc generation: the JSDoc Toolkit (http://code.google.com/p/jsdoc-too ...

  10. 斐波那契数列 递归 尾递归 递推 C++实现

    ==================================声明================================== 本文原创,转载请注明作者和出处,并保证文章的完整性(包括本 ...