Spring(二)SpringMVC常用注解

目录

一、RequestMapping注解

1.RequestMapping的属性

2.RequestMapping的请求参数绑定

(1). 绑定机制

(2). 支持的数据类型

二、配置过滤器

三、常用的注解

1.RequestParam注解

2. RequestBody注解

四、RestFul风格

1.概念

 2.功能

3.基本使用


一、RequestMapping注解

RequestMapping注解的作用是建立请求URL和处理方法之间的对应关系

RequestMapping注解可以作用在方法和类

1. 作用在类上:第一级的访问目录

2. 作用在方法上:第二级的访问目录

3. 细节:路径可以不编写 / 表示应用的根目录开始

1.RequestMapping的属性

1. path 指定请求路径的url

2. value value属性和path属性是一样的

3. mthod 指定该方法的请求方式

4. params 请求地址中必须包含指定的请求参数或请求参数们

@Controller
@RequestMapping(path = "/role") // 一级请求路径
public class RoleController {
    /**
     * /role/save.do
     * method="当前方法允许请求方式能访问"
     * params="请求路径上传参数"
     * @return
     */
    @RequestMapping(path = "/save",method = {RequestMethod.GET},params = "username")
    public String save(){
        System.out.println("保存角色...");
        return "suc";
    }
    @RequestMapping(value = "/delete")
    public String delete(){
        System.out.println("删除角色...");
        return "suc";
    }
}

新建的controller。

启动tomcat,然后再浏览器输入一级访问目录/二级访问目录

Spring(二)SpringMVC常用注解_第1张图片

 delete同理。

2.RequestMapping的请求参数绑定

(1). 绑定机制

1. 表单提交的数据都是k=v格式的 username=haha&password=123

2. SpringMVC的参数绑定过程是把表单提交的请求参数,作为控制器中方法的参数进行绑定的

3. 要求:提交表单的name和参数的名称是相同的

(2). 支持的数据类型

1. 基本数据类型和字符串类型

2. 实体类型(JavaBean)

3. 集合数据类型(List、map集合等)

基本数据类型和字符串类型

1. 提交表单的name和参数的名称是相同的

2. 区分大小写

实体类型(JavaBean)

1. 提交表单的name和JavaBean中的属性名称需要一致

2. 如果一个JavaBean类中包含其他的引用类型,那么表单的name属性需要编写成:对象.属性 例如:address.name

给集合属性数据封装

1. JSP页面编写方式:list[0].属性

jsp代码



    
    入门程序


入门

入门程序

请求参数绑定入门程序



请求参数绑定入门程序(封装到实体类)



请求参数绑定入门程序(封装到实体类)




请求参数绑定入门程序(存在list集合)






通过form表单传递数据。

JavaBean代码

public class Account {
    private Double money;

    public Double getMoney() {
        return money;
    }

    public void setMoney(Double money) {
        this.money = money;
    }

    @Override
    public String toString() {
        return "Account{" +
                "money=" + money +
                '}';
    }
}
public class User {
    private String username;
    private Integer age;
    private Account account;//对象的引用
    private List accounts;//如果存在List集合

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Account getAccount() {
        return account;
    }

    public void setAccount(Account account) {
        this.account = account;
    }

    public List getAccounts() {
        return accounts;
    }

    public void setAccounts(List accounts) {
        this.accounts = accounts;
    }

    @Override
    public String toString() {
        return "User{" +
                "username='" + username + '\'' +
                ", age=" + age +
                ", account=" + account +
                ", accounts=" + accounts +
                '}';
    }
}

controller代码

@Controller
@RequestMapping("/user")
public class UserController {

    @RequestMapping("/save")//告诉地址
    public String save(String username,Integer age){
        System.out.println("name="+username+",age="+age);//把数据直接传递出来,用参数入参的方式
         return "suc";
    }

    @RequestMapping("/save1")
    public String save1(User user){//通过实体的方式接收 
        System.out.println(user.toString());
        return "suc";
    }

    @RequestMapping("/save2")
    public String save2(User user){
        System.out.println(user.toString());
        System.out.println(user.getAccount().getMoney());
        return "suc";
    }

    @RequestMapping("/save3")
    public String save3(User user){
        System.out.println(user.toString());
        return "suc";
    }

