栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringMVC学习(5)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringMVC学习(5)

@RequestMapping说明 @RequestMapping
  • @RequestMapping注解用于映射url到控制器类或一个特定的处理程序方法。可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
  • 只注解在方法上面
@Controller
public class TestController {
	@RequestMapping("/h1")
	public String test(){
		return "test";
	}
}

访问路径:http:// localhost:8080 / 项目名 / h1

  • 同时注解类与方法
@Controller
@RequestMapping("/admin")
public class TestController {
	@RequestMapping("/h1")
	public String test(){
		return "test";
	}
}

访问路径:http:// localhost:8080 / 项目名 / admin /h1,需要先指定类的路径再指定方法的路径;

RestFul风格

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

  • 资源:互联网所有的事物都可以被抽象为资源
  • 资源操作:使用POST、DELETE、PUT、GET,使用不同方法对资源进行操作。
  • 分别对应 添加、删除、修改、查询。

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

  • http://127.0.0.1/item/queryltem.action?id=1 查询,GET
  • http://127.0.0.1/item/saveltem.action 新增,POST
  • http://127.0.0.1/item/updateltem.action 更新,POST
  • http://127.0.0.1/item/deleteltem.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

学习测试:
新建一个类,在SpringMVC中可以使用@PathVariable注解,让方法参数的值对应绑定到一个URL模板变量上

package com.kuang.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

@Controller
public class RestfulController {

    // 原来的: http://localhost:8080/add?a=10&b=5
    // ResuFul: http://localhost:8080/add/a/b

    @RequestMapping(value = "/add/{a}/{b}",method = RequestMethod.GET)
//    @PostMapping("/add/{a}/{b}")
    public String test1(@PathVariable int a,@PathVariable int b, Model model){
        int res = a + b;
        model.addAttribute("msg","结果为"+res);
        return "test";
    }
}

使用路径变量的好处:

  • 使路径变得更加简洁;
  • 获得参数更加方便,框架会自动昂进行类型转换。
  • 通过路径变量的类型可以约束访问参数,如果类型不一样,则访问不到对应的请求方法,

Spring MVC的@RequestMapping注解能够处理HTTP请求的方法,比如GET、PUT、POST、DELETE以及PATCH。
所有的地址栏请求默认都会是HTTP GET 类型的。
方法级别的注解变体有如下几个:组合注解

@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping

@GetMapping是一个组合注解
它所扮演的是@RequestMapping(method = RequestMethod.GET)的一个快捷方式。

SpringMVC:结果跳转方式 ModelAndView

设置ModelAndView对象,根据view的名称,和视图解析器跳到指定的页面。
页面:{视图解析器前缀} + viewName + {视图解析器后缀}


	
	
	
	

对应的controller类

public class ControllerTest1 implements Controller {
	public ModelAndView handleRequest(HttpServletReqeust httpServletRequest,HttpServletResponse response) throws Exception{
		// 返回一个模型视图对象
        ModelAndView mv = new ModelAndView();
        mv.addObject("msg","ControllerTest1");
        mv.setViewName("test");
        return mv;
	}
}
ServletAPI

通过设置ServletAPI,不需要视图解析器

  1. 通过HttpServletResponse进行输出
  2. 通过HttpServletResponse实现重定向
  3. 通过HttpServletResponse实现转发
@Controller
public class ModelTest1 {

    @RequestMapping("/m1/t1")
    public String test1(Model model){
        // 转发
        model.addAttribute("msg","ModelTest1");
//        return "forward:/WEB-INF/jsp/test.jsp";

        // 重定向
        return "redirect:/index.jsp";
    }
}
Spring MVC

通过SpringMVC来实现转发和重定向 - 无需视图解析器;

@Controller
public class ResultSpringMVC {
	@RequestMapping("/rsm/t1")
	public String test1(){
		// 转发
		return "/index.jsp";
	}
	
	@RequestMapping("/rsm/t2")
	public String test2(){
		// 转发二
		return "forword:/index.jsp";
	}

	@RequestMapping("/rsm/t3")
	public String test3(){
		// 重定向
		return "redirect:/index.jsp";
	}
}

通过SpringMVC来实现转发和重定向 - 有视图解析器;
重定向,不需要视图解析器,本质就是重新请求一个新地方嘛,所以注意路径问题。可以重定向到另外一个请求实现。

@Controller
public class ResultSpringMVC2 {
	@RequestMapping("/rsm2/t1")
	public String test1(){
		// 转发
		return "test";
	}
	@RequestMapping("/rsm2/t2")
	public String test2(){
		// 重定向
		return "redirect:/index.jsp";
	}
}
接收请求参数及数据回显 处理提交数据

1、 提交的域名和处理方法的参数名一致
提交数据:http://localhost:8080/hello?name=zhangsan
处理方法:

@RequestMapping("/hello")
public String hello(String name){
	System.out.println(name);
	return "hello";
}

后台输出:zhangsan

2、 提交的域名称和处理方法的参数名不一致
提交数据:http://localhost:8080/hello?username=zhangsan
处理方法:

// @RequestParam("username") : username提交的域的名称
@RequestMapping("/hello")
public String hello(@RequestParam("username") String name) {
	System.out.println(name);
	return "hello";
}

3、 提交的是一个对象
要求提交的表单域和对象的属性名一致,参数使用对象即可

  1. 实体类
  2. 提交数据
  3. 处理方法
  4. 后台输出

说明:如果使用对象的话,前端传递的参数名和对象名必须一致,否则就是null。

数据显示到前端

第一种:通过ModelAndView
第二种:通过ModelMap

@RequestMapping("/hello")
public String hello(@RequestParam("username") String name,Model model){
	// 封装要显示到视图中的数据
	// 相当于req.setAttribute("name",name);
	model.addAttribute("name",name);
	System.out.println(name);
	return "test";
}

第三种:通过Model

@RequestMapping("/ct2/hello")
public String hello(@RequestParam("username") String name,Model model){
	// 封装要显示到视图中的数据
	// 相当于req.setAttribute("name",name);
	model.addAttribute("msg",name);
	System.out.println(name);
	return "test";
}
对比

就是对于新手而言简单来说使用区别就是:

Model只有寥寥几个方法适用于储存数据,简化了新手对于Model对象的操作和理解;
ModelMap继承了linkedMap,除了实现了自身的一些方法,同样的继承linkedMap的方法和特性;
ModelAndView可以在储存数据的同时,可以进行设置返回的逻辑视图,进行控制展示层的跳转。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/319065.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号