當前位置:首頁 » 文件管理 » resttemplate文件上傳

resttemplate文件上傳

發布時間: 2023-02-05 01:01:02

『壹』 求java學習路線圖

/*回答內容很長,能看完的少走一個月彎路,絕不抖機靈*/

提前預警:本文適合Java新手閱讀(老手可在評論區給下建議),希望大家看完能有所收獲。

廢話不多少了,先了解一下Java零基礎入門學習路線:

第一階段:JavaSE階段

變數、數據類型、運算符

  • 二進制和十進制的轉化

  • 注釋、單行注釋、多行注釋、文本注釋、注釋內容和位元組碼的關系

  • 標識符、關鍵字、駝峰原則

  • 變數的本質、內存畫圖、變數聲明和初始化

  • 變數的分類和作用域(局部變數、成員變數、靜態變數)

  • 常量和Final

  • 基本數據類型介紹

  • 整型變數和整型常量

  • 浮點類型、float、double

  • char字元型、轉義字元

  • boolean布爾型、if語句使用要點、布爾類型佔用空間問題

  • 運算符介紹

  • 算數運算符(二元、自增、自減)

  • 賦值和賦值運算符

  • 關系運算符詳解

  • 邏輯運算符、短路運算符詳解

  • 位運算符詳解

  • 字元串連接符

  • 條件運算符(三元運算符)

  • 運算符優先順序問題

  • 自動類型轉換詳解

  • 強制類型裝換詳解

  • 基本數據類型裝換常見錯誤、溢出、L問題

  • 使用Scanner獲取鍵盤輸入

控制語句

  • 控制語句和實現邏輯對應

  • if單選結構

  • if_elseif_else多選結構

  • switch語句_IDEA更換主題

  • 循環_while

  • 循環_for循環_dowhile

  • 嵌套循環

  • break和continue語句_標簽_控制語句底層原理

  • 寫一個年薪計算機_網路查問題的秘訣(重要)

  • 個人所得稅計算器軟體

  • 方法核心詳解_天才思維模型教你高手學習思維模式

  • 方法的重載

  • 遞歸結構講解_遞歸頭_遞歸體

面向對象編程-基礎

  • 面向過程和面向對象的區別

  • 類和對象的概述

  • 類的屬性和方法

  • 創建對象內存分析

  • 構造方法(Construtor)及重載

  • 對象類型的參數傳遞

  • this關鍵字

  • static關鍵字詳解

  • 局部代碼塊、構造代碼塊和靜態代碼塊

  • package和import詳解

  • JavaDoc生成API文檔

面向對象編程-進階

  • 面向對象的三大特性

  • 面向對象之【封裝(Encapsulation)】

  • 訪問許可權修飾符

  • 面向對象之【繼承(Inheritance)】

  • Object類

  • 方法重寫Override

  • super關鍵字詳解

  • 重寫equals()和toString()

  • 繼承中對象創建的內存分析

  • 面向對象之【多態(Polymorphism)】

  • 向上轉型

  • 向下轉型

  • instanceof運算符

  • 編譯時和運行時詳解

  • final修飾符

  • 抽象類和抽象方法(abstrct)

  • 介面的定義和實現

  • JDK8的介面新特性

  • 介面應用:內部類比較器Comparable

  • 內部類詳解

  • Java的內存管理與垃圾回收

異常機制

  • 異常的概述

  • 異常的執行過程與分析

  • try-catch-finally捕捉異常

  • throw拋出異常

  • throws聲明異常

  • 異常繼承體系

  • 運行時異常和編譯異常

  • 自定義異常

Java常用類

Wrapper包裝類

  • 自動裝箱和自動拆箱

  • 包裝類的源碼分析

  • String類的使用與內存原理

  • String類的源碼分析

  • StringBuffer

  • StringBuilder

  • 字元串處理類性能分析

  • Date類

  • System類

  • DateFormat類

  • Calendat類

  • Math類

  • BigInteger類和BigDecimal類

  • Random類

  • 枚舉類

  • File類

  • 常見的面試題講述與分析

  • 數據結構演算法

  • 數據結構的概述

  • 線性表

  • 順序表

  • 鏈表

  • 棧和隊列

  • 二叉樹

  • 二叉查找樹

  • 二叉平衡樹

  • 黑紅樹

  • 冒泡排序

  • 選擇排序

  • 遞歸

  • 折半查找

  • 集合(容器)

  • 集合和數組的聯系和區別

  • 集合框架體系

  • ArrayList的使用和源碼分析

  • 集合中使用泛型

  • LinkedList的使用和源碼分析

  • HashSet的使用和源碼分析

  • 哈希表及原理

  • TreeSet的使用和源碼分析

  • 比較器Comparable和Comparator

  • HashMap的使用和源碼分析

  • TreeMap的使用和源碼分析

  • Iterator於ListIterator

  • Collections工具類

  • 舊集合類Vector、Hashtable

  • 集合總結和選擇依據

  • 泛型介面

  • 泛型類

  • 泛型方法

  • IO流

  • IO流的概念

  • IO流的分類及其原理分析

  • 文件流FlieInputStream、FileOutputStream

  • 緩沖流BufferedInputStream、BufferedOutputStream

  • 數據流ObjectInputStream、ObjectOutputStream

  • 序列化和反序列化

  • 轉換流InputStreamReader、OutputStreamWriter

  • 列印流PrintWrite和PrintStream

  • 數組流ByteArrayOutputStream、ByteArrayInputStream

  • 使用IO復制文件夾

  • 多線程

  • 進程和線程

  • 線程的創建與啟動

  • 創建線程的三種方式對比

  • 線程的生命周期

  • 線程式控制制

  • 多線程的安全問題與解決辦法

  • 線程的同步:同步代碼塊

  • 線程的同步:同步方法

  • 線程的同步:Lock鎖

  • 線程的死鎖問題

  • 線程通信

  • Condition

  • 線程的完整生命周期

  • 線程池ThreadPoolExecutor

  • ForkJoin框架

  • ThreadLocal類

  • 網路編程

  • 計算機網路基礎知識

  • 網路通信協議

  • OSI參考模型

  • TCP/IP參考模型

  • 數據的封裝與拆封原理解析

  • TCP協議

  • UDP協議

  • IP地址和埠號

  • URL和Socket

  • 使用TCP編程實現登錄功能

  • 使用UDP編程實現客服系統

  • 使用TCP編程實現文件上傳

  • 集合提升尋訓練

  • 手寫ArrayList

  • 手寫單鏈表

  • 手寫Linkedlist

  • 手寫HashMap

  • 手寫HashSet

  • 最新並發集合類

  • 多線程提升訓練

  • 生產者消費者模式擴展

  • Lock鎖和Condition

  • ReadWriteLock

  • BlockingQueue

  • volatile關鍵字

  • 多線程題目練習

  • JDK新特徵

  • 面試題詳解

  • 設計模式

  • 設計模式入門

  • 面向對象設計七大原則

  • 簡單工廠模式

  • 工廠方法模式

  • 單例模式

  • 原型模式

  • 裝飾模式

  • 適配器模式

  • 外觀模式

