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

银川做网站最好的公司有哪些国内高清图片素材网站推荐

银川做网站最好的公司有哪些,国内高清图片素材网站推荐,广告联盟官网入口,网站建设与管理实践心得【0】README1#xff09;本文部分文字描述转自#xff1a;“Spring In Action#xff08;中/英文版#xff09;”#xff0c;旨在review “spring(7)spring mvc 的高级技术” 的相关知识#xff1b;2#xff09;本文将会看到如何编写控制器来处理文件上传#xff0c;如…【0】README1本文部分文字描述转自“Spring In Action中/英文版”旨在review  “spring(7)spring mvc 的高级技术” 的相关知识2本文将会看到如何编写控制器来处理文件上传如何处理控制器所抛出的异常以及如何在模型中传递数据使其能够在重定向之后仍然存活【1】spring mvc 配置的替代方案【1.1】 自定义 DispatcherServlet配置【1.2】添加其他的Servlet 和 Filter【1.3】在web.xml 中声明 DispatcherServlet【2】处理multipart 形式的数据1应用需求Spittr 在新用户注册的时候需要上传头像在发布Spittle的时候需要插入图片同微博一样2intro图片是二进制数据multipart格式的数据 会将一个表单拆分为多个部分(part)每个部分对应一个输入域3在一般表单输入域中它所对应的部分会防止文本型数据但如果上传文件的话它所对应的部分可以是二进制下面展现了 multipart的请求体【2.1】配置multipart解析器1introDispatcherServlet并没有实现任何解析 multipart 请求数据的功能它将该任务委托给了 spring 中 MultipartResolver 接口的实现通过这个实现类来解析multipart 请求中的内容2spring3.1 开始内置了两个 MultipartResolver 的实现2.1CommonsMultipartResolver使用 Jakarta Commons  FileUpload 解析 multipart请求 2.2StandardServletMultipartResolver依赖于Servlet3.0 对 multipart 请求 的支持干货——优选方案因为它不依赖于第三方库 【2.1.1】使用 Servlet3.0解析 multipart请求1在spring 应用上下文中将StandardServletMultipartResolver 声明为bean Beanpublic MultipartResolver multipartResolver() throws IOException {return new StandardServletMultipartResolver();}2如何限制 StandardServletMultipartResolver 的工作方式呢如限制用户上传文件的大小和文件类型干货——我们就不会直接创建 DispatcherServlet实例并将其注册到 Servlet上下文中2.1看个荔枝最基本的 DispatcherServlet multipart配置它将临时路径设置为 /tmp/spittr/uploads DispatcherServlet ds new DispatcherServlet(); Dynamic registration context.addServlet(appServlet, ds); registration.addMapping(/); registration.setMultipartConfig(new MultipartConfigElement(/tmp/spittr/uploads)); 2.2如果配置DispatcherServlet 的 Servlet初始化类继承了 AbstractAnnotationConfigDispatcherServletInitializer 或 AbstractDispatcherServletInitializer,那么我们就不会直接创建 DispatcherServlet实例并将其注册到 Servlet上下文中这样的话将不会有对 Dynamic Servlet registration 的引用供我们使用了。但我们可以通过重载 customizeRegistration() 方法 来配置 multipart 的具体细节 Override protected void customizeRegistration(Dynamic registration) {registration.setMultipartConfig(new MultipartConfigElement(/tmp/spittr/uploads)); } 对以上代码的分析Analysis上述代码所使用的 只有一个参数的 MultipartConfigElement 构造器指定的是文件系统中的一个绝对目录上传文件将会临时写入到该目录中 3处理设置临时路径还可以设置其他参数parametersparameter1上传文件的最大容量以字节为单位默认是没有限制的 parameter2整个mulitpart 请求的最大容量以字节为单位不会关心有多少个part以及每个part的大小默认是没有限制的 parameter3在上传的过程中如果文件大小得到了一个指定最大容量以字节为单位将会写入到临时文件路径中。默认值为0.也就是所上传的文件都会写入到磁盘上 3.1看个荔枝限制文件大小不超过2M整个请求不超过4M而且所有的文件都写到磁盘上则设置为 Override protected void customizeRegistration(Dynamic registration) {registration.setMultipartConfig(new MultipartConfigElement(/tmp/spittr/uploads,2097152, 4194304, 0)); } Supplement使用xml 配置来设置的话如下servletservlet-nameappServlet/servlet-nameservlet-classorg.springframework.web.servlet.DispatcherServlet/servlet-classload-on-startup1/load-on-startupmultipart-configlocation/tmp/spittr/uploads/locationmax-file-size2097152/max-file-size max-request-size4194304/max-request-size/multipart-config /servlet 【2.1.2】 配置 JAKARTA COMMONS FILEUPLOAD MULTIPART RESOLVER1intro如果我们需要将应用部署到非 Servlet3.0 容器中就使用该配置spring 内置了CommonsMultipartResolver可以作为 StandardServletMultipartResolver 配置的替代方案2如何配置CommonsMultipartResolver2.1将CommonsMultipartResolver 声明为 spring bean的 简单方式如下 Bean public MultipartResolver multipartResolver() {return new CommonsMultipartResolver(); }2.2CommonsMultipartResolver不会强制要求设置临时文件路径默认case下这个路径就是 Servlet容器的临时目录不过通过 updateTempDir属性类设置不同 位置 Bean public MultipartResolver multipartResolver() throws IOException {CommonsMultipartResolver multipartResolver new CommonsMultipartResolver();multipartResolver.setUploadTempDir(new FileSystemResource(/tmp/spittr/uploads));return multipartResolver; } 2.3看个荔枝 设置最大的文件容量为2M最大的内存大小为0字节所有的文件都会写到磁盘中与MultipartConfigElement 不同的是我们无法设置 multipart 请求整体的最大容量 Bean public MultipartResolver multipartResolver() throws IOException {CommonsMultipartResolver multipartResolver new CommonsMultipartResolver();multipartResolver.setUploadTempDir(new FileSystemResource(/tmp/spittr/uploads));multipartResolver.setMaxUploadSize(2097152);multipartResolver.setMaxInMemorySize(0);return multipartResolver; } 【2.2】处理multipart请求1intro保存图片到文件系统有两种方式methodmethod1multipartFile method2part形式 2编写spring 控制器来接收上传的文件 最常见的方式就是在某个控制器方法上添加 RequestPart注解2.1修改前台模板添加上传图片插件省略 2.2修改控制器方法 RequestMapping(value/register, methodPOST)public String processRegistration(RequestPart(profilePicture) byte[] profilePicture, // highlight line.Valid Spitter spitter,Errors errors) { //... } 对以上代码的分析Analysis A1profilePicture属性将会给定一个 byte数组这个数组中包含了请求中对应的part数据通过RequestPart类指定如果用户提交表单的时候没有选择文件那么这个数组是空的而不是null A2获取到图片数据后processRegistration方法接下来就是将文件保存到某个位置了下面讲如何处理文件的存储 【2.2.1】接收 MultipartFile1introspring提供了MultipartFile接口它为处理multipart数据提供了内容丰富的对象对以上代码的分析AnalysisA1Multipart提供了获取上传文件byte的方式但是它所提供的功能并不仅限于此还能获得原始的文件名大小以及内容类型 A2它还提供了一个 InputStream用来将文件数据以流的方式进行读取 A3MultipartFile 还提供了一个便利的 transferTo()方法能够帮助我们将上传的文件写入到文件系统中 profilePicture.transferTo(new File(/data/spittr/ profilePicture.getOriginalFilename())); 【2.2.2】将文件保存到 Amazon S3中省略【2.2.3】以Part的形式接收上传的文件 1intro如果你需要将应用程序部署到 Servlet3.0的容器中那么会有Multipart的一个替代方案——spring mvc 接收 javax.servlet.http.Part 作为控制器方法的参数2若使用 Part来替换 MultipartFile的话那么 processRegistration() 方法签名会变成如下形式RequestMapping(value/register, methodPOST) public String processRegistration(RequestPart(profilePicture) Part profilePicture,Valid Spitter spitter,Errors errors) {//... }3Part接口方法一览package javax.servlet.http; import java.io.*; import java.util.*; public interface Part { public InputStream getInputStream() throws IOException;public String getContentType();public String getName();public String getSubmittedFileName();public long getSize();public void write(String fileName) throws IOException;public void delete() throws IOException;public String getHeader(String name);public CollectionString getHeaders(String name);public CollectionString getHeaderNames(); }对以上代码的分析AnalysisA1Part方法与 MultipartFile 方法有些类似如getSubmittedFileName() 方法 同 getOriginalFilename()方法类似write()方法 与 transferTo()方法类似 A2借助于该方法write方法可以将上传的文件写入文件系统中 profilePicture.write(/data/spittr/ profilePicture.getOriginalFilename()); Attention只有使用 MultipartFile 的时候才需要 MultipartResolver 【3】处理异常1introspring提供了多种方式将异常转换为响应way1特定的spring 异常将会自动映射为指定 的 HTTP 状态码 way2异常上可以添加 ResponseStatus注解从而将其映射为某一个HTTP 状态码 way3在方法上添加 ExceptionHandler 注解使其用来处理异常 2处理异常的最简单的方法就是将其映射到 HTTP 状态码上进而放到响应中【3.1】将异常映射为 HTTP 状态码1introspring 的一些异常会默认映射为 HTTP状态码 对上表的分析Analysis 以上异常一般会由 spring 自身抛出作为 DispatcherServlet处理过程中或执行校验时出现问题的结果 2ResponseStatus注解spring 提供了一种机制通过ResponseStatus注解 将异常也会为 HTTP 状态码 2.1不加 ResponseStatus注解的caseSpittleNotFoundException 将会产生500状态码的响应实际上如果出现任何没有映射的异常响应都会带有500状态码 2.2加上 ResponseStatus注解的case使用该注解将 SpittleNotFoundException 映射为 HTTP 状态码 404 ResponseStatus(valueHttpStatus.NOT_FOUND,reasonspittle not found) public class SpittleNotFoundException extends RuntimeException{ } 【3.2】编写异常处理的方法 1problemsolution 1.1problem如果我们想在响应中不仅要包括状态码还要包含所产生的错误怎么来处理 1.2solution我们不能将异常视为 HTTP 错误了而是要按照处理请求的方式来处理异常 2看个荔枝 对以上代码的分析Analysis若视图创建的Spittle 已存在数据库中则抛出DuplicateSpittleException这样一来该方法就有两条路径每个路径有不同的输出 3如何让saveSpittle方法只关注正确的路径而让其他方法处理异常 3.1step1首先将saveSpittle方法中的异常处理剥离掉 3.2step2为SpittleController 添加新方法处理抛出的异常 对ExceptionHandler注解的分析该注解能处理同一个控制器中所有处理器方法所抛出的异常所以我们不用在每个可能抛出 DuplicateSpittleException 方法中添加异常处理代码这一个方法就涵盖了所有功能 【4】为控制器添加通知 1intro有没有一种方法能够处理所有控制器中处理器方法所抛出的异常呢 2spring3.2 提供了solution控制器通知它是任意带有 ControllerAdvice注解 的类这个类会包含一个或多个如下类型的方法 func1ExceptionHandler 注解标注的方法 func2InitBinder注解标注的方法 func3ModelAttribute注解标注的方法 Attention在带有ControllerAdvice注解的类中以上这些方法会运用到整个应用程序所有控制器中带有 RequestMapping注解的方法上 3ControllerAdvice注解最为实用的一个case是将所有 ExceptionHandler 方法收集到一个类中这样所有控制器的异常就能在一个地方进行一致的处理了干货——ControllerAdvice注解最为实用的一个case 4看个荔枝如我们想将DuplicateSpittleException 的处理方法用到整个应用程序的所有控制器上 【5】跨重定向请求传递数据 1传递数据 1.1传递简单数据如Stringint类型使用 URL 模板进行重定向 1.2传递复杂数据如对象使用 Flash 属性 2problemsolution 2.1problem正在发起重定向功能的方法该如何发送数据给重定向的目标方法呢一般来讲当一个处理器方法完成后该方法所指定的模型数据将会copy 到 请求中并作为请求中的属性请求会转发forward到视图上进行渲染。因为控制器方法和视图所处理的是同一个请求所以在转发过程中请求属性能够得以保存但是重定向(redirect) 的case就不同了 2.2solution如下图所示当控制器的结果是重新向的话原始的请求就结束了并且会发出一个新的 GET  请求原始请求中所带有的模型数据也就消亡了 Attention显然对于重定向来说模型并不能用来传递数据干货——对于重定向来说模型并不能用来传递数据 3其他数据传递方案能够从发起重定向的方法传递数据给处理重定向方法中 way1使用 URL 模板以路径变量 或/和 查询参数的形式传递数据 way2通过flash 属性发送数据 【5.1】 通过URL 模板进行重定向 1通过路径变量和查询参数传递数据以下使用String连接的写法很危险 return redirect:/spitter/{username}; 2spring还提供了使用模板的方式来定义重定向URL RequestMapping(value/register, methodRequestMethod.POST)public String processRegistration(Spitter spitter, Model model) {spitterRepository.save(spitter);model.addAttribute(username, spitter.getUsername());return redirect:/spitter/{username};} 对以上代码的分析username 作为占位符填充到了URL 模板中所以username中所有不安全字符都会进行转义 3除此之外模型中所有其他的原始类型值都可以添加到 URL中作为查询参数 RequestMapping(value /register, method RequestMethod.POST)public String processRegistration2(Spitter spitter, Model model) {spitterRepository.save(spitter);model.addAttribute(username, spitter.getUsername()); // highlight line.model.addAttribute(spitterId, spitter.getId()); // highlight line.return redirect:/spitter/{username};} 对以上代码的分析 因为模型中的spitterId 属性没有匹配重定向URL 中的任何占位符所以它会自动以查询参数的形式附加到重定向URL上 Attention通过路径变量和查询参数传递数据 有一个限制 它只能用来发送简单的数据如String类型 和 数字的值 【5.2】使用flash属性发送复杂数据 1problemsolution 1.1problem发送实际的 Spitter对象而不是简单的int类型数据 1.2solution 1.2.1schema1将Spitter对象 放入到 会话中然后重定向后再将其从会话中取出 1.2.2schema2spring 提供了提供了将数据发送为 flash 属性的功能。flash 属性会一直携带这些数据直到下一次请求才会消失干货——flash属性的作用 2RedirectAttributes 提供了一组 addFlashAttribute() 方法来添加flash属性如下 3通过flash属性传递数据的原理在重定向前所有的flash属性都会复制到会话中重定向后存在会话中的flash 属性会被取出并从会话转移到模型中如下图所示 4看个荔枝
http://www.ihoyoo.com/news/53990.html

