SpringMVC——笔记

使用 @RequestMapping 映射请求

Spring MVC 使用@RequestMapping 注解为控制器指定可以处理那些URL请求。
  在控制器的类定义及方法定义处都可以标注
    @RequestMapping
      -类定义处: 提供初步的请求映射信息 。相对于WEB应用的根目录
      -方法处:提供进一步的细分映射信息。 相对于类定义处的URL若类定义处
        未标注 @RequestMapping,则方法处标记的URL相对于WEB应用的根目录。
  DispatcherServlet 截获请求后,就通过控制器上 @RequestMapping 提供的映射信息确定请求所对应的处理方法。
映射请求参数 , 请求方法或请求头  
  @RequestMapping 除了可以使用URL映射请求外,
  @RequestMapping 的value,method,params 及 heads
    分别表示 请求URL ,请求方法,请求参数参数及请求头的映射条件,他们之间是与的关系,联合使用多个条件可以让请求映射更加精确。
  params 和 headers 支持简单表达式  
    - params1 : 表示请求必须包含名为param1的请求参数。
    - !param1 : 表示请求不能包含名为param1的请求参数。
    - param1 != value1: 表示请求包含名为param1 的请求参数极其值不能为 value1。
    - {"param1=value1",param2}: 请求必须包含名为 param1 和 param2 的
      两个请求参数,且 param1 参数值必须为 value1;
使用@RequestMapping 映射请求  
  Ant 风格资源地址支持3种匹配符
    —— ?:匹配文件名中的一个字符
    —— *: 匹配文件名中的任意字符
    ——**“:** 匹配多层路径
  @RequestMapping 还支持 Ant 风格的URL
    - /user/*/createUser: 匹配 /user/aaa/createUser,/user/bbb/createUser 等URL
    -/user/**/createUser: 匹配 /user/createUser,/user/aaa/bbb/createUser 等URL
    -/user/createUser??: 匹配 / user/createUseraa,/user/createUserbb 等URL
@PathVariable 映射URL 绑定的占位符
    带占位符的URL 是Spring 3.0 新增的功能,该功能在Spring MVC 向REST 目标挺进发展中具有里程碑意义。
    通过@PathVarible 可以将URL中占位符参数绑定到控制器处理方法的入参中
        URL中的{xxx}站位符可以通过 @PathVariable("xxx") 绑定到操作方法的入参中。
    @RequestMapping("/delete/{id}")
        public String delete(@PathVariable("id" ) Integer id ){
            UserDao.delete(id);
            return "redirect:/user/list.action";
    }
REST  
  REST : 即 Representational State Transfer 。(资源) 表现层状态转化,是目前所流
    行的一种互联网软件架构。 它结构清晰,符合标准,易于理解,扩展方便,所以正得到越来越多网站的采用
  资源(Resources): 网络上的一个实体,或者说是网络上的一个具体信息,他可以
    是一段文本,一张图片,一首歌曲,一种服务,总之就是一个具体的存在,可以
    用一个URI(统一资源定位符)指向它,每种资源应对一种特定的URI,要获取这个资源
    访问它的URI就可以,因此 URI 即为每个资源的独一无二的识别服。
  表现层(Representation)把资源具体呈现出来的形式。叫做它的表现层
    (Representation) 。比如文本可以用txt格式表现,也可以用HTML格式,
    XML 格式,JSON格式表现,甚至可以采用二进制形式表现。
  状态转化(State Transfer) :每发一个请求,就代表了客户端和服务器的一次交互
    过程,HTTP 协议,是一个无状态协议,即所有的状态都保存在服务器端。因此
    客户端想要操作服务器,必须通过某种手段,让服务器发生状态转化,这种转化
    是建立在表现层之上的,所以就是表现层状态转化,HTTP 协议里面,四个表示
    操作方式的动词 GET POST PUT DELETE,他们分别对应四种基本操作: GET
    用来获取资源,POST 用来新建资源,PUT用来更新资源,DELETE 用来删除资源。
  实例:
    -/order/1 HTTP GET : 得到 id = 1 的 order
    -/order/1 HTTP DELETE : 删除 id = 1 的 order
    -/order/1 HTTP PUT : 更新 id = 1 的 order
    -/order/1 HTTP POST : 新增 id = 1 的 order
    HiddenHttpMethodFilter: 浏览器from 表单只支持 get 和post 请求
      而DELET,PUT 等method 并不支持。Spring3.0 添加了一个通过
      浏览器,可以将这些请求转化为http 方法,使的支持 GET,POST
      PUT, DELETE 请求。