第二階段:資料庫

    Mysql基礎

  • 資料庫基礎知識

  • MySQL基礎知識

  • MySQL8新特徵

  • 安裝和卸載MySQL8

  • 使用navicat訪問資料庫

  • SQL語言入門

  • 創建資料庫表

  • DML

  • 修改刪除資料庫表

  • 表的完整性約束

  • 表的外鍵約束

  • DML擴展

  • MySQL 查詢語句

  • 基本select查詢

  • where子句

  • 函數

  • group by

  • having

  • SQL99-內連接查詢

  • SQL99-外連接查詢

  • SQL99-自連接查詢

  • SQL92-連接查詢

  • 不相關子查詢

  • 相關子查詢

  • 分頁查詢

  • 資料庫對象

  • 索引

  • 事務及其特徵

  • 事務的並發問題

  • 事務的隔離級別

  • 存儲過程

  • 導入導出數據

  • JDBC

  • JDBC概述

  • 使用JDBC完成添加/更新/刪除操作

  • 使用JDBC完成查詢操作

  • JDBC常用介面

  • 使用PreparedStatement

  • 使用事務完成銀行轉賬

  • 提取DBUtil工具類

  • 使用Properties讀寫屬性文件

  • 日誌框架log4j

  • 開發員工管理系統

第三階段:JavaEE階段

      Servlet

    • web開發概述

    • B/S和C/S架構簡介

    • HTTP協議

    • HTTP請求頭和響應頭

    • Tomcat安裝使用

    • Tomcat目錄結構

    • Servlet概述

    • Servlet快速入門

    • Servlet生命周期

    • 讀取配置文件信息

    • HttpServletRequest

    • HttpServletResponse

    • GET和POST區別

    • 解決中文亂碼

    • 請求轉發與重定向

    • 絕對路徑和相對路徑

    • Cookie

    • Session

    • ServletContext

    • ServletConfig

    • JSP

    • JSP技術介紹

    • JSP的執行過程

    • scriptlet

    • 表達式

    • 聲明

    • JSP指令元素

    • JSP動作元素

    • JSP隱式對象

    • JSP底層原理

    • 九大內置對象

    • 四個作用域

    • Servlet和JSP的關系和區別

    • MVC模式

    • 合並Servlet

    • JavaScript

    • JavaScript概述與特點

    • JS基礎語法

    • 函數

    • 數組

    • Math對象

    • String對象

    • Date對象

    • 事件event

    • 瀏覽器開發者工具

    • console

    • DOM和BOM

    • window

    • location

    • navigator

    • history

    • 認識DOM

    • DOM獲取元素

    • jQuery

    • jQuery簡介及快速入門

    • jQuery入口函數

    • jQuery對象與DOM對象互相轉換

    • 基本選擇器

    • 屬性選擇器

    • 位置選擇器

    • 表單選擇器

    • 內容選擇器

    • jQuery事件

    • jQuery動畫效果

    • DOM操作-操作文本

    • DOM操作-操作屬性

    • DOM操作-操作元素

    • 直接操作CSS樣式

    • 操作CSS類樣式

    • 購物車案例

    • 表單驗證

    • 正則表達式

    • EL+JSTL+過濾器+監聽器

    • EL介紹及使用

    • EL取值原理

    • EL隱含對象

    • EL邏輯運算

    • JSTL介紹-核心標簽庫

    • JSTL核心標簽庫

    • JSTL-格式標簽庫

    • Filter原理

    • Filter生命周期

    • Filter鏈

    • Filter登錄驗證

    • Filter許可權控制

    • Listener概述及分類

    • Listener監聽在線用戶

    • Ajax和JSON

    • Ajax非同步請求和局部刷新的原理

    • 使用原生Ajax驗證用戶唯一性

    • jQuery Ajax

    • JSON的格式和使用

    • 主要JSON解析器

    • Jackson的使用

    • Jackson的實現原理

    • 使用jQuery Ajax實現三級聯動

    • 使用jQuery Ajax實現自動補全

    • 分頁和文件上傳/下載

    • 分頁的意義

    • 理解分頁工具類

    • 實現基本分頁

    • 實現帶查詢的分頁

    • 文件上傳原理

    • 文件上傳API

    • 實現文件上傳

    • 文件下載原理

    • 文件下載響應頭

    • 實現文件下載

    第四階段:框架階段

      MyBatis

    • MyBatis概述

    • MyBatis入門配置

    • 基本的CRUD操作

    • 核心配置文件詳解

    • Mapper.xml基礎詳解

    • 模糊查詢

    • 分頁的實現及插件PageHelper的使用

    • 動態sql+sql片段的使用

    • 一對多、多對一的關系處理

    • 註解的使用

    • 一級緩存和二級緩存說明及使用

    • generator逆向工程使用

    • Spring

    • Spring框架簡介

    • Spring官方壓縮包目錄介紹

    • Spring環境搭建

    • IoC/DI容器詳解

    • Spring創建Bean的三種方式

    • scope屬性講解

    • Spring中幾種注入方式

    • 靜態代理設計模式

    • 動態代理設計模式

    • AOP詳解

    • AOP中幾種通知類型

    • AOP兩種實現方式

    • 自動注入

    • 聲明式事務

    • 事務傳播行為

    • 事務隔離級別

    • 只讀事務

    • 事務回滾

    • 基於註解式配置

    • 常用註解

    • Spring 整合MyBatis

    • i18n

    • Spring整合Junit

    • SpringMVC

    • MVC架構模式

    • 手寫MVC框架

    • SpringMVC簡介

    • SpringMVC運行原理

    • 基於配置文件方式搭建環境

    • 基於註解方式搭建環境

    • SpringMVC的跳轉及視圖解析器的配置

    • SpringMVC和Ajax的交互

    • Spring 參數注入

    • SpringMVC作用域傳值

    • 視圖解析器

    • 文件下載

    • 文件上傳

    • Spring攔截器/攔截器棧

    • 登錄狀態驗證

    • SpringMVC容器和Spring容器介紹

    • 異常處理4種方式

    • SpringMVC5其他常用註解

    • Maven

    • Maven簡介

    • Maven原理

    • Linux安裝及注意事項

    • Maven項目結構

    • POM模型

    • Maven 中項目類型

    • 創建WAR類型的Maven項目

    • scope屬性可取值

    • SSM項目拆分演示

    • Maven的常見插件講解

    • 熱部署

    • BootStrap

    • BootStrap概述

    • BootStrap柵格系統

    • BootStrap常用全局CSS樣式

    • 常用組件

    • 常用JavaScript插件

    • RBAC

    • RBAC概述

    • RBAC發展歷史

    • 基於RBAC的資料庫表設計

    • URL攔截實現

    • 動態菜單實現

    • 密碼學

    第五階段:前後端分離階段

      Spring Boot

    • Spring Boot簡介

    • Spring Boot實現Spring MVC

    • 配置文件順序及類型講解

    • Spring Boot項目結構

    • Spring Boot 整合MyBatis

    • Spring Boot 整合Druid

    • Spring Boot 整合PageHelper

    • Spring Boot 整合logback

    • Spring Boot 整合JSP

    • Spring Boot 整合Thymeleaf

    • Spring Boot 開發者工具

    • Spring Boot 異常顯示頁面

    • Spring Boot 整合Junit4

    • Spring Boot 項目打包部署

    • Spring Boot 整合Quartz

    • Spring Boot 中Interceptor使用

    • Spring Boot Actuator

    • HikariCP

    • Logback

    • Logback簡介

    • Logback依賴說明

    • Logback 配置文件講解

    • Logback 控制台輸出

    • Logback 文件輸出

    • Logback 資料庫輸出

    • Spring Security

    • Spring Security簡介

    • Spring Security架構原理

    • 什麼是認證和授權

    • 基礎環境搭建

    • 自定義認證流程

    • UserDetailsService和UserDetails

    • PasswordEncoder

    • 自定義認證結果

    • 授權-訪問路徑匹配方式

    • 授權-許可權管理

    • 基於註解實現許可權管理

    • Thymeleaf整合Security許可權管理

    • Rememberme 實現

    • 退出實現

    • CSRF

    • Linux - CentOS 8

    • Linux簡介

    • VMWare安裝及使用

    • Linux安裝及注意事項

    • Linux目錄結構及路徑

    • Linux常用命令

    • VMWare常用配置

    • XShell安裝及使用

    • Xftp安裝及使用

    • JDK解壓版配置步驟

    • Tomcat配置步驟

    • 安裝MySQL

    • WAR包部署

    • Docker

    • Docker簡介

    • Docker與VM對比

    • Docker特點

    • Docker架構

    • Docker安裝與啟動

    • 鏡像加速器配置

    • Docker鏡像操作常用命令

    • Docker容器操作常用命令

    • DockerFile

    • 搭建本地鏡像倉庫

    • 推送鏡像到阿里雲及本地倉庫

    • Docker容器生命周期

    • Docker數據管理

    • Redis

    • Redis簡介

    • Redis 單機版安裝

    • Redis 數據類型介紹

    • Redis 常用命令

    • Redis 持久化方案

    • Redis 的主從搭建

    • Redis的哨兵搭建

    • Redis 的集群搭建

    • Spring Boot整合Spring Data Redis

    • Redis的緩存穿透

    • Redis的緩存雪崩

    • Redis的緩存擊穿

    • Vue

    • vsCode和插件安裝

    • webpack介紹

    • Vue項目創建

    • Vue模板語法

    • Vue條件渲染

    • Vue列表渲染

    • Vue事件處理

    • Vue計算屬性

    • Vue Class與Style

    • Vue表單處理

    • Vue組件

    • Vue組件生命周期

    • Vue 路由配置

    • Vue Axios網路請求

    • Vue跨域處理

    • Vue Element

    • Mock.js

    • Swagger

    • Swagger2簡介

    • Springfox

    • Swagger2基本用法

    • Swagger-UI用法

    • Swagger2配置

    • Swagger2常用配置

    • Git/GitEE

    • Git的下載和安裝

    • Git和SVN對比

    • Git創建版本庫

    • Git版本控制

    • Git遠程倉庫

    • Git分支管理

    • Git標簽管理

    • GitEE建庫

    • GitEE 連接及使用

    • GitEE 組員及管理員配置

    第六階段:微服務架構

      FastDFS

    • 分布式文件系統概述

    • FastDFS簡介

    • FastDFS架構

    • Tracker Server

    • Storage Server

    • FastDFS安裝

    • 安裝帶有FastDFS模塊的Nginx

    • Fastdfs-java-client的使用

    • 創建Fastdfs-java-client工具類

    • 實現文件上傳與下載

    • KindEditor介紹

    • 通過KindEditor實現文件上傳並回顯

    • RabbitMQ

    • AMQP簡介

    • RabbitMQ簡介

    • 安裝Erlang

    • 安裝RabbitMQ

    • RabbitMQ原理

    • Spring Boot 集成RabbitMQ

    • RabbitMQ的交換器

    • Spring AMQP的使用

    • Spring Cloud Netflix Eureka

    • Eureka簡介

    • Eureka和Zookeeper 對比

    • 搭建Eureka注冊中心

    • Eureka 服務管理平台介紹

    • 搭建高可用集群

    • 集群原理

    • Eureka優雅停服

    • Spring Cloud Netflix Ribbon

    • Ribbon簡介

    • 集中式與進程內負載均衡區別

    • Ribbon常見的負載均衡策略

    • Ribbon的點對點直連

    • Spring Cloud OpenFeign

    • Feign簡介

    • Feign的請求參數處理

    • Feign的性能優化

    • 配置Feign負載均衡請求超時時間

    • Spring Cloud Netflix Hystrix

    • Hystrix簡介

    • 服務降級

    • 服務熔斷

    • 請求緩存

    • Feign的雪崩處理

    • 可視化的數據監控Hystrix-dashboard

    • Spring Cloud Gateway

    • Spring Cloud Gateway簡介

    • Gateway基於配置文件實現路由功能

    • Gateway基於配置類實現路由功能

    • Gateway中內置過濾器的使用

    • Gateway中自定義GatewayFilter過濾器的使用

    • Gateway中自定義GlobalFilter過濾器的使用

    • Gateway中使用過濾器實現鑒權

    • Gateway結合Hystrix實現熔斷功能

    • Spring Cloud Config

    • 什麼是分布式配置中心

    • 創建配置中心服務端

    • 創建配置中心客戶端

    • 基於Gitee存儲配置文件

    • 基於分布式配置中心實現熱刷新

    • Spring Cloud Bus

    • 什麼是消息匯流排

    • 基於消息匯流排實現全局熱刷新

    • ELK

    • ElasticSearch介紹

    • ElasticSearch單機版安裝

    • ElasticSearch集群版安裝

    • ElasticSearch索引管理

    • ElasticSearch文檔管理

    • ElasticSearch文檔搜索

    • SpringDataElasticSearch訪問ElasticSearch

    • LogStash介紹

    • 基於LogStash收集系統日誌

    • TX-LCN

    • 分布式事務簡介

    • 分布式事務兩大理論依據

    • 分布式事務常見解決方案

    • LCN簡介

    • TX-LCN的3種模式

    • LCN原理

    • LCN環境搭建及Demo演示

    • Nginx

    • Nginx的簡介

    • 什麼是正向代理、反向代理

    • Nginx的安裝

    • Nginx配置虛擬主機

    • Nginx配置服務的反向代理

    • Nginx的負載均衡配置

    • Spring Session

    • Spring Session介紹

    • 通過Spring Session共享session中的數據

    • 通過Spring Session同步自定義對象

    • Spring Session的Redis存儲結構

    • 設置Session失效時間

    • Spring Session序列化器

    • MyBatis Plus

    • MyBatis Plus簡介

    • Spring整合MyBatis Plus

    • MyBatis Plus的全局策略配置

    • MyBatis 的主鍵生成策略

    • MyBatis Plus的CRUD操作

    • 條件構造器EntityWrapper講解

    • MyBatis Plus的分頁插件配置

    • MyBatis Plus的分頁查詢

    • MyBatis Plus的其他插件講解

    • MyBatis Plus的代碼生成器講解

    • MyBatis Plus的公共欄位自動填充

    • ShardingSphere

    • 簡介

    • 資料庫切分方式

    • 基本概念

    • MySQL主從配置

    • 切片規則

    • 讀寫分離

    • 實現分庫分表

    第七階段:雲服務階段

      Kafka

    • Kafka簡介

    • Kafka架構

    • 分區和日誌

    • Kafka單機安裝

    • Kafka集群配置

    • 自定義分區

    • 自動控制

    • Spring for Apache Kafka

    • Zookeeper

    • Zookeeper簡介和安裝

    • Zookeeper 數據模型

    • Zookeeper 單機版安裝

    • Zookeeper常見命令

    • ZClient操作Zookeeper

    • Zookeeper 集群版安裝

    • Zookeeper 客戶端常用命令

    • Zookeeper分布式鎖

    • RPC

    • 什麼是分布式架構

    • 什麼是RFC、RPC

    • HttpClient實現RPC

    • RestTemplate

    • RMI實現RPC

    • 基於Zookeeper實現RPC 遠程過程調用

    • Dubbo

    • SOA架構介紹

    • Dubbo簡介

    • Dubbo結構圖

    • Dubbo注冊中心

    • Dubbo 支持的協議

    • Dubbo 注冊中心搭建

    • Spring Boot 整合 Dubbo

    • Admin管理界面

    • Dubbo 搭建高可用集群

    • Dubbo 負載均衡

    • Spring Cloud Alibaba Dubbo

    • Spring Cloud Alibaba Dubbo簡介

    • 基於Zookeeper發布服務

    • 基於Zookeeper訂閱服務

    • 實現遠程服務調用處理

    • Spring Cloud Alibaba Nacos

    • Spring Cloud Alibaba Nacos簡介

    • 搭建Nacos伺服器

    • 基於Nacos發布|訂閱服務

    • 實現遠程服務調用處理

    • Nacos Config配置中心

    • Spring Cloud Alibaba Sentinel

    • Spring Cloud Alibaba Sentinel簡介

    • 搭建Sentinel伺服器

    • Sentinel-實時監控

    • Sentinel-簇點鏈路

    • Sentinel-授權規則

    • Sentinel-系統規則

    • @SentinelResource註解

    • 持久化規則

    • Spring Cloud Alibaba Seata

    • Spring Cloud Alibaba Seata簡介

    • 搭建Seata伺服器

    • Seata支持的事務模式-AT模式

    • Seata支持的事務模式-TCC模式

    • Seata支持的事務模式-Saga模式

    • Seata支持的事務模式-XA模式

    • SeataAT事務模式應用方式

    • SeataTCC事務模式應用方式

    『貳』 resttemplate怎麼上傳文件流

    一、css代碼的次序不對 或許在你的印象中,css是無序的,可以隨意摻插,其實這種想法是錯誤的。如果你的css代碼含有多個相同的屬性,但每一個屬性都有不同的值,那麼瀏覽器會選擇哪個呢?譬如: body{background-color:red} body{background-col...

    『叄』 resttemplate怎麼傳multipartfile

    建議你在電腦的搜索欄里搜索"Templates"或者"Template",大多數軟體採用」Templates「的名稱來建立模板文件夾。 安裝的程序不同,所列的」Templates「文件夾數目有別。應該有許多」Templates「出現在你的搜索欄里。然後依次打開各個」Templates「,查找你。

    『肆』 resttemplate怎麼上傳文件流

    定義一個簡單的restful介面
    @RestController
    public class TestController
    {
    @RequestMapping(value = "testPost", method = RequestMethod.POST)
    public ResponseBean testPost(@RequestBody RequestBean requestBean)
    {
    ResponseBean responseBean = new ResponseBean();
    responseBean.setRetCode("0000");
    responseBean.setRetMsg("succ");

    return responseBean;
    }
    }

    使用RestTemplate訪問該服務
    //請求地址
    String url = "";
    //入參
    RequestBean requestBean = new RequestBean();
    requestBean.setTest1("1");
    requestBean.setTest2("2");
    requestBean.setTest3("3");

    RestTemplate restTemplate = new RestTemplate();
    ResponseBean responseBean = restTemplate.postForObject(url, requestBean, ResponseBean.class);

    從這個例子可以看出,使用restTemplate訪問restful介面非常的簡單粗暴無腦。(url,
    requestMap, ResponseBean.class)這三個參數分別代表 請求地址、請求參數、HTTP響應轉換被轉換成的對象類型。
    RestTemplate方法的名稱遵循命名約定,第一部分指出正在調用什麼HTTP方法,第二部分指示返回的內容。本例中調用了restTemplate.postForObject方法,post指調用了HTTP的post方法,Object指將HTTP響應轉換為您選擇的對象類型。還有其他很多類似的方法,有興趣的同學可以參考官方api。
    三.手動指定轉換器(HttpMessageConverter)
    我們知道,調用reseful介面傳遞的數據內容是json格式的字元串,返回的響應也是json格式的字元串。然而restTemplate.postForObject方法的請求參數RequestBean和返回參數ResponseBean卻都是java類。是RestTemplate通過HttpMessageConverter自動幫我們做了轉換的操作。
    默認情況下RestTemplate自動幫我們注冊了一組HttpMessageConverter用來處理一些不同的contentType的請求。
    如StringHttpMessageConverter來處理text/plain;來處理application/json;來處理application/xml。
    你可以在org.springframework.http.converter包下找到所有spring幫我們實現好的轉換器。
    如果現有的轉換器不能滿足你的需求,你還可以實現org.springframework.http.converter.HttpMessageConverter介面自己寫一個。詳情參考官方api。
    選好了HttpMessageConverter後怎麼把它注冊到我們的RestTemplate中呢。
    RestTemplate restTemplate = new RestTemplate();
    //獲取RestTemplate默認配置好的所有轉換器
    List<HttpMessageConverter> messageConverters = restTemplate.getMessageConverters();
    //默認的在第7個 先把它移除掉
    messageConverters.remove(6);
    //添加上GSON的轉換器
    messageConverters.add(6, new GsonHttpMessageConverter());

    這個簡單的例子展示了如何使用GsonHttpMessageConverter替換掉默認用來處理application/json的。
    四.設置底層連接方式
    要創建一個RestTemplate的實例,您可以像上述例子中簡單地調用默認的無參數構造函數。這將使用java.NET包中的標准Java類作為底層實現來創建HTTP請求。
    但很多時候我們需要像傳統的HttpClient那樣設置HTTP請求的一些屬性。RestTemplate使用了一種很偷懶的方式實現了這個需求,那就是直接使用一個HttpClient作為底層實現......
    //生成一個設置了連接超時時間、請求超時時間、異常最大重試次數的httpClient
    RequestConfig config = RequestConfig.custom().setConnectionRequestTimeout(10000).setConnectTimeout(10000).setSocketTimeout(30000).build();
    HttpClientBuilder builder = HttpClientBuilder.create().setDefaultRequestConfig(config).setRetryHandler(new (5, false));
    HttpClient httpClient = builder.build();
    //使用httpClient創建一個ClientHttpRequestFactory的實現
    ClientHttpRequestFactory requestFactory = new (httpClient);
    //ClientHttpRequestFactory作為參數構造一個使用作為底層的RestTemplate
    RestTemplate restTemplate = new RestTemplate(requestFactory);

    五.設置攔截器(ClientHttpRequestInterceptor)
    有時候我們需要對請求做一些通用的攔截設置,這就可以使用攔截器進行處理。攔截器需要我們實現org.springframework.http.client.ClientHttpRequestInterceptor介面自己寫。
    舉個簡單的例子,寫一個在header中根據請求內容和地址添加令牌的攔截器。
    public class TokenInterceptor implements ClientHttpRequestInterceptor
    {
    @Override
    public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException
    {
    //請求地址
    String checkTokenUrl = request.getURI().getPath();
    //token有效時間
    int ttTime = (int) (System.currentTimeMillis() / 1000 + 1800);
    //請求方法名 POST、GET等
    String methodName = request.getMethod().name();
    //請求內容
    String requestBody = new String(body);
    //生成令牌 此處調用一個自己寫的方法,有興趣的朋友可以自行google如何使用ak/sk生成token,此方法跟本教程無關,就不貼出來了
    String token = TokenHelper.generateToken(checkTokenUrl, ttTime, methodName, requestBody);
    //將令牌放入請求header中
    request.getHeaders().add("X-Auth-Token",token);

    return execution.execute(request, body);
    }
    }

    創建RestTemplate實例的時候可以這樣向其中添加攔截器
    RestTemplate restTemplate = new RestTemplate();
    //向restTemplate中添加自定義的攔截器
    restTemplate.getInterceptors().add(new TokenInterceptor());

    『伍』 resttemplate 500 internal server error怎麼解決

    如果您上傳的PHP程序在運行後報「Internal Server Error」錯誤,請您注意檢查以下兩方面 1、請您檢查PHP程序的屬性是否設置為755,如果PHP程序的屬性不是755,那麼運行的時候會報「Internal Server Error」錯誤,請您使用FTP軟體將屬性更改為755再測試。 2、請您檢查PHP程序所在的當前目錄下是否有名為.htaccess的文件存在,此文件會干擾PHP程序的正常運行,如果發現有此文件建議您刪除或者改名後再測試。

    『陸』 springmvc使用rest格式需要到什麼包

    在使用springmvc提供rest介面實現文件上傳時,有時為了測試需要使用RestTemplate進行調用,那麼在使用RestTemplate調用文件上傳介面時有什麼特別的地方呢?實際上只需要注意一點就行了,就是創建文件資源時需要使用org.springframework.core.io.FileSystemResource類,而不能直接使用Java.io.File對象。

    Controller中的rest介面代碼如下:

    [java] view plain
    @ResponseBody
    @RequestMapping(value = "/upload.do", method = RequestMethod.POST)
    public String upload(String fileName, MultipartFile jarFile) {
    // 下面是測試代碼
    System.out.println(fileName);
    String originalFilename = jarFile.getOriginalFilename();
    System.out.println(originalFilename);
    try {
    String string = new String(jarFile.getBytes(), "UTF-8");
    System.out.println(string);
    } catch (UnsupportedEncodingException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }
    // TODO 處理文件內容...
    return "OK";
    }

    使用RestTemplate測試上傳代碼如下:

    [java] view plain
    @Test
    public void testUpload() throws Exception {
    String url = "http://127.0.0.1:8080/test/upload.do";
    String filePath = "C:\\Users\\MikanMu\\Desktop\\test.txt";

    RestTemplate rest = new RestTemplate();
    FileSystemResource resource = new FileSystemResource(new File(filePath));
    MultiValueMap<String, Object> param = new LinkedMultiValueMap<>();
    param.add("jarFile", resource);
    param.add("fileName", "test.txt");

    String string = rest.postForObject(url, param, String.class);
    System.out.println(string);
    }

    其中:

    [java] view plain
    String string = rest.postForObject(url, param, String.class);
    可以換成:

    [java] view plain
    HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity<MultiValueMap<String,Object>>(param);
    ResponseEntity<String> responseEntity = rest.exchange(url, HttpMethod.POST, httpEntity, String.class);
    System.out.println(responseEntity.getBody());

    『柒』 如何利用Spring Cloud構建起自我修復型分布式系統

    利用Spring Cloud構建起自我修復型分布式系統:

    1. Spring Cloud Config Server

      Spring Cloud Config Server能夠提供一項具備橫向擴展能力的集中式配置服務。它所使用的數據被保存在一套可插拔庫層當中,後者目前能夠支持本地存儲、Git以及Subversion。通過利用一套版本控制系統作為配置存儲方案,開發人員能夠輕松實現版本與審計配置的內容調整。

    『捌』 報文編碼格式改為UTF-8

    這兩天項目需要將報文以xml格式推送給核心,過程中使用到RestTemplate,並且在自己拼接xml時使用了StringBuffer;

    StringBuffer的.toString()是不會生成UTF-8格式的String的。
    new String(sb.toString().getByte("你當前的編碼方式"),"UTF-8");
    這種方式我沒有測試過,因為我無法確定當前的編碼方式。
    所以我選擇的是轉換為 byte[] bytes 後
    String str = new String(bytes, "UTF-8");

    在發送的時候,使用了RestTemplate的postForObject(),
    而RestTemplate會使用StringHttpMessageConverter,其默認編碼集是ISO8859-1;
    此時我選擇設置Http請求頭:

    還有方法是在xml配置文件中配置restTempalate的Bean的StringHttpMessageConverter編碼;
    這里由於項目原因我沒法在xml配置文件中直接修改。
    我使用的方法不是單例模式的,修改xml配置文件是單例模式的。

    『玖』 puwer-spring

    1.1.1 Spring是什麼

    Spring是一個開源的輕量級Java SE(Java 標准版本)/Java EE(Java
    企業版本)開發應用框架,其目的是用於簡化企業級應用程序開發。應用程序是由一組相互協作的對象組成。而在傳統應用程序開發中,一個完整的應用是由一組相互協作的對象組成。所以開發一個應用除了要開發業務邏輯之外,最多的是關注如何使這些對象協作來完成所需功能,而且要低耦合、高內聚。業務邏輯開發是不可避免的,那如果有個框架出來幫我們來創建對象及管理這些對象之間的依賴關系。可能有人說了,比如「抽象工廠、工廠方法設計模式」不也可以幫我們創建對象,「生成器模式」幫我們處理對象間的依賴關系,不也能完成這些功能嗎?可是這些又需要我們創建另一些工廠類、生成器類,我們又要而外管理這些類,增加了我們的負擔,如果能有種通過配置方式來創建對象,管理對象之間依賴關系,我們不需要通過工廠和生成器來創建及管理對象之間的依賴關系,這樣我們是不是減少了許多工作,加速了開發,能節省出很多時間來干其他事。Spring框架剛出來時主要就是來完成這個功能。

    Spring框架除了幫我們管理對象及其依賴關系,還提供像通用日誌記錄、性能統計、安全控制、異常處理等面向切面的能力,還能幫我管理最頭疼的資料庫事務,本身提供了一套簡單的JDBC訪問實現,提供與第三方數據訪問框架集成(如Hibernate、JPA),與各種Java
    EE技術整合(如Java Mail、任務調度等等),提供一套自己的web層框架Spring
    MVC、而且還能非常簡單的與第三方web框架集成。從這里我們可以認為Spring是一個超級粘合平台,除了自己提供功能外,還提供粘合其他技術和框架的能力,從而使我們可以更自由的選擇到底使用什麼技術進行開發。而且不管是JAVA
    SE(C/S架構)應用程序還是JAVA EE(B/S架構)應用程序都可以使用這個平台進行開發。讓我們來深入看一下Spring到底能幫我們做些什麼?

    1.1.2 Spring能幫我們做什麼

    Spring除了不能幫我們寫業務邏輯,其餘的幾乎什麼都能幫助我們簡化開發:

    一、傳統程序開發,創建對象及組裝對象間依賴關系由我們在程序內部進行控制,這樣會加大各個對象間的耦合,如果我們要修改對象間的依賴關系就必須修改源代碼,重新編譯、部署;而如果採用Spring,則由Spring根據配置文件來進行創建及組裝對象間依賴關系,只需要改配置文件即可,無需重新編譯。所以,Spring能幫我們根據配置文件創建及組裝對象之間的依賴關系。

    二、當我們要進行一些日誌記錄、許可權控制、性能統計等時,在傳統應用程序當中我們可能在需要的對象或方法中進行,而且比如許可權控制、性能統計大部分是重復的,這樣代碼中就存在大量重復代碼,即使有人說我把通用部分提取出來,那必然存在調用還是存在重復,像性能統計我們可能只是在必要時才進行,在診斷完畢後要刪除這些代碼;還有日誌記錄,比如記錄一些方法訪問日誌、數據訪問日誌等等,這些都會滲透到各個要訪問方法中;還有許可權控制,必須在方法執行開始進行審核,想想這些是多麼可怕而且是多麼無聊的工作。如果採用Spring,這些日誌記錄、許可權控制、性能統計從業務邏輯中分離出來,通過Spring支持的面向切面編程,在需要這些功能的地方動態添加這些功能,無需滲透到各個需要的方法或對象中;有人可能說了,我們可以使用「代理設計模式」或「包裝器設計模式」,你可以使用這些,但還是需要通過編程方式來創建代理對象,還是要耦合這些代理對象,而採用Spring
    面向切面編程能提供一種更好的方式來完成上述功能,一般通過配置方式,而且不需要在現有代碼中添加任何額外代碼,現有代碼專注業務邏輯。所以,Spring
    面向切面編程能幫助我們無耦合的實現日誌記錄,性能統計,安全控制。

    三、在傳統應用程序當中,我們如何來完成資料庫事務管理?需要一系列「獲取連接,執行SQL,提交或回滾事務,關閉連接」,而且還要保證在最後一定要關閉連接,多麼可怕的事情,而且也很無聊;如果採用Spring,我們只需獲取連接,執行SQL,其他的都交給Spring來管理了,簡單吧。所以,Spring能非常簡單的幫我們管理資料庫事務。

    四、Spring還提供了與第三方數據訪問框架(如Hibernate、JPA)無縫集成,而且自己也提供了一套JDBC訪問模板,來方便資料庫訪問。

    五、Spring還提供與第三方Web(如Struts、JSF)框架無縫集成,而且自己也提供了一套Spring MVC框架,來方便web層搭建。

    六、Spring能方便的與Java EE(如Java Mail、任務調度)整合,與更多技術整合(比如緩存框架)。

    Spring能幫我們做這么多事情,提供這么多功能和與那麼多主流技術整合,而且是幫我們做了開發中比較頭疼和困難的事情,那可能有人會問,難道只有Spring這一個框架,沒有其他選擇?當然有,比如EJB需要依賴應用伺服器、開發效率低、在開發中小型項目是宰雞拿牛刀,雖然發展到現在EJB比較好用了,但還是比較笨重還需要依賴應用伺服器等。那為何需要使用Spring,而不是其他框架呢?讓我們接著往下看。

    1.1.3 為何需要Spring

    一 首先闡述幾個概念

    1、應用程序:是能完成我們所需要功能的成品,比如購物網站、OA系統。

    2、框架:是能完成一定功能的半成品,比如我們可以使用框架進行購物網站開發;框架做一部分功能,我們自己做一部分功能,這樣應用程序就創建出來了。而且框架規定了你在開發應用程序時的整體架構,提供了一些基礎功能,還規定了類和對象的如何創建、如何協作等,從而簡化我們開發,讓我們專注於業務邏輯開發。

    3、非侵入式設計:從框架角度可以這樣理解,無需繼承框架提供的類,這種設計就可以看作是非侵入式設計,如果繼承了這些框架類,就是侵入設計,如果以後想更換框架之前寫過的代碼幾乎無法重用,如果非侵入式設計則之前寫過的代碼仍然可以繼續使用。

    4、輕量級及重量級:輕量級是相對於重量級而言的,輕量級一般就是非入侵性的、所依賴的東西非常少、資源佔用非常少、部署簡單等等,其實就是比較容易使用,而重量級正好相反。

    5、POJO:POJO(Plain Old Java
    Objects)簡單的Java對象,它可以包含業務邏輯或持久化邏輯,但不擔當任何特殊角色且不繼承或不實現任何其它Java框架的類或介面。

    6、容器:在日常生活中容器就是一種盛放東西的器具,從程序設計角度看就是裝對象的的對象,因為存在放入、拿出等操作,所以容器還要管理對象的生命周期。

    7、控制反轉:即Inversion of Control,縮寫為IoC,控制反轉還有一個名字叫做依賴注入(Dependency
    Injection),就是由容器控製程序之間的關系,而非傳統實現中,由程序代碼直接操控。

    8、Bean:一般指容器管理對象,在Spring中指Spring IoC容器管理對象。


    為什麼需要Spring及Spring的優點


    非常輕量級的容器:以集中的、自動化的方式進行應用程序對象創建和裝配,負責對象創建和裝配,管理對象生命周期,能組合成復雜的應用程序。Spring容器是非侵入式的(不需要依賴任何Spring特定類),而且完全採用POJOs進行開發,使應用程序更容易測試、更容易管理。而且核心JAR包非常小,Spring3.0.5不到1M,而且不需要依賴任何應用伺服器,可以部署在任何環境(Java
    SE或Java EE)。

    ● AOP:AOP是Aspect Oriented
    Programming的縮寫,意思是面向切面編程,提供從另一個角度來考慮程序結構以完善面向對象編程(相對於OOP),即可以通過在編譯期間、裝載期間或運行期間實現在不修改源代碼的情況下給程序動態添加功能的一種技術。通俗點說就是把可重用的功能提取出來,然後將這些通用功能在合適的時候織入到應用程序中;比如安全,日記記錄,這些都是通用的功能,我們可以把它們提取出來,然後在程序執行的合適地方織入這些代碼並執行它們,從而完成需要的功能並復用了這些功能。


    簡單的資料庫事務管理:在使用資料庫的應用程序當中,自己管理資料庫事務是一項很讓人頭疼的事,而且很容易出現錯誤,Spring支持可插入的事務管理支持,而且無需JEE環境支持,通過Spring管理事務可以把我們從事務管理中解放出來來專注業務邏輯。


    JDBC抽象及ORM框架支持:Spring使JDBC更加容易使用;提供DAO(數據訪問對象)支持,非常方便集成第三方ORM框架,比如Hibernate等;並且完全支持Spring事務和使用Spring提供的一致的異常體系。

    ● 靈活的Web層支持:Spring本身提供一套非常強大的MVC框架,而且可以非常容易的與第三方MVC框架集成,比如Struts等。

    ● 簡化各種技術集成:提供對Java Mail、任務調度、JMX、JMS、JNDI、EJB、動態語言、遠程訪問、Web Service等的集成。

    Spring能幫助我們簡化應用程序開發,幫助我們創建和組裝對象,為我們管理事務,簡單的MVC框架,可以把Spring看作是一個超級粘合平台,能把很多技術整合在一起,形成一個整體,使系統結構更優良、性能更出眾,從而加速我們程序開發,有如上優點,我們沒有理由不考慮使用它。

    1.1.4 如何學好Spring

    要學好Spring,首先要明確Spring是個什麼東西,能幫我們做些什麼事情,知道了這些然後做個簡單的例子,這樣就基本知道怎麼使用Spring了。Spring核心是IoC容器,所以一定要透徹理解什麼是IoC容器,以及如何配置及使用容器,其他所有技術都是基於容器實現的;理解好IoC後,接下來是面向切面編程,首先還是明確概念,基本配置,最後是實現原理,接下來就是資料庫事務管理,其實Spring管理事務是通過面向切面編程實現的,所以基礎很重要,IoC容器和面向切面編程搞定後,其餘都是基於這倆東西的實現,學起來就更加輕鬆了。要學好Spring不能急,一定要把基礎打牢,基礎牢固了,這就是磨刀不誤砍柴工。

    1.2 Spring基礎

    1.2.1 Spring架構圖

    圖 1-1 Spring架構圖

    核心容器:包括Core、Beans、Context、EL模塊。


    Core模塊:封裝了框架依賴的最底層部分,包括資源訪問、類型轉換及一些常用工具類。


    Beans模塊:提供了框架的基礎部分,包括反轉控制和依賴注入。其中Bean
    Factory是容器核心,本質是「工廠設計模式」的實現,而且無需編程實現「單例設計模式」,單例完全由容器控制,而且提倡面向介面編程,而非面向實現編程;所有應用程序對象及對象間關系由框架管理,從而真正把你從程序邏輯中把維護對象之間的依賴關系提取出來,所有這些依賴關系都由BeanFactory來維護。

    ● Context模塊:以Core和Beans為基礎,集成Beans模塊功能並添加資源綁定、數據驗證、國際化、Java
    EE支持、容器生命周期、事件傳播等;核心介面是ApplicationContext。


    EL模塊:提供強大的表達式語言支持,支持訪問和修改屬性值,方法調用,支持訪問及修改數組、容器和索引器,命名變數,支持算數和邏輯運算,支持從Spring
    容器獲取Bean,它也支持列表投影、選擇和一般的列表聚合等。

    AOP、Aspects模塊:

    ● AOP模塊:Spring
    AOP模塊提供了符合 AOP Alliance規范的面向方面的編程(aspect-oriented
    programming)實現,提供比如日誌記錄、許可權控制、性能統計等通用功能和業務邏輯分離的技術,並且能動態的把這些功能添加到需要的代碼中;這樣各專其職,降低業務邏輯和通用功能的耦合。

    ● Aspects模塊:提供了對AspectJ的集成,AspectJ提供了比Spring ASP更強大的功能。

    數據訪問/集成模塊:該模塊包括了JDBC、ORM、OXM、JMS和事務管理。


    事務模塊:該模塊用於Spring管理事務,只要是Spring管理對象都能得到Spring管理事務的好處,無需在代碼中進行事務控制了,而且支持編程和聲明性的事物管理。


    JDBC模塊:提供了一個JBDC的樣例模板,使用這些模板能消除傳統冗長的JDBC編碼還有必須的事務控制,而且能享受到Spring管理事務的好處。


    ORM模塊:提供與流行的「對象-關系」映射框架的無縫集成,包括Hibernate、JPA、Ibatiss等。而且可以使用Spring事務管理,無需額外控制事務。


    OXM模塊:提供了一個對Object/XML映射實現,將java對象映射成XML數據,或者將XML數據映射成java對象,Object/XML映射實現包括JAXB、Castor、XMLBeans和XStream。

    ● JMS模塊:用於JMS(Java Messaging Service),提供一套
    「消息生產者、消息消費者」模板用於更加簡單的使用JMS,JMS用於用於在兩個應用程序之間,或分布式系統中發送消息,進行非同步通信。


    Web/Remoting模塊:Web/Remoting模塊包含了Web、Web-Servlet、Web-Struts、Web-Porlet模塊。

    ● Web模塊:提供了基礎的web功能。例如多文件上傳、集成IoC容器、遠程過程訪問(RMI、Hessian、Burlap)以及Web
    Service支持,並提供一個RestTemplate類來提供方便的Restful services訪問。


    Web-Servlet模塊:提供了一個Spring MVC Web框架實現。Spring
    MVC框架提供了基於註解的請求資源注入、更簡單的數據綁定、數據驗證等及一套非常易用的JSP標簽,完全無縫與Spring其他技術協作。


    Web-Struts模塊:提供了與Struts無縫集成,Struts1.x 和Struts2.x都支持

    Test模塊:
    Spring支持Junit和TestNG測試框架,而且還額外提供了一些基於Spring的測試功能,比如在測試Web框架時,模擬Http請求的功能。

    1.2.2 典型應用場景

    Spring可以應用到許多場景,從最簡單的標准Java
    SE程序到企業級應用程序都能使用Spring來構建。以下介紹幾個比較流行的應用場景:

    ● 典型Web應用程序應用場景:

    圖1-2 web應用程序應用場景

    在Web應用程序應用場景中,典型的三層架構:數據模型層實現域對象;數據訪問層實現數據訪問;邏輯層實現業務邏輯;web層提供頁面展示;所有這些層組件都由Spring進行管理,享受到Spring事務管理、AOP等好處,而且請求唯一入口就是DispachterServlet,它通過把請求映射為相應web層組件來實現相應請求功能。

    ● 遠程訪問應用場景:

    Spring能非常方便的提供暴露RMI服務,遠程訪問服務如Hessian、Burlap等,實現非常簡單只需通過在Spring中配置相應的地址及需要暴露的服務即可輕松實現,後邊會有介紹;

    ● EJB應用場景:

    Spring也可以與EJB輕松集成,後邊會詳細介紹。

    『拾』 resttemplate轉發佔用cpu

    resttemplate轉發佔用cpu,可以包含3種:①瀏覽器和其它應用未關閉所造成的緩沖超負荷,②頁面過多.

    熱點內容
    java返回this 發布:2025-10-20 08:28:16 瀏覽:712
    製作腳本網站 發布:2025-10-20 08:17:34 瀏覽:975
    python中的init方法 發布:2025-10-20 08:17:33 瀏覽:686
    圖案密碼什麼意思 發布:2025-10-20 08:16:56 瀏覽:837
    怎麼清理微信視頻緩存 發布:2025-10-20 08:12:37 瀏覽:744
    c語言編譯器怎麼看執行過程 發布:2025-10-20 08:00:32 瀏覽:1085
    郵箱如何填寫發信伺服器 發布:2025-10-20 07:45:27 瀏覽:314
    shell腳本入門案例 發布:2025-10-20 07:44:45 瀏覽:194
    怎麼上傳照片瀏覽上傳 發布:2025-10-20 07:44:03 瀏覽:882
    python股票數據獲取 發布:2025-10-20 07:39:44 瀏覽:840