SpringMVC知识 day02 常用注解&响应数据&文件上传

一、常用注解
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 配置解析器
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小陈工

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值