springMvc(知识梳理)

1请求与响应

1.1@RequestMapping注解

作用:将请求和处理请求的控制器方法关联起来 建立映射关系

注解的位置:

标识一个类:设置映射请求的请求路径的初始信息

标识一个方法:设置请求路径的具体信息

eg:

@RestController
 @RequestMapping("/www")
public class HelloController {
//对应请求路径为:/www/hello
    @RequestMapping("/hello")
    public String hello(){
        return "hello";
    

 method属性:

作用:通过注解的请求方式来匹配请求 一般表单提交是post  

在requestMapping注解的基础上 结合请求方式 产生了派生注解

@GetMapping

@PostMapping

@DeleteMapping

@PutMapping

param属性:

@RequestMapping的param属性是一个字符串类型的数组 

有四种表达式设置请求参数与请求映射的匹配关系:

1"param":请求映射必须携带param请求参数  2 "!param":请求映射不必须携带param请求参数

3"param!=value":请求映射必须携带param请求参数且param!=value

4"param=value":请求映射必须携带param请求参数且param=value

eg:

@RequestMapping(value="/hello",method=RequestMethod.Post,params={"username","!password"})

 springMvc支持路径使用占位符

原来的模式:/hello?id=1

rest方式:/hello/1

<a href="/hello/1"></a>

@RestController
 @RequestMapping("/www")

public class HelloController {

//对应请求路径为:/www/hello

@RequestMapping("/hello/{id}")

public String hello(@PathVariable("id") String id){

return "hello";

}

}

 springMvc获取请求参数

 1普通形式传参

2采取POJO形式

3通过servletApl(使用request获取)

4其他方式

普通形式传参:

@RequestMapping("/hello")

public String Hello(String username,String password){

//这里的username password要与前面传来的参数名字相同

return "hello"

}

 通过@RequestParam进行

三个属性:value:设置和形参绑定的请求参数的名字

required:设置是否必须传输value所对应的请求参数 

defaultValue:设置默认value的值

    @RequestMapping("/ww")
    public String hh(@RequestParam(value = "username",required = true,defaultValue = "hh")){
        System.out.println("jhh");
return "success";
    }

采取POJO形式

(当获取对象太多时候 采用一个类 来使用)

要保证每一个参数的名字与类里面的名字相同

  @GetMapping("/phonePage")
    public PhonePageVo selectPhone( PhonePageDto phonePage){
        Phone phone=new Phone();
        phone.setPhoneNumber(2);
        phone.setModelNumber(phonePage.getModelNumber());
      List<Phone> phones=new ArrayList<>();
        phones.add(phone);

     PhonePageVo pageVo=new PhonePageVo();
     pageVo.setPageNumber(phonePage.getPagenumber());
     pageVo.setPagesize(phonePage.getPagesize());
     pageVo.setPhoneList(phones);
        System.out.println(pageVo);
return pageVo;
    }
}

PhonePageDto类中有

public class PhonePageDto {
    private int pagesize;
    private int pagenumber;
    private int modelNumber;

如果用postman去测试的时候 传入的名字要相同 如 pagesize=1 pagenumber=2 modelNumber=2要一一对应

 通过servletApl(使用request获取)

@RequestMapping(value = "/login",method = RequestMethod.POST)

public String UserLogin(HttpServletRequest request){
   String userid= request.getParameter("userid");
   String password= request.getParameter("password");
   if (userid.equals("001")&&password.equals("system")){

       request.setAttribute("userid",userid);
       request.setAttribute("password",password);
       return "success";
   }
   return "false";

}

其他方式 

除了以上的传参方式 还可以传入数组 list集合

//list集合
@RequestMapping(value = {"/hello","a"},
        method = RequestMethod.GET
)
public String a(List<PhonePageDto > phone){
for(PhonePageDto ph::phone){
System.out.println(ph);
}
    System.out.println("hhh");
    return "success";
}

//数组

@RequestMapping(value = {"/hello","a"}, method = RequestMethod.GET )

public String a(String[] hh)

{

System.out.println("hhh"+Arrays.toString(hh));

return "success";

}

@Requestbody

作用:将请求体中的内容和控制器方法的形参进销绑定

使用@Requestbody 注解将json格式的请求转换为Java对象

@RequestBody @RequestParam

  • RequestParam 用于接收URL地址传参或表单传参

  • RequestBody 用于接收JSON数据

