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

---恢复内容开始---

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

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

/**
 * Create by 沈晓权
 * Create on 2016年8月8日下午8:53:34
 */
package com.guigu.shen.Action6;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
/**
 *
 *
请求路径可以拆分为:根模块的名字+分模块的名字
就是相当于当访问http://127.0.0.1:8080:项目名/user/register时就会进入到
registerMethod方法。

 */
@Controller
@RequestMapping(value="/user")//根模块的请求名字
public class UserAction {
    /*
     * 员工注册
     *
     */
@RequestMapping(value="/register")//分模块的请求名字
/*
 * 重点注意我这里写的参数名字。String username,String salary这里的username,salary和
 * 表单提交上来的那个名字是一模一样的。神奇的是只要保证一模一样,就可以收集页面上的值,
 * 这也是Springmvc和Struts2很不同的一点,Spring是基于参数收集数据的。Struts2是基于实体去
 * 收集数据的。造成这个问题的原因是SpringMvc里面的Action(控制器类是单例模式),如果我们采用和Struts2
 * 中一个的方式,里面定义一个Emp emp这样,emp只有一个,如由80个人提交这个请求执行这个方法的话,
 * 会导致第80个人会把之前的人的数据都替换掉。所以SpringMvc这么做的话,80个人执行80个方法,就能把每次的
 * 数据都保存下来了。
 *
 *
 */
public String registerMethod(Model model,String username,String salary)
{

    model.addAttribute("message", "员工注册成功");
    /*
     * username参数只要和页面中的name属性一样,就会被赋值。
     * salary同理
     */
    System.out.print("员工的信息"+username+";"+salary);
    return "/jsp/success.jsp";
}
@RequestMapping(value="/login")//分模块的请求名字
public String loginMethod(Model model,String username)
{
    model.addAttribute("message", "员工注册成功");
    System.out.println(username);
    return "/jsp/success.jsp";

}

}

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

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

怎么解决呢?通过注解。

代码修改如下:

package com.guigu.shen.Action6;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
/**
 *
 *
请求路径可以拆分为:根模块的名字+分模块的名字
就是相当于当访问http://127.0.0.1:8080:项目名/user/register时就会进入到
registerMethod方法。

 */
@Controller
@RequestMapping(value="/user")//根模块的请求名字
public class UserAction {
    /*
     * 员工注册
     *
     */
@RequestMapping(method=RequestMethod.POST,value="/register")//分模块的请求名字
/*
 * 重点注意我这里写的参数名字。String username,String salary这里的username,salary和
 * 表单提交上来的那个名字是一模一样的。神奇的是只要保证一模一样,就可以收集页面上的值,
 * 这也是Springmvc和Struts2很不同的一点,Spring是基于参数收集数据的。Struts2是基于实体去
 * 收集数据的。造成这个问题的原因是SpringMvc里面的Action(控制器类是单例模式),如果我们采用和Struts2
 * 中一个的方式,里面定义一个Emp emp这样,emp只有一个,如由80个人提交这个请求执行这个方法的话,
 * 会导致第80个人会把之前的人的数据都替换掉。所以SpringMvc这么做的话,80个人执行80个方法,就能把每次的
 * 数据都保存下来了。
 *
 *
 */
public String registerMethod(Model model,String username,String salary)
{

    model.addAttribute("message", "员工注册成功");
    /*
     * username参数只要和页面中的name属性一样,就会被赋值。
     * salary同理
     */
    System.out.print("员工的信息"+username+";"+salary);
    return "/jsp/success.jsp";
}
@RequestMapping(value="/login",method={RequestMethod.POST,RequestMethod.GET})//分模块的请求名字
public String loginMethod(Model model,String username)
{
    model.addAttribute("message", "员工注册成功");
    System.out.println(username);
    return "/jsp/success.jsp";

}

}

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

时间: 2024-12-28 09:40:55

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

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

可以在业务控制方法前,指明该业务控制方法只能接收GET或POST的请求 @Controller @RequestMapping(value="/user") public class UserAction{ @RequestMapping(value="/add",method=RequestMethod.POST) public String add(Model model,int id,String name,double sal) throws Excepti

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

可以在业务控制方法中书写0个或多个模型来收集客户端的参数 1)  如果多个模型中有相同的属性时,可以用user.name或admin.name来收集客户端参数 2)  用一个新的模型将User和Admin再封装一次 public class User { private Integer id; private String name; private Double sal; private Date hiredate; public User(){} public Integer getId()

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

可以在业务控制方法中书写传统web参数,这种方式我们不提倡,耦合了 @Controller @RequestMapping(value="/user") public class UserAction{ @RequestMapping(value="/add",method=RequestMethod.POST) public void add(HttpServletRequest request,HttpServletResponse response) thro

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

1)  可以在业务控制方法中书写1个模型来收集客户端的参数 2)  模型中的属性名必须和客户端参数名一一对应 3)  这里说的模型不是Model对象,Model是向视图中封装的数据 @Controller @RequestMapping(value = "/user") public class UserAction { @InitBinder protected void initBinder(HttpServletRequest request,ServletRequestData

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

前一篇文章,讲了在业务方法中多个模型收集参数有一个问题,现在这篇文章就来解决一上一篇文章的问题. User和Admin是两个不同的实体类.我们解决问题的方法是: 如果多个模型中有相同的属性时,可以用user.name或admin.name来收集客户端参数.就是用一个新的模型将User和Admin再封装一次. 给出案例的结构图: 上面结构图中用到了Admin.java;Bean.java;UserAction.java;springmvc_008.xml;spring.xml;web.xml;pe

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

上面文章时普通的业务那个方法中收集一个实体类,这篇文章想收集两个实体类. 文本要做的是:在person.jsp页面上,有两个表单.分别是普通用户和管理员用户的表单(普通用户的表单和管理员用户的表单里面的标签的name都是一样的).当输入一些数据之后按提交,不管是普通用户的表单还是管理员用户的表单都会提交到后台的同一个Action(控制器)的同一个方法去处理.然后由这个方法里面的两个实体类参数去收集数据,然后Action处理好之后再回到person.jsp把收集到的数据再显示到这个页面上.pers

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

这篇文章解决的问题是怎么在业务方法里面引入我们熟悉的HttpServletRequest和HttpServletRespon? 答案:这种引入传统的web参数的做法不推荐去做,因为这么做会实行高度耦合. 但还是说一下这种做法: 在Action修改代码如下: package com.guigu.shen.Action7; import java.io.IOException; import javax.servlet.http.HttpServletRequest; import javax.se

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

本文要实现的功能是给一张表单: 可以看到这样表格一共有四行,每一行代表一个员工(User),每一个员工有username和salary.我们要做的是把这四个员工信息装进一个List集合中. 那么怎么做呢? List不就是一个数组吗? 我们这么考虑: 案例结构如下: 第一步编写首页面emp.jsp,代码如下: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%

11SpringMvc_一个Action中,写多个类似的业务控制方法

我们要实现这么一个功能: 编写两个表单,提交到同一个Action中的不同的处理方法中.比如注册和登录,都提交到UserAction这个控制类中.但是这两个提交由userAction这个控制类不同的方法去处理. 案例结构如下: 这个案例用到的文件有:1.UserActio.java(控制类)2.Spring.xml(总的配置文件)3.springmvc_006.xml(这个项目独有的配置文件)4.adduser.jsp(有两个表单的jsp页面) 第一步:编写web.xml文件. <?xml ver