A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

在springmvc的开发中,springmvc主要做四件事:1 请求地址的映射 2 请求参数的映射 3 获取业务数据 4 确定返回视图,下面我们分别介绍。
1 请求地址映射
请求地址的映射通常我们采用@requestMapping注解来完成。该注解可以写在类上,表示窄化请求映射目的是为了支持分模块开发,一旦写在类上,该类下所有的方法请求地址都需要带上类上的路径。
[Java] 纯文本查看 复制代码
@Controller
@RequestMapping("/account")
public class AccountController {
    @Autowired
    private AccountService accountService;
    @RequestMapping(value="/findAll",method="RequestMethod.GET")
    public String findAll(Model model){
        System.out.println("表现层:查询所有账户...");
        // 调用service的方法
        List<Account> list = accountService.findAll();
        model.addAttribute("list",list);
        return "list";
    }
}

requestmapping注解中可以通过method指定请求的方式,引申出来有@GETMapping 和@POSTMapping  分别来表示get请求和post请求。


2 请求参数映射
   2.1 当请求的参数名称与controller方法中形参名称相同,则能自动封装。
[AppleScript] 纯文本查看 复制代码
<a href="account/findAccount?accountId=10&accountName=zhangsan">查询账户</a>

[Java] 纯文本查看 复制代码
    @RequestMapping("/findAccount")
    public String findAccount(Integer accountId,String accountName) {
	System.out.println("查询了账户+accountId+","+accountName);
	return "success";
    }

2.2 当controller方法中形参是pojo时,请求的参数如果与pojo的属性名相同,则能自动封装到pojo中。
[Java] 纯文本查看 复制代码
public class Account implements Serializable {
private Integer id;
private String name;
private Float money;
//getters and setters
}
<form action="account/saveAccount" method="post">
账户名称: <input type="text" name="name" ><br/>
账户金额: <input type="text" name="money" ><br/>
<input type="submit" value="保存">
</form>
@RequestMapping("/saveAccount")
public String saveAccount(Account account) {
System.out.println("保存了账户 "+account);
return "success";
}

2.3 当controller方法中的形参是pojo包装类是,请求的参数方式如下:
[Java] 纯文本查看 复制代码
public class Account implements Serializable {
private Integer id;
private String name;
private Float money;
private Address address;
//getters and setters
}
public class Address implements Serializable {
private String provinceName;
private String cityName;
//getters and setters
}
<form action="account/saveAccount" method="post">
账户名称: <input type="text" name="name" ><br/>
账户金额: <input type="text" name="money" ><br/>
账户省份: <input type="text" name="address.provinceName" ><br/>
账户城市: <input type="text" name="address.cityName" ><br/>
<input type="submit" value="保存">
</form>
@RequestMapping("/saveAccount")
public String saveAccount(Account account) {
System.out.println("保存了账户 "+account);
return "success";
}

2.4 当请求参数包含相同名称的多个参数时,controller方法中用数组类型进行映射
[Java] 纯文本查看 复制代码
 <a href="account/findAccount?name=zhangsan&name=lisi">查询账户</a>
  @RequestMapping("/findAccount")
    public String findAccount(String[] name) {
	return "success";
    }

2.5 当请求参数名称与controller方法形参名称不一致时,可以通过@RequestParam参数来进行映射,在该注解中我们还可以配置required,defaultvalue.
[Java] 纯文本查看 复制代码
 @RequestMapping("/testRequestParam")
    public String testRequestParam(@RequestParam(name="name") String username){
        System.out.println(username);
        return "success";
    }

2.6 当springmvc配置为支持restful风格时,我们可以通过@PathVariable 注解来映射请求路径中的占位符
[Java] 纯文本查看 复制代码
 @RequestMapping(value="/testPathVariable/{sid}")
    public String testPathVariable(@PathVariable(name="sid") String id){
        System.out.println(id);
        return "success";
    }

2.7 当我们想在controller方法中使用原生的request response  session 等API时,我们可以直接在方法形参上申明即可。
[Java] 纯文本查看 复制代码
public String testServlet(HttpServletRequest request, HttpServletResponse response){
        HttpSession session = request.getSession();
        ServletContext servletContext = session.getServletContext();
        return "success";
    }

   2.8 当我们不想在方法形参上申明又想使用原生的request response  session 等API时,可以通过@ModelAttribute注解来提前注入request response session对象。
        该注解的方法将在controller方法执行前先执行。 我们定义的controller来继承basecontroller
[Java] 纯文本查看 复制代码
public class BaseController{
 protected HttpServletRequest request;
 protected HttpServletResponse response;
 protected HttpSession session;
 public void getServletApi(HttpServletRequest request,HttpServletResponse response,HttpSession session){
    this.request = request;
    this.response = response;
   this.session = session;
 }
}


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马