大家好,欢迎来到IT知识分享网。
一、常用注解
1.1 RequestParam
1.1.1 使用说明
作用: 把请求中指定名称的参数给控制器中的形参赋值。
属性:
value:请求参数中的名称。
required:请求参数中是否必须提供此参数。默认值:true。表示必须提供,如果不提供将报错。
1.1.2 使用示例
1.2 RequestBody
1.2.1 使用说明
作用:
用于获取请求体内容。直接使用得到是 key=value&key=value…结构的数据。 get 请求方式不适用。
属性:
required:是否必须有请求体。默认值是true。当取值为 true 时,get 请求方式会报错。如果取值为false,get 请求得到是 null。
1.2.2 使用示例
1.3 PathVaribale
1.3.1 使用说明
作用:
用于绑定 url 中的占位符。例如:请求url中/delete/{id},这个{id}就是url占位符。是springmvc 支持 rest 风格 URL 的一个重要标志。
属性:
value:用于指定 url 中占位符名称。
required:是否必须提供占位符。
1.3.2 使用示例
1.3.3 REST 风格 URL
什么是 rest:
REST(英文:Representational State Transfer,简称 REST)描述了一个架构样式的网络系统, 比如 web 应用程序。它首次出现在 2000 年 Roy Fielding 的博士论文中,他是 HTTP 规范的主要编写者之 一。在目前主流的三种 Web 服务交互方案中,REST 相比于 SOAP(Simple Object Access protocol,简单对象访问协议)以及 XML-RPC 更加简单明了,无论是对 URL 的处理还是对 Payload 的编码,REST 都倾向于用更加简单轻量的方法设计和实现。值得注意的是 REST 并没有一个明确的标准,而更像是一种设计的风格。
它本身并没有什么实用性,其核心价值在于如何设计出符合 REST 风格的网络接口。
restful 的优点:它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用。
restful 的特性:
资源(Resources):网络上的一个实体,或者说是网络上的一个具体信息。 它可以是一段文本、一张图片、一首歌曲、一种服务,总之就是一个具体的存在。可以用一个 URI(统一资源定位符)指向它,每种资源对应一个特定的 URI 。要获取这个资源,访问它的 URI 就可以,因此 URI 即为每一个资源的独一无二的识别符。
表现层(Representation):把资源具体呈现出来的形式,叫做它的表现层 (Representation)。 比如,文本可以用 txt 格式表现,也可以用 HTML 格式、XML 格式、JSON 格式表现,甚至可以采用二 进制格式。
状态转化(State Transfer):每发出一个请求,就代表了客户端和服务器的一次交互过程。 HTTP 协议,是一个无状态协议,即所有的状态都保存在服务器端。因此,如果客户端想要操作服务器, 必须通过某种手段,让服务器端发生“状态转化”(State Transfer)。而这种转化是建立在表现层之上的,所以就是 “表现层状态转化”。具体说,就是 HTTP 协议里面,四个表示操作方式的动词:GET 、POST 、PUT、 DELETE。它们分别对应四种基本操作:GET 用来获取资源,POST 用来新建资源,PUT 用来更新资源,DELETE 用来删除资源。
1.3.4 基于 HiddentHttpMethodFilter 的示例
作用: 由于浏览器 form 表单只支持 GET 与 POST 请求,而 DELETE、PUT 等 method 并不支持,Spring3.0 添 加了一个过滤器,可以将浏览器请求改为指定的请求方式,发送给我们的控制器方法,使得支持 GET、POST、PUT 与 DELETE 请求。
使用方法:
第一步:在 web.xml 中配置该过滤器。
第二步:请求方式必须使用 post 请求。
第三步:按照要求提供_method 请求参数,该参数的取值就是我们需要的请求方式。
1.4 RequestHeader
1.4.1 使用说明
作用: 用于获取请求消息头。
属性: value:提供消息头名称
required:是否必须有此消息头
注: 在实际开发中一般不怎么用。
1.5 CookieValue
1.5.1 使用说明
作用: 用于把指定 cookie 名称的值传入控制器方法参数。
属性: value:指定 cookie 的名称。
required:是否必须有此 cookie。
1.5.2 使用举例:
1.6 ModelAttribute
1.6.1 使用说明
作用:
该注解是 SpringMVC4.3 版本以后新加入的。它可以用于修饰方法和参数。 出现在方法上,表示当前方法会在控制器的方法执行之前,先执行。它可以修饰没有返回值的方法,也可以修饰有具体返回值的方法。
出现在参数上,获取指定的数据给参数赋值。
属性:
value:用于获取数据的 key。key 可以是 POJO 的属性名称,也可以是 map 结构的 key。
应用场景:
当表单提交数据不是完整的实体类数据时,保证没有提交数据的字段使用数据库对象原来的数据。
例如: 我们在编辑一个用户时,用户有一个创建信息字段,该字段的值是不允许被修改的。在提交表单数据是肯定没有此字段的内容,一旦更新会把该字段内容置为 null,此时就可以使用此注解解决问题。
1.7 SessionAttribute
1.7.1 使用说明
作用: 用于多次执行控制器方法间的参数共享。
属性: value:用于指定存入的属性名称
type:用于指定存入的数据类型。
二、响应数据和结果视图
2.1 返回值分类
2.1.1 字符串
2.1.2 void
Servlet 原始 API 可以作为控制器中方法的参数: @RequestMapping(“/testReturnVoid”)
public void testReturnVoid(HttpServletRequest request,HttpServletResponse response) throws Exception { }
在 controller 方法形参上可以定义 request 和 response,使用 request 或 response 指定响应结果:
1、使用 request 转向页面,如下:
request.getRequestDispatcher(“/WEB-INF/pages/success.jsp”).forward(request, response);
2、也可以通过 response 页面重定向: response.sendRedirect(“testRetrunString”)
3、也可以通过 response 指定响应结果,例如响应 json 数据: response.setCharacterEncoding(“utf-8”); response.setContentType(“application/json;charset=utf-8”); response.getWriter().write(“json 串”);
2.1.3 ModelAndView
ModelAndView 是 SpringMVC 为我们提供的一个对象,该对象也可以用作控制器方法的返回值。
示例代码:
@RequestMapping(“/testReturnModelAndView”)
public ModelAndView testReturnModelAndView() {
ModelAndView mv = new ModelAndView();
mv.addObject(“username”, “张三”);
mv.setViewName(“success”);
return mv;
}
2.2 转发和重定向
2.2.1 forward 转发
controller 方法在提供了 String 类型的返回值之后,默认就是请求转发。我们也可以写成:
@RequestMapping(“/testForward”)
public String testForward() {
System.out.println(“AccountController 的 testForward 方法执行了”);
return “forward:/WEB-INF/pages/success.jsp”;
}
注意:如果用了formward:则路径必须写成实际视图url,不能写逻辑视图。
它相当于“request.getRequestDispatcher(“url”).forward(request,response)”使用请求 转发,既可以转发到 jsp,也可以转发到其他的控制器方法。
2.2.2 Redirect 重定向
2.3 ResponseBody 响应 json 数据
2.3.1 使用说明
作用: 该注解用于将 Controller 的方法返回的对象,通过 HttpMessageConverter 接口转换为指定格式的数据,如:json,xml 等,通过Response响应给客户端
2.3.2 使用示例
需求: 使用@ResponseBody 注解实现将 controller 方法返回对象转换为 json 响应给客户端。
前置知识点: Springmvc 默认用 MappingJacksonHttpMessageConverter 对 json 数据进行转换,需要加入 jackson 的包。
jsp 中的代码:
控制器中的代码:
三、SpringMVC 实现文件上传
3.1 文件上传的回顾
3.1.1 文件上传的必要前提
3.1.2 文件上传的原理分析
3.1.3 借助第三方组件实现文件上传
3.2 springmvc 传统方式的文件上传
3.2.1 说明
传统方式的文件上传,指的是我们上传的文件和访问的应用存在于同一台服务器上。 并且上传完成之后,浏览器可能跳转。
3.2.2 实现步骤
3.2.2.1 第一步:拷贝文件上传的 jar 包到工程的 lib 目录
3.2.2.2 第二步:编写 jsp 页面
3.2.2.3 第三步:编写控制器
3.2.2.4 第四步:配置文件解析器
3.3 springmvc 跨服务器方式的文件上传
3.3.1 分服务器的目的
在实际开发中,我们会有很多处理不同功能的服务器。例如:
应用服务器:负责部署我们的应用
数据库服务器:运行我们的数据库
缓存和消息服务器:负责处理大并发访问的缓存和消息
文件服务器:负责存储用户上传文件的服务器。
分服务器处理的目的是让服务器各司其职,从而提高我们项目的运行效率。
3.3.2 准备两个 tomcat 服务器,并创建一个用于存放图片的 web 工程
3.3.3 拷贝 jar 包
3.3.4 编写控制器实现上传图片
3.3.5 编写 jsp 页面
3.3.6 配置解析器
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/123533.html