请求处理方法签名
    Spring MVC 通过分析处理方法的签名,将HTTP请求
    信息绑定到处理方法的相应人参中。
    Spring MVC 对控制处理方法签名的限制是宽松的,几乎
    可以按喜欢的任何方式对方法进行签名。
    必要时可以对方法入参标注相应的注解。
    (@PathVariable,@RequestParam,@RequestHeader)
    Spring MVC 矿建会将http 请求信息绑定到相应的方法中
    应根据方法的返回值类型做出相应的后续处理。
  
  使用@RequestParam 绑定请求参数值
    在处理方法入参使用 @Request Param 可以把请求参数传递给请求方法。
      - value : 参数名
      - required: 是否必须,默认为true,表示请求参数中
    必须包含对应的参数,若不存在,将抛出异常。
    @RequestMapping("/handle5")
      public String handle5(@RequestParam(value="userName",required=false)
      String usernName,@RequestParam("age") int age){
          return "success";
      }

  使用@RequestHeader 绑定请求报头的属性值
     请求头包含了若干个属性,服务器可据此获知客户端的信息,通过@RequestHeader
     即可将头中的属性值绑定到处理方法的入参中。
    @RequestMapping("/handle7")
      public String handle7(@RequestHeader("Accept-Encoding") String encoding,
    @RequestHeader("Keep-Alive")long keppAlieve){return "success";}
    使用@CookieValue 绑定请求中的 Cookie 值
    @CookieValue 可让处理方法入参绑定某个Cookie 值
    @RequestParam("/headle6")
      public String handle6(@CookieValue(value="sessionId",required=false) String
        sessionId,@RequestParam("age") int age){
        return "seccess";
      }
  
  使用POJO 对象绑定请求参数值    
    Spring MVC 会按请求参数和POJO属性名进行自动匹配,自动为该对象填充属性值,支持
      级联属性。dept.deptId,dept.address.tel 等。
      @RequestMapping("/handle8")
        public String handle(User user){
          return "success";
      }
      
    使用Servlet API 作为入参
    @RequestMapping("/handle9")
      public void handle9(HttpServietRequest request,HttpServletResponse response){
      }

