当前位置: 首页 > news >正文

SSM--SpringMVC复习(二)

请求 URL匹配: @RequestMapping

@RequestMapping 负责将请求映射到对应的控制器方法上。

@RequestMapping 注解可用于类或方法上。用于类上,表示类中的所有响应请求的方法都以该地址作为父路径。

在整个 Web 项目中,@RequestMapping 映射的请求信息必须保证全局唯一。

@RequestMapping 注解常用属性

value

@RequestMapping 注解的默认属性,如果只有 value 属性时,可以省略该属性名,如果有其它属性,则必须写上 value 属性名称。

// 斜杠可省略
@RequestMapping(value="/login")
@RequestMapping("/login")

value 属性支持通配符匹配,如 value="user/*" 表示 user/1user/login 都能够正常访问。

path

用法同 value。

name

用来添加描述信息,相当于方法注释。如 @RequestMapping(value = "/login",name = "用户登录")

method

method 属性用于表示该方法支持哪些 HTTP 请求。省略 method 则说明该方法支持全部的 HTTP 请求。

//表示该方法只支持 GET 请求
@RequestMapping(value = "login",method = RequestMethod.GET)
//说明该方法同时支持 GET 和 POST 请求
@RequestMapping(value = "login",method = {RequestMethod.GET,RequestMethod.POST})

params

用于指定请求中规定的参数 。

//请求中必须包含 type 参数时才能执行该请求,即 /login?type=x 可访问该方法,/login 则无法访问该方法。
@RequestMapping(value = "login",params = "type")
public String doLogin() {return "/test.jsp";
}
​
//请求中必须包含 type 参数且值为1时才能执行该请求,否则无法访问
@RequestMapping(value = "login",params = "type=1")
public String doLogin() {return "/test.jsp";
}

header

表示请求中必须包含某些指定的 header 值。

consumes

用于指定请求提交内容类型(Content-Type),例如:application/json、text/html。

@RequestMapping(value = "login",consumes = "application/json")

produces

用于指定返回的内容类型,返回的内容类型必须是 request 请求头(Accept)中所包含的类型。 除此之外,还可以指定返回值的编码。

// 指定返回内容类型
@RequestMapping(value = "login", produces = "application/json")
// 指定返回内容类型,同时指定返回值编码
@RequestMapping(value = "login",produces = "application/json,charset=utf-8") 

请求参数获取

Spring MVC Controller 接收请求参数的方式有很多种,有的适合 get 请求方式,有的适合 post 请求方式,有的两者都适合。主要有以下几种方式:

  • 通过处理方法的简单形参接收请求参数

  • 通过实体 Bean 接收请求参数

  • 通过 HttpServletRequest 接收请求参数

  • 通过 @RequestParam 接收请求参数

  • 通过 @PathVariable 接收 URL 中的请求参数

通过处理方法的简单形参接收请求参数

通过方法形参接收请求参数,是根据请求参数名和方法形参名相同原则进行赋值。该接收参数方式适用于 get 和 post 提交请求方式。

@RequestMapping("/login")
public String doLogin(String username,String pwd){return "/show.jsp"; //请求转发
}

通过实体Bean接收请求参数

实体 Bean 接收请求参数适用于 get 和 post 提交请求方式。Bean 的属性名称必须与请求参数名称相同。请求参数按同名原则,赋值给 Bean 的属性。如果 Bean 中的属性是 数字类型,则 SpringMVC 会自动尝试参数类型的转换。

@RequestMapping("/login")
public String doLogin(User user){return "/show.jsp"; //请求转发
}

通过HttpServletRequest接收请求参数

@RequestMapping("/login")
public String doLogin(HttpServletRequest request){String name = request.getParameter("username");String pwd = request.getParameter("pwd");return "/show.jsp"; //请求转发
}

通过@RequestParam接收请求参数

@RequestParam 有以下三个参数:

  • value | name:参数名

  • required:是否必须,默认为 true,表示请求中必须包含对应的参数名,若不存在将抛出异常

  • defaultValue:参数默认值

@RequestMapping("/login")
public String doLogin(@RequestParam(name = "name",defaultValue = "admin")String username, @RequestParam String pwd){return "/show.jsp"; //请求转发
}

通过@PathVariable接收URL中的请求参数

/*访问 /login/admin/123456, URL中的模板变量 {name} 和 {pwd} 将值 admin 和 123456 绑定到通过 @PathVariable 注解的参数 username 和 pwd 上。
*/
@RequestMapping("/login/{name}/{pwd}")
public String doLogin(@PathVariable("name") String username, @PathVariable String pwd){return "/show.jsp"; //请求转发
}

请求转发和重定向

请求转发

  • 方式 1

    @RequestMapping("/login")
    public String doLogin(){return "/show.jsp"; 
    }
  • 方式 2

    @RequestMapping("/login")
    public String doLogin(){return "forward:/show.jsp"; 
    }
  • 方式3

    @RequestMapping("/login")
    public ModelAndView doLogin(){ModelAndView mv = new ModelAndView("/show.jsp");return mv;
    }
  • 方式4

    @RequestMapping("/login")
    public void doLogin(HttpServletRequest request, HttpServletResponse response){request.getRequestDispatcher("show.jsp").forward(request,response);
    }

重定向

  • 方式1

    @RequestMapping("/login")
    public String doLogin(){return "redirect:/show.jsp"; 
    }
  • 方式2

    @RequestMapping("/login")
    public void doLogin(HttpServletResponse response){response.sendRedirect("/demo/show.jsp");
    }

