springmvc开发总结(上)

在springmvc的开发中,springmvc主要做四件事:1 请求地址的映射 2 请求参数的映射 3 获取业务数据 4 确定返回视图,下面我们分别介绍。
1 请求地址映射
请求地址的映射通常我们采用@requestMapping注解来完成。该注解可以写在类上,表示窄化请求映射目的是为了支持分模块开发,一旦写在类上,该类下所有的方法请求地址都需要带上类上的路径。

[Java]  纯文本查看  复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
@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]  纯文本查看  复制代码
?
1
< a href = "account/findAccount?accountId=10&accountName=zhangsan" > 查询账户 < / a >
[Java]  纯文本查看  复制代码
?
1
2
3
4
5
@RequestMapping ( "/findAccount" )
public String findAccount(Integer accountId,String accountName) {
System.out.println( "查询了账户+accountId+" ,"+accountName);
return "success" ;
}


2.2 当controller方法中形参是pojo时,请求的参数如果与pojo的属性名相同,则能自动封装到pojo中。

[Java]  纯文本查看  复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
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]  纯文本查看  复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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]  纯文本查看  复制代码
?
1
2
3
4
5
<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]  纯文本查看  复制代码
?
1
2
3
4
5
@RequestMapping ( "/testRequestParam" )
    public String testRequestParam( @RequestParam (name= "name" ) String username){
        System.out.println(username);
        return "success" ;
    }


2.6 当springmvc配置为支持restful风格时,我们可以通过@PathVariable 注解来映射请求路径中的占位符

[Java]  纯文本查看  复制代码
?
1
2
3
4
5
@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]  纯文本查看  复制代码
?
1
2
3
4
5
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]  纯文本查看  复制代码
?
01
02
03
04
05
06
07
08
09
10
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;
  }
}
发布了667 篇原创文章 · 获赞 6 · 访问量 9044

猜你喜欢

转载自blog.csdn.net/heima201907/article/details/104381928