// @SessionAttributes(value={"user"},types={String.class})
@RequestMapping("/springmvc")
@Controller
public class SpringMVCTest {


private static final String SUCCESS = "success";

@ModelAttribute
public void getUser(@RequestParam(value="id",required= false) Integer id,Map map){
if(id != null){
// 模拟从数据库中获取对象
User user = new User(1,"Tom","123456","tom@atguigu.com",12);
System.out.println("从数据库中获取一个对象:"+ user);
map.put("user",user);
}

}
@RequestMapping("/testModelAttribute")
public String testModelAttribute(User user){
System.out.println("修改:" + user);
return SUCCESS;
}

/*注意这个注解只能放在类的上面,不能放在方法上面*/
@RequestMapping("/testSessionAttributes")
public String testSessionAttributes(Map map){

User user = new User(1,"tom@123.com",15);
map.put("user",user);
map.put("school","atguigu");
return SUCCESS;
}

/*
* 目标方法可以添加 Map 类型的(实际上也可以Model 类型的 或ModeMap 类型的)参数
* */
@RequestMapping("/testMap")
public String testMap(Map map){
System.out.println(map.getClass().getName());
map.put("names",Arrays.asList("Tom","Jerry","Mike"));
return SUCCESS;
}

/*
* 返回值可是ModelAndView 类型
* 其中可以包含视图和模型信息
* SpringMVC 会吧ModelAndView 的model 数据放到request 域中。
* */
@RequestMapping("/testModelAndView")
public ModelAndView testModelAndView(){
String viewName = SUCCESS;
ModelAndView modelAndView = new ModelAndView(viewName);
// 添加模型到ModelAndView 中
modelAndView.addObject("time",new Date());
return modelAndView;
}

@RequestMapping("/testServletAPI")
public String testServletAPI(HttpServletRequest request,HttpServletResponse response) {
System.out.println("testServletAPI,"+request+","+ response);
return SUCCESS;
}

/*
* Spring MVC 会按请求参数名和POJO 属性进行资助匹配
* 自动为该对象填充属性值,支持级联动,如 dept.deptId,dept.address.tel 等
* */
@RequestMapping("/testPojo")
public String testPojo(User user){
System.out.println("testPojo" + user);
return SUCCESS;
}

/*@CookieValue: 映射一个Cookie 值,属性同@RequestParam*/
@RequestMapping("/testCoookieValue")
public String testCoookieValue(@CookieValue("JSESSIONID")String sessionId){
System.out.println("CoookieValue:"+ sessionId);
return SUCCESS;

}

/*
* 映射请求头信息
* 用法同@RequestParam
* */
@RequestMapping("/testRequestHander")
public String testRequestHander(@RequestHeader(value="Accept-Language") String al){
System.out.println("testRequestHander,Accept-Language:"+ al);
return SUCCESS;
}

/*
* @RequestParam 来映射请求参数
* */
@RequestMapping(value="/testRequestParam")
public String testRequestParam(@RequestParam(value="username") String un,@RequestParam(value="age",required=false,defaultValue="0") int age){
System.out.println("testRequestParam,username:"+ un + age);
return SUCCESS;
}

/*
* Rest 风格的URL
* 以CRUD 为例:
* 新增: /order POST
* 修改: /order/1 PUT update?id=1
* 获取: /order/1 GET get?id=1
* 删除: /order/1 DELETE delete?id=1
*
* 如何发送PUT 请求和DELETE 请求呢?
* 1.需要配置 HiddenHttpMethodFilter
* 2.需要发送POST请求
* 3.需要在发送POST 请求时携带一个name="_method"值的隐藏域,值为 DELETE 或PUT
*
* */

@RequestMapping(value="/testRest/{id}",method=RequestMethod.PUT)
public String testRestPut(@PathVariable Integer id) {
System.out.println("testRest PUT:" + id );
return SUCCESS;
}

@RequestMapping(value="/testRest/{id}",method=RequestMethod.DELETE)
public String testRestDelete(@PathVariable Integer id) {
System.out.println("testRest DELETE:" + id );
return SUCCESS;
}

@RequestMapping(value="/testRest",method=RequestMethod.POST)
public String testRest() {
System.out.println("testRest POST" );
return SUCCESS;
}

@RequestMapping(value="/testRest/{id}",method=RequestMethod.GET)
public String testRest(@PathVariable Integer id) {
System.out.println("testRest GET:" + id );
return SUCCESS;
}



/*
* @PathVariable 可以来映射URL 中的站位符到目标方法的参数中
*
* */
@RequestMapping("testPathVariable/{id}")
public String testPathVariable(@PathVariable("id") Integer id) {
System.out.println("testPathVariable:" + id);
return SUCCESS;
}

@RequestMapping("testAntPath/*/abc")
public String testAntPath() {
System.out.println("testAntPath");
return SUCCESS;
}

/*
* 了解: 可以使用 params 和headers 来更加精确的映射请求,params 和headers 支持简单的表达式,
* */

@RequestMapping(value="testParamsAndHeaders",params={"username","age!=10"},headers={"Accept-Language=en-US,zh;q=0.8"})
public String testParamsAndHeaders(){
System.out.println("testParamsAndHeaders");
return SUCCESS;
}

/*
*
* 使用method 属性来指定请求方式
*
*
* */
@RequestMapping(value="/testMethod",method=RequestMethod.POST)
public String testMethod() {
System.out.println("testMethod");
return SUCCESS;
}

/*
*
*1. @RequestMapping 除了修饰方法还可以修饰类
*2.
*
* */


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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


开发过程中是不可避免地会出现各种异常情况的,例如网络连接异常、数据格式异常、空指针异常等等。异常的出现可能导致程序的运行出现问题,甚至直接导致程序崩溃。因此,在开发过程中,合理处理异常、避免异常产生、以及对异常进行有效的调试是非常重要的。 对于异常的处理,一般分为两种方式: 编程式异常处理:是指在代
说明:使用注解方式实现AOP切面。 什么是AOP? 面向切面编程,利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。 通俗描述:不通过修改源代码方式,在主干功能里面添加新功能。 AOP底层使用动态代理。 AOP术语 连接点
Spring MVC中的拦截器是一种可以在请求处理过程中对请求进行拦截和处理的机制。 拦截器可以用于执行一些公共的操作,例如日志记录、权限验证、数据转换等。在Spring MVC中,可以通过实现HandlerInterceptor接口来创建自定义的拦截器,并通过配置来指定拦截器的应用范围和顺序。 S
在 JavaWeb 中,共享域指的是在 Servlet 中存储数据,以便在同一 Web 应用程序的多个组件中进行共享和访问。常见的共享域有四种:ServletContext、HttpSession、HttpServletRequest、PageContext。 ServletContext 共享域:
文件上传 说明: 使用maven构建web工程。 使用Thymeleaf技术进行服务器页面渲染。 使用ResponseEntity实现下载文件的功能。 @Controller public class FileDownloadAndUpload { @GetMapping("/file/d
创建初始化类,替换web.xml 在Servlet3.0环境中,Web容器(Tomcat)会在类路径中查找实现javax.servlet.ServletContainerInitializer接口的类,如果找到的话就用它来配置Servlet容器。 Spring提供了这个接口的实现,名为SpringS
在 Web 应用的三层架构中,确保在表述层(Presentation Layer)对数据进行检查和校验是非常重要的。正确的数据校验可以确保业务逻辑层(Business Logic Layer)基于有效和合法的数据进行处理,同时将错误的数据隔离在业务逻辑层之外。这有助于提高系统的健壮性、安全性和可维护
什么是事务? 事务(Transaction)是数据库操作最基本单元,逻辑上一组操作,要么都成功,要么都失败,如果操作之间有一个失败所有操作都失败 。 事务四个特性(ACID) 原子性 一组操作要么都成功,要么都失败。 一致性 一组数据从事务1合法状态转为事务2的另一种合法状态,就是一致。 隔离性 事
什么是JdbcTemplate? Spring 框架对 JDBC 进行封装,使用 JdbcTemplate 方便实现对数据库操作。 准备工作 引入jdbcTemplate的相关依赖: 案例实操 创建jdbc.properties文件,配置数据库信息 jdbc.driver=com.mysql.cj.
SpringMVC1.MVC架构MVC是模型(Model)、视图(View)、控制器(Controller)的简写,是一种软件设计规范是将业务逻辑、数据、显示分离的方法来写代码MVC主要作用是:降低了视图和业务逻辑之间的双向耦合MVC是一个架构模型,不是一种设计模式。1.model(模型)数据模型,提供要展示的数据,因此包
SpringMVC学习笔记1.SpringMVC应用1.1SpringMVC简介​SpringMVC全名叫SpringWebMVC,是⼀种基于Java的实现MVC设计模型的请求驱动类型的轻量级Web框架,属于SpringFrameWork的后续产品。​MVC全名是ModelViewController,是模型(model)-视图(view)-控制器(co
11.1数据回显基本用法数据回显就是当用户数据提交失败时,自动填充好已经输入的数据。一般来说,如果使用Ajax来做数据提交,基本上是没有数据回显这个需求的,但是如果是通过表单做数据提交,那么数据回显就非常有必要了。11.1.1简单数据类型简单数据类型,实际上框架在这里没有
一、SpringMVC简介1、SpringMVC中重要组件DispatcherServlet:前端控制器,接收所有请求(如果配置/不包含jsp)HandlerMapping:解析请求格式的.判断希望要执行哪个具体的方法.HandlerAdapter:负责调用具体的方法.ViewResovler:视图解析器.解析结果,准备跳转到具体的物
1.它们主要负责的模块Spring主要应用于业务逻辑层。SpringMVC主要应用于表现层。MyBatis主要应用于持久层。2.它们的核心Spring有三大核心,分别是IOC(控制反转),DI(依赖注入)和AOP(面向切面编程)。SpringMVC的核心是DispatcherServlet(前端控制器)。MyBatis的核心是ORM(对
3.注解开发Springmvc1.使用注解开发要注意开启注解支持,2.注解简化了,处理映射器和处理适配器,只用去管视图解析器即可案例代码:1.web.xml,基本不变可以直接拿去用<!--调用DispatcherServlet--><servlet><servlet-name>springmvc</servlet-name>
拦截器概述SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。开发者可以自己定义一些拦截器来实现特定的功能。**过滤器与拦截器的区别:**拦截器是AOP思想的具体应用。过滤器servlet规范中的一部分,任何javaweb工程都可以使用
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:xsi="
学习内容:1、SSH&SSM2、Spring3、Struts2&SpringMVC4、Hibernate&MyBatis学习产出:1.SSH和SSM都是有Spring框架的,他们两个差不多。2.Spring分为四个模块,持久层,表示层,检测层,还有核心层,核心层分为2个关键核心功能。分别为,控制反转(IOC),依赖注入(DI),和面向切面编程
一、SpringMVC项目无法引入js,css的问题具体原因是css和js等被SpringMVC拦截了:解决方案:在spring-mvc.xml中配置<mvc:default-servlet-handler/><?xmlversion="1.0"encoding="UTF-8"?><beansxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
开发环境:Eclipse/MyEclipse、Tomcat8、Jdk1.8数据库:MySQL前端:JavaScript、jQuery、bootstrap4、particles.js后端:maven、SpringMVC、MyBatis、ajax、mysql读写分离、mybatis分页适用于:课程设计,毕业设计,学习等等系统介绍