相关文章:

  • 网站备案管理系统网站微信清粉网站开发
  • 淘宝客绑定网站备案号全国二级建造师注册查询
  • 加强门户网站建设方案网上商城采购
  • 网站底部浮动广告代码vs做网站如何输出
  • 网站名加引号2345电视剧网站免费
  • 做设计 素材网站有哪中企动力企业电子商务
  • 可以做网站挂在百度上吗wordpress不显示主题
  • 网站建设公司如何开拓客户付费推广的途径和原因
  • 站长统计ios新乡商城网站建设价格
  • 济南品牌网站建设低价成都旅游路线一览表
  • 网站模板建设报价如何使用手机看建设网站
  • 做自媒体的上那些网站门户网站的注意要素
  • 大气机械网站免费咨询法律律师在线12348
  • 做问卷调查的网站有哪些内容外贸找客户平台
  • 如何选取网站关键词广告图文制作用哪个软件
  • 题库网站开发网站备案后的标识
  • 网站建设 精品课程哪些网站可以查企业信息
  • 出口网站怎么做北京兄弟搬家公司
  • 制作网站深圳太原网络营销
  • 北京seo网站设计wordpress更改路径
  • 网站外包合作wordpress网页加密
  • 手机端网站建设方案新闻发布会活动方案
  • 长沙做模板网站青岛一品网站建设
  • 微网站建设行业现状科技与人文
  • 南通网站排名优化公司做小程序公司哪家好
  • 小企业网站建设的小知识做水果生意去哪个网站
  • 企业网站制作报价表网页框架是什么
  • 好用的html模板网站北京高端网站建
  • 南京建设局的网站首页网站内链怎么布局
  • 北京网站建设制作哪家公司好无极网站无极城市在线