    //在controller当中直接使用ServletApi
    @RequestMapping("/save4")
    public String save5(HttpServletRequest request, HttpServletResponse response){
        request.getParameter("username");
        request.getParameter("password");
        return "suc";
    }
    

}

 数据接收最好的方式:通过实体的方式接收。

二、配置过滤器

post请求中参数中文乱码的解决

首先需要将原本的xml配置文档做出如下更改

在web.xml中配置Spring提供的过滤器类

 

  characterEncodingFilter
  org.springframework.web.filter.CharacterEncodingFilter
  
  
    encoding
    utf-8
  

 
   characterEncodingFilter
   /*
 

在控制器中使用原生的ServletAPI对象

只需要在控制器的方法参数定义HttpServletRequest和HttpServletResponse对象

@RequestMapping(value = "/save6.do",method = {RequestMethod.POST})
public String save6(HttpServletRequest request, HttpServletResponse response){
    // 获取到HttpSession对象
    System.out.println(request.getParameter("username"));
    HttpSession session = request.getSession();
    System.out.println(session);
    System.out.println(response);
    return "suc";
}

三、常用的注解

1.RequestParam注解

1. 作用:把请求中的指定名称的参数传递给控制器中的形参赋值

2. 属性

1. value:请求参数中的名称

2. required:请求参数中是否必须提供此参数,默认值是true,必须提供

3. 代码如下

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
@RequestMapping("/dept")
public class DeptController {
    @RequestMapping("/save")
    public String save(@RequestParam(value = "username",required = false) String name){
        System.out.println(name);
        return "suc";
    }
}


true是默认提交。

2. RequestBody注解

1. 作用:用于获取请求体的内容(注意:get方法不可以)

2. 属性

        1. required:是否必须有请求体,默认值是true

3. 代码如下

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
@RequestMapping("/dept")
public class DeptController {
    @RequestMapping("/save")
    public String save(@RequestParam(value = "username",required = false) String name){
        System.out.println(name);
        return "suc";
    }

    @RequestMapping("/save2")
    public String save2(@RequestBody String body){
        System.out.println(body);
        return "suc";
    }
}

注意:用post提交。

四、RestFul风格

1.概念

Restful就是一个资源定位及资源操作的风格。不是标准也不是协议,只是一种风格。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

Spring(二)SpringMVC常用注解_第2张图片

 2.功能

资源:互联网所有的事物都可以被抽象为资源

资源操作:使用POST、DELETE、PUT、GET,使用不同方法对资源进行操作。

分别对应 添加、 删除、修改、查询。

传统方式操作资源:通过不同的参数来实现不同的效果!方法单一,post 和 get

http://127.0.0.1/item/queryItem.action?id=1 查询,GET

http://127.0.0.1/item/saveItem.action 新增,POST

http://127.0.0.1/item/updateItem.action 更新,POST

http://127.0.0.1/item/deleteItem.action?id=1 删除,GET或POST

使用RestFul操作资源:可以通过不同的请求方式来实现不同的效果!如下:请求地址一样,但是功能可以不同!

http://127.0.0.1/item/1 查询,GET

http://127.0.0.1/item 新增,POST

http://127.0.0.1/item 更新,PUT

http://127.0.0.1/item/1 删除,DELETE

相比于传统方式使用链接来访问请求,Resful可以通过使用通过不同的请求方式来达到不同的效果

3.基本使用

①:传统的方式

@Controller()
@RequestMapping("/user")
public class RestFulController {

    @RequestMapping("/test")
    public String test(int a, int b, Model model){//model往前台返回
        int rust = a + b;
        model.addAttribute("msg","结果="+rust);
        // 配置了视图解析器后,写法
        return "suc";
    }
}


 访问的url

http://localhost:8080/SpringMVC/user/test?a=1&b=1

返回结果

Spring(二)SpringMVC常用注解_第3张图片

②:RestFul风格

首先需要改变DispatcherServlet的拦截

Spring(二)SpringMVC常用注解_第4张图片

 controller

//映射访问路径
@RequestMapping("/test2/{p1}/{p2}")
public String index(@PathVariable int a, @PathVariable String b, Model model){
    String result = a+b;
    //Spring MVC会自动实例化一个Model对象用于向视图中传值
    model.addAttribute("msg", "结果:"+result);
    //返回视图位置
    return "suc";
}

url

http://localhost:8080/SpringMVC/user/test2/1/1

 

你可能感兴趣的:(Java,idea,java,Spring,xml)