springMVC-常见视图组件与RESTFul编程风格

张开发
2026/4/29 23:40:49 15 分钟阅读

分享文章

springMVC-常见视图组件与RESTFul编程风格
常见的视图组件Spring MVC支持的常见视图包括InternalResourceView内部资源视图Spring MVC内置的专门为jsp模板语法准备的、RedirectView重定向视图Spring MVC内置的用来完成重定向效果、ThymeleafView第三方专门为ThymeleafView模板语法准备的......实现视图机制的核心类和核心接口DispatcherServlet:前端控制器负责接收前端请求根据请求路径找到对应的处理器方法执行处理器方法最终返回ModelAndView对象ViewResolver视图解析器接口​ 这个接口的作用是将逻辑视图名称转换为物理视图名称。并最终返回一个view接口对象。View视图接口​ 这个接口负责将模板语法的字符串转换成HTML代码并且将HTML代码响应给浏览器进行渲染。转发与重定向的区别转发重定向一次请求浏览器地址栏不会发生变化两次请求浏览器地址栏会发生变化转发代码request.getRequestDispatcher(/index).forward(request,response);重定向代码response.sendRedirect(/webapp/index);服务器内部资源跳转由服务器控制不可实现跨域访问可以完成内部资源跳转也可以完成跨域访问可以访问WEB-INF目录下受保护的资源无法访问WEB-INF目录下受保护的资源。因为重定向相当于浏览器重新发送了一次请求浏览器发送的请求无法访问被保护的资源springMVC实现转发forwardRequestMapping(/a) public String toA(){ // 采用springmvc的视图转发机制跳转到/b // 格式forward:下一个资源的路径这里的b不是逻辑视图名称是一个资源路径 return forward:/b; } RequestMapping(/b) public String toB(){ return b; }springMVC实现重定向RequestMapping(/a) public String toA(){ // 采用springmvc的视图重定向机制跳转到/b // 格式redirect:下一个资源的路径 // 如果要实现跨域需要写全路径比如https://baidu.com return redirect:b; } RequestMapping(/b) public String toB(){ return b; }mvc:view-controller这个配置用于将某个请求映射到特定的视图上即指定某一个URL请求到一个视图资源的映射。使得这个视图资源可以被访问。相当于一个独立的处理程序不需要编写Controller只需要指定URL和视图名称就可以了。一般用来配置首页、错误页等。在springmvc-servlet.xml文件中添加如下配置!-- 配置视图控制器必须开启注解驱动才能生效-- !-- path/ok表示访问路径view-nameok表示视图名称。 访问http://localhost:8080/springmvc-04/ok时 会直接返回ok.html页面不需要经过控制器方法的处理-- mvc:view-controller path/ok view-nameok / !-- 开启注解驱动支持RequestMapping等注解-- mvc:annotation-driven /访问静态资源使用默认Servlet处理静态资源在springmvc-servlet.xml文件中添加如下配置!-- 开启默认的servlet处理器允许静态资源如CSS、JavaScript、图片等通过默认的servlet进行处理而不是被Spring MVC拦截。 这对于提供静态资源非常重要否则这些资源可能无法正确加载。 当请求的URL没有匹配到任何控制器方法时默认的servlet处理器会尝试查找对应的静态资源并返回给客户端。 例如如果请求http://localhost:8080/springmvc-04/css/style.css默认的servlet处理器会尝试找到webapp目录下的css/style.css文件并返回给客户端。 如果没有开启默认的servlet处理器Spring MVC会尝试处理所有请求包括静态资源的请求这可能会导致静态资源无法正确加载出现404错误。 因此开启默认的servlet处理器是确保静态资源能够正确加载的重要配置。 需要注意的是默认的servlet处理器只会处理那些没有被Spring MVC拦截的请求如果请求被Spring MVC拦截了那么默认的servlet处理器就不会介入处理了。 另外默认的servlet处理器也不会处理那些被Spring MVC拦截但没有找到匹配的控制器方法的请求这些请求会直接返回404错误而不会尝试查找静态资源。 因此开启默认的servlet处理器是确保静态资源能够正确加载的重要配置但也需要确保Spring MVC的请求映射配置正确以避免不必要的请求被Spring MVC拦截导致静态资源无法加载。 -- mvc:default-servlet-handler /使用mvc:resources标签配置静态资源使用mvc:resources标签必须开启注解驱动 mvc:annotation-driven / 。在springmvc-servlet.xml文件中添加如下配置!-- 开启注解驱动支持RequestMapping等注解-- mvc:annotation-driven / !-- 配置静态资源处理器mapping属性指定访问路径location属性指定资源位置。 例如mapping/static/**表示访问路径以/static/开头的请求会被该资源处理器处理location/static/表示资源文件位于webapp目录下的static文件夹中。 当请求http://localhost:8080/springmvc-04/static/css/style.css时该资源处理器会尝试找到webapp目录下的static/css/style.css文件并返回给客户端。 -- mvc:resources mapping/static/** location/static/ /RESTFul编程风格RESTFulRespresentational State Transfer 表述性状态转移 简称REST是web服务接口的一种设计风格。RESTFul对一个web服务接口规定了哪些东西对请求的URL格式有约束和规范对HTTP请求方式有约束和规范对请求和响应的数据格式有约束和规范对HTTP状态码有约束和规范REST对请求方式的约束查询必须是get请求新增必须是post请求修改必须是put请求删除必须是delete请求RESTFul对URL的约束和规范的核心是采用不同的请求方式URL来确定web服务中的资源。RESTFul风格查询所有数据GetMapping(/user) public String getAllUsers() { return success; }RESTFul风格根据id查询一条数据GetMapping(/user/{id}) public String getUserById(PathVariable(id) Integer id) { return success; }RESTFul风格新增用户信息PostMapping(/user) public String saveUser(User user) { return success; }RESTFul风格修改用户信息修改用户信息必须发送put请求。如何发送put或delete请求呢要想发送put请求。首先必须是一个post请求在post请求表单中添加隐藏域!--name 必须是_methodvalue必须是put或者是delete-- input typehidden name_method valueput在web.xml添加一个过滤器!--这个过滤器的作用是将HTTP请求中的隐藏字段通常是一个名为_method的参数转换为HTTP方法如PUT、DELETE等。 这对于HTML表单来说非常有用因为HTML表单只支持GET和POST方法 而通过使用隐藏字段可以模拟其他HTTP方法从而实现更丰富的RESTful API设计。-- filter filter-namehiddenHttpMethodFilter/filter-name filter-classorg.springframework.web.filter.HiddenHttpMethodFilter/filter-class /filter filter-mapping filter-namehiddenHttpMethodFilter/filter-name url-pattern/*/url-pattern /filter-mappingPutMapping(/user) public String modifyUser(User user) { return success; }RESTFul风格删除用户信息DeleteMapping(/user/{id}) public String deleteUserById(PathVariable(id) Integer id) { return success; }

更多文章