传值到View

  • 方式1

    // 将放在 model 中的属性 m2 的作用域设置为 session 范围
    @SessionAttributes("m2")  
    public class LoginController {@RequestMapping("/login")public String doLogin(Model model){model.addAttribute("m1","info");        //requestmodel.addAttribute("m2","info2");       //sessionreturn "forward:/show.jsp"; }
    }
  • 方式2

    @RequestMapping("/login")
    public ModelAndView doLogin(){ModelAndView mv = new ModelAndView();mv.setViewName("/show.jsp");mv.addObject("m","info");return mv;
    }
  • 方式3

    @RequestMapping("/login")
    public String doLogin(HttpServletRequest request,HttpSession session){request.setAttribute("m1","info");      //requestsession.setAttribute("m2","info2");     //sessionreturn "forward:/show.jsp"; 
    }
  • 方式4

    @ModelAttribute 注解用于将其修饰的对象自动暴露为模型数据,在视图页面展示时使用。

    @RequestMapping("/login")
    //等价于 model.addAttribute("user",user)
    public String doLogin(@ModelAttribute("user") User user){return "/show.jsp";
    }
    ​
    @RequestMapping("/login")
    //等价于 model.addAttribute("User",yh)
    public String doLogin(@ModelAttribute User yh){return "/show.jsp";
    }

Ajax 响应

@Controller

@Controller
public class LoginController {@RequestMapping("/login")@ResponseBody       // 响应 Ajax 请求,必须添加此注解public Student doLogin(String name,String pwd){User user = userService.selectUser(name,pwd);return user;    // 返回到 view 的数据会自动转为 json(js) 对象}
}

@RestController

@RestController = @Controller+@ResponseBody

@RestController
public class LoginController {@RequestMapping("/login")public User login(String name,String pwd) {User user = userService.selectUser(name,pwd);return user;}
}

视图资源解析器

视图解析器(ViewResolver)是 Spring MVC 的重要组成部分,负责将逻辑视图名解析为具体的视图对象。

URLBasedViewResolver

UrlBasedViewResolver 是对 ViewResolver 的一种简单实现,主要提供了一种拼接 URL 的方式来解析视图。

UrlBasedViewResolver 通过 prefix 属性指定前缀,suffix 属性指定后缀。当 ModelAndView 对象返回具体的 View 名称时,它会将前缀 prefix 和后缀 suffix 与具体的视图名称拼接,得到一个视图资源文件的具体加载路径,从而加载真正的视图文件并反馈给用户。

使用 UrlBasedViewResolver 除了要配置前缀和后缀属性之外,还需要配置“viewClass”,表示解析成哪种视图。

<bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">            <property name="viewClass" value="org.springframework.web.servlet.view.InternalResourceViewResolver"/><!--不能省略--><!--前缀--><property name="prefix" value="/WEB-INF/jsp/"/><!--后缀--><property name="suffix" value=".jsp"/>  </bean>

 存放在 /WEB-INF/ 目录下的内容不能直接请求到,为了安全性考虑,通常把 jsp 文件放在 WEB-INF 目录下 

InternalResourceViewResolver

InternalResourceViewResolver 为“内部资源视图解析器”,是日常开发中最常用的视图解析器类型。它是 URLBasedViewResolver 的子类,拥有 URLBasedViewResolver 的一切特性。

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"><!--前缀--><property name="prefix" value="/WEB-INF/jsp/"/><!--后缀--><property name="suffix" value=".jsp"/>  
</bean>

http://www.lryc.cn/news/491452.html

相关文章:

  • C语言蓝桥杯组题目
  • 【解决】Unity TMPro字体中文显示错误/不全问题
  • 【Threejs进阶教程-着色器篇】9.顶点着色器入门
  • 质量留住用户:如何通过测试自动化提供更高质量的用户体验
  • 【CSP CCF记录】201803-1第13次认证 跳一跳
  • 详解Qt 中使用虚拟键盘(软键盘qtvirtualkeyboard)
  • cocoscreater3.8.4生成图集并使用
  • IDEA如何快速地重写方法,如equals、toString等
  • 网络安全——SpringBoot配置文件明文加密
  • LightRAG开源了…结合本地ollama实现股票数据接口Akshare智能问答
  • 【PCB设计】AD16教程:分配位号
  • ElasticSearch7.x入门教程之索引概念和基础操作(三)
  • Python后端flask框架接收zip压缩包方法
  • 机器学习中数据集Upsampling和Downsampling是什么意思?中英文介绍
  • 浏览器控制台中使用ajax下载文件(没有postman等情况下)
  • 完全二叉树的基本操作(顺序存储)
  • 【HTTP】http与https
  • 【Git多人开发与协作之团队的环境搭建】
  • java基础概念36:正则表达式1
  • java实现小程序接口返回Base64图片
  • 网络编程并发服务器的应用
  • 数据结构——停车场管理问题
  • 道品智能科技移动式水肥一体机:农业灌溉施肥的革新之选
  • AI实习--常用的Linux命令
  • Python学习指南 + 谷歌浏览器如何安装插件
  • 研0找实习【学nlp】15---我的后续,总结(暂时性完结)
  • kylin麒麟银河桌面版操作系统安装部署
  • MyBatis插件原理及应用
  • [M最短路] lc743. 网络延迟时间(spfa最短路+单源最短路)
  • MySQL 中的锁