  •     public ResponseEntity<String> createStudent(@RequestBody Student student) {
            students.add(student);
            return ResponseEntity.status(HttpStatus.CREATED).build();
        }

@DateTimeFormat

声明一个对象属性或者方法参数会被格式化为日期或时间 与@RequestParam

注解结合使用

spring会调用FormattingConversionService.convert(Object,TypeDescriptor,TypeDescriptor)将日期时间字符转换为时间日期类型

@RequestMapping("/data")

@ResponseBody

public String dataParam(Date date,  @DateTimeFormat(pattern="yyyy-MM-dd") Date d, 

@DateTimeFormat(pattern="yyyy/MM/dd HH:mm:ss") Date d2){

   System.out.println(" date ==> "+date);   

System.out.println(" date1(yyyy-MM-dd) ==> "+d1);

   System.out.println(" date2(yyyy/MM/dd HH:mm:ss) ==> "+d2);   

return DATE;

}

springmvc三种请求域共享数据

Modeandview 实现网页之间共享数据 和页面跳转
public class TestScopeController {
    //使用modelandview
    @RequestMapping("/test/mav")
    public ModelAndView TestMav() {
        ModelAndView mav = new ModelAndView();
        //mode:是向请求域贡献数据
        //view设置逻辑试图实现页面跳转
        mav.addObject("testScopeController", "12");
        //设置逻辑试图
        mav.setViewName("success");
        return mav;
    }
Model ModelMap map实现共享数据

@RequestMapping("/test/model")
public  String testModel(Model model){
    model.addAttribute("hhh","hello model");

    return "hh";
}

@RequestMapping("/test/modelMap")

public String testModel(ModelMap model){

model.addAttribute("hhh","hello ModelMap ");

return "hh";

}

@RequestMapping("/test/map")

public String testModel(Map<String,Object> map){

map.put("testMap","hello map");

return "hh";

}

通过会话域进行保存数据(session application)

@RequestMapping("/session")
public String testSeesion(HttpSession session){
    session.setAttribute("hh","hello session");
    return "hh"

}
@RequestMapping("/application")
public String testApplication(HttpSession session){
    ServletContext S=session.getServletContext();
  S.setAttribute("hh","hello application");
    return "hh";

}

springMvC拦截器(重点)

类似Servlet里面的过滤器 用来处理器进行预处理和后处理

将拦截器按照一定的顺序形成一条拦截器链 拦截器按照定义好的顺序被调用 也是Aop思想的表现形式

public class TestLanjieqi implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        return HandlerInterceptor.super.preHandle(request, response, handler);
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
    }
}

 如上图 拦截器有三种方法 :1 preHandle:boolean 类型 返回为false时 说明请求结束 后续的方法不会再执行 返回true 将会继续调用下一个Interceptor的preHandle方法

2postHandle:前提是preHandle返回为true时 而且他会在DispatcherServlet进行视图返回渲染时候被调用 我们可以这个方法中对Controller处理后的ModeAndView对象进行操作

3afterCompletion:前提是preHandle返回为true时 整个请求结束的时候执行 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Spring MVC是一个基于Java的Web开发框架,它是Spring框架的一部分,旨在简化Web应用程序的开发过程。下面是一些关于Spring MVC的知识点: 1. 控制器(Controller):控制器是处理用户请求并返回响应的组件。在Spring MVC中,控制器由@Controller注解标记,并使用@RequestMapping注解来映射URL请求。 2. 模型(Model):模型表示应用程序的数据。在Spring MVC中,模型通常使用POJO(Plain Old Java Object)表示,并且可以通过方法参数或ModelAndView对象传递给视图。 3. 视图(View):视图负责呈现模型数据给用户,并处理用户的输入。在Spring MVC中,视图可以是JSP、Thymeleaf、Velocity等模板引擎。 4. 请求映射(Request Mapping):请求映射用于将URL请求映射到相应的控制器方法。在Spring MVC中,可以使用@RequestMapping注解来定义请求映射。 5. 数据绑定(Data Binding):数据绑定是将请求参数绑定到控制器方法的参数或模型对象的过程。Spring MVC支持多种数据绑定方式,包括基本类型、对象、集合等。 6. 视图解析器(View Resolver):视图解析器用于将逻辑视图名称解析为实际的视图对象。在Spring MVC中,可以通过配置视图解析器来指定视图的解析方式。 7. 拦截器(Interceptor):拦截器用于在请求处理的不同阶段进行拦截和处理。在Spring MVC中,可以使用拦截器实现日志记录、权限验证等功能。 8. 表单处理(Form Handling):Spring MVC提供了丰富的表单处理功能,包括表单验证、表单重复提交防御、数据绑定等。 这些是Spring MVC的一些基本知识点,希望能对你有所帮助!如果你有更具体的问题,我可以继续解答。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值