springmvc的基础练习

Springmvc:

springmvc的注解:

使用注解的方式,首先在处理器的类上写上@controller,在方法写上@RequestMapping,参数为映射地址

@Controller
public class DemoController {
 
    //请求映射
    //请求:http://localhost:8088/abc.action
    @RequestMapping("abc")
    public ModelAndView test(){
        ModelAndView mv = new ModelAndView();
        mv.setViewName("hello");
        mv.addObject("msg", "我的第一个SpringMVC应用!");
        return mv;
    }
}

然后,使用在springmvc-servlet.xml中写上扫描包的标签,和定义处理器类

<- 将controller加入到springmvc容器中 
<be!-an class="cn.itcast.springmvc.controller.DemoController"/>-->
<!-- 定义扫描包   将cn.itcast.springmvc.controller所有标注有@controller的类加入到springmvc容器中 -->
<context:component-scan base-package="cn.itcast.springmvc.controller"/>
<mvc:annotation-driven />

注解的总结:

1、注解驱动

2、配置controller的扫描

3、配置视图解析器

4、创建视图

 

各注解的说明:

@RequestMapping映射请求

有三种映射方式:

①、标准的URL映射

在方法上面写上@RequestMapping(“xxx”)或者@RequestMappingvalue=xxx”)

②、ant的匹配映射

在方法上面写上@RequestMapping(“/test/*/xxx”)。

③、占位符的映射

在方法上面写上@RequestMapping(“/text/${xxx}/xxx”)。使用占位符的映射,可以通过@pathVariable(“xxx”)来得到占位符的信息。

 

@RequestMapping中的请求方式是有限制的。

通常的限制是GETPOST这两种方式。可以通过@RequestMappingMethod参数来设置。

 

@RequestMapping中也可以限制参数的携带。

可以通过@RequestMappingparams参数来设置。

参数的限制规则如下:

params=“userId” 请求参数中必须包含userId

params=“!userId” 请求参数中不能包含userId

params=“userId!=1” 请求参数必须包含userId,但其值不能为1

params={“userId”,“name”} 必须包含userIdname参数;区别与value 的多路径映射的

 

@PathVariable获取参数

在方法的形参可以带上@PathVariable来获取参数。

如:

public void demo(@PathVariable(“userId”)String userId);
 

@RequestParam请求参数

@RequestParam有三个参数:

Value:参数名 ;

required:是否为必须,默认为true,表示请求参数中必须包含该参数,如果不包含抛出异常 ;

DefaultValue:默认的参数值,如果设置了该值自动将required设置为false,如果参数中没有包含该参数则使用默认值。

 

@CookieValuecookie

 @cookieValue可以绑定cookie的值,和@RequestParam一样有三个参数和相同的功能。

 

@RequestBody请求正文

主要的作用是把请求的json字符串转化为pojo对象。

 

视图解析器:

包好转发和重定向。

视图解析器默认使用的jstl解析器,除了可以直接返回视图的名称外,还可以返回具有forward:或redirect:前缀修饰的视图名称分别可以转发或重定向到特定的URL

 

Forward

方式一:当转发的过程中需要附带数据时,返回ModelAndView

@RequestMapping("/demo10")
    public ModelAndView demo10(){
        ModelAndView mv = new ModelAndView("forward:/demo9.action");
        return mv;
    }

方式二:当转发的过程中不要附带数据,只需要返回forward+URL路径组成的视图名称字符串即可。

@RequestMapping("/demo11")
    public String demo11(){
        return "forward:/demo9.action";
    }

Redirect:重定向

方式一:

当重定向的过程中需要附带数据时,返回的ModelAndView,就是在URL的地址栏后面添加参数,如果是中文需要解码

@RequestMapping("demo12")
    public ModelAndView demo12(){
        ModelAndView mv = new ModelAndView("redirect:demo9.action");
        try {
            mv.addObject("requestType",URLEncoder.encode("重定向方式", "utf-8"));
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return mv;
    }

方式二:

当重定向不需要数据,只需要返回redirect+URL地址即可。

@RequestMapping("demo13")
    public String demo13(){
        return "redirect:demo9.action";
    }

JSON的转换:

@RequestBody

可以将请求的json字符串转化为POJO对象,用在方法的形参前面进行注解。

将请求的JSON字符串转化为POJO对象,需要使用json的转换工具jackson

1) 导入jackson依赖;

<!-- Jackson Json处理工具包 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>

2) 编写后台接收方法;

 

@RequestMapping("demo14")
    public ModelAndView demo14(@RequestBody User user){
        ModelAndView mv = new ModelAndView("show");
        mv.addObject("msg", user);
        return mv;
    }

3) 请求(模拟或者ajax都可以)

测试json数据:

{ "id":"1","name":"黑马程序员","age":"40"}

【注意】请求的内容类型Content-Type必须为:application/json

 

@ResponseBody

是把POJO对象转换为json,在页面输出。

也是在方法前写上@ResponseBody。标记了@REsponseBody

①、表示不做页面跳转  ②、默认转化方式,转化为json

 

1) 导入jackson依赖;

<!-- Jackson Json处理工具包 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>

1) 编写后台方法,记得在方法前面加入@ResponseBody并返回具体对象即可;

   @RequestMapping("demo15")
    @ResponseBody
    public List<User> demo15(){
        List<User> list = new ArrayList<User>();
        for (long i = 0; i <=10; i++) {
            User user = new User();
            user.setId(i);
            user.setName("黑马程序员"+i);
            user.setBirthday(new Date());
            list.add(user);
        }
        return list;
    }


  

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值