mvc json 亂碼_你了解JSON嗎?——Jackson、FastJson在SpringMVC中的簡單使用

原文參考分享自CSDN:你了解JSON嗎?--Jackson、FastJson在SpringMVC中的簡單使用_歡迎來到 Baret~H 的博客-CSDN博客

1. 什么是 JSON

JSON(JavaScript Object Notation, JS 對象標記)
  • 是一種輕量級的數據交換格式
  • 采用完全獨立于編程語言的文本格式來存儲和表示數據。
  • 簡潔和清晰的層次結構使得 JSON 成為理想的數據交換語言。
  • 易于人閱讀和編寫,也易于機器解析和生成,并有效地提升網絡傳輸效率。

在 JavaScript 語言中,一切都是對象。因此,任何JavaScript 支持的類型都可以通過 JSON 來表示,例如字符串、數字、對象、數組等。


2. JSON 語法規則

  • 鍵值對表示對象,數據由逗號分隔
  • 花括號保存對象
  • 方括號保存數組

JSON 鍵值對 是用來保存 JavaScript 對象的一種方式

  • 花括號括起來的逗號分割的成員構成
  • 鍵值對組合中的鍵名寫在前面并用雙引號""包裹,使用冒號 :分隔,然后緊接著值
{"name": "zsr","age": "20","sex": "男"}

3. JSON 與 JS 對象的關系

JSON 是 JavaScript 對象的字符串表示法,它使用文本表示一個 JS 對象的信息,本質是一個字符串。
var obj = {a: 'Hello', b: 'World'}; //這是一個對象,注意鍵名也是可以使用引號包裹的
var json = '{"a": "Hello", "b": "World"}'; //這是一個 JSON 字符串,本質是一個字符串

4. JSON 和 JS 對象互轉

編寫一個html頁面進行測試
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>test</title>
</head>
<body>
<script type="text/javascript">var user = {name: "zsr",age: 20,sex: "男"};console.log(user);//將js對象轉換為json對象var json = JSON.stringify(user);console.log(json);//將json對象轉換為js對象var obj = JSON.parse(json);console.log(obj);
</script>
</body>
</html>

運行測試,查看控制臺信息:

  • JSON就是一個字符串,不能展開
  • JavaScript是一個對象,可以展開

94b00239704b39ff0ed130d99f407e30.png

5. 使用Jackson數據交互

Jackson 是一個 Java 的用來處理 JSON 格式數據的類庫,性能非常好

當然不止這一個類庫,比如還有阿里巴巴的 fastjson 等等。

a6e79904336a618c23f6a84c5e1a1b85.png
接下來我們簡單介紹一下SpringMVC中Jackson的使用

1、導入依賴

導入Jackson的jar包
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.11.2</version>
</dependency>

2、配置web.xml

配置SpringMVC需要的配置web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><!--1.注冊servlet--><servlet><servlet-name>SpringMVC</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!--通過初始化參數指定SpringMVC配置文件的位置,進行關聯--><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc-servlet.xml</param-value></init-param><!-- 啟動順序,數字越小,啟動越早 --><load-on-startup>1</load-on-startup></servlet><!--所有請求都會被springmvc攔截 --><servlet-mapping><servlet-name>SpringMVC</servlet-name><url-pattern>/</url-pattern></servlet-mapping><!--SpringMVC內置過濾器,防止中文亂碼--><filter><filter-name>encoding</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>utf-8</param-value></init-param></filter><filter-mapping><filter-name>encoding</filter-name><url-pattern>/</url-pattern></filter-mapping>
</web-app>

3、編寫SpringMVC配置文件

springmvc-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttps://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/mvchttps://www.springframework.org/schema/mvc/spring-mvc.xsd"><!-- 自動掃描指定的包,下面所有注解類交給IOC容器管理 --><context:component-scan base-package="controller"/><!-- 視圖解析器 --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"id="internalResourceViewResolver"><!-- 前綴 --><property name="prefix" value="/WEB-INF/jsp/" /><!-- 后綴 --><property name="suffix" value=".jsp" /></bean></beans>

4、編寫實體類 (lombok)

編寫一個User的實體類,然后我們去編寫我們的測試Controller;
package pojo;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {private String name;private int age;private String sex;
}

5、編寫Controller

@Controller
public class UserController {@RequestMapping("/j1")@ResponseBody //它不會走視圖解析器,會直接返回一個字符串public String json1() {//創建一個對象User user = new User("zsr", 20, "男");return user.toString();}
}

這里我們使用了@ResponseBody注解,他是配合@Controller使用的,該注解可以使不走視圖解析器,而是直接返回一個字符串

同樣可以直接將@Controller替換為@RestController,也可以達到不走視圖解析器,直接返回字符串的效果,此時就不用使用@ResponseBody注解了

6、運行測試

配置Tomcat,點擊運行,訪問http://localhost:8080/j1,結果如下

14636f77ce8b05bc99694d40cc81c04d.png


我們并沒有通過視圖解析器,而是直接返回了字符串

7、轉換為JSON格式

如果我們想以json的格式進行輸出,除了上述@ResponseBody注解之外,還需要一個objectMapper對象

我們修改上述Controller

@Controller
public class UserController {@RequestMapping("/j1")@ResponseBody //它不會走視圖解析器,會直接返回一個字符串public String json1() throws JsonProcessingException {//創建jackson的對象映射器,用來解析數據ObjectMapper mapper = new ObjectMapper();//創建一個對象User user = new User("zsr", 20, "男");//將對象轉換成json格式String str = mapper.writeValueAsString(user);//由于@ResponseBody注解,這里會將str轉成json格式返回;十分方便return str;}
}

重新運行測試,同行訪問http://localhost:8080/j1,成功以json的格式進行顯示!

84899c8a959af3301acb85637e44eef8.png


但是還存在亂碼問題,我們需要設置一下他的編碼格式為utf-8,以及它返回的類型;

這里可以通過@RequestMappingproduces屬性來實現,修改下代碼

//produces:指定響應體返回類型和編碼
@RequestMapping(value = "/json1",produces = "application/json;charset=utf-8")

再次測試,亂碼問題得到解決

cbe392354b92a5572220f27ecd2c50f6.png

8、代碼優化

1. 亂碼問題

上述設置@RequestMappingproduces屬性值的方式比較麻煩,如果項目中有多個controller則每一個都要添加

可以通過Spring配置統一指定,在SpringMVC配置文件中加入如下代碼即可
<!--json亂碼問題配置-->
<mvc:annotation-driven><mvc:message-converters register-defaults="true"><bean class="org.springframework.http.converter.StringHttpMessageConverter"><constructor-arg value="UTF-8"/></bean><bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"><property name="objectMapper"><bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean"><property name="failOnEmptyBeans" value="false"/></bean></property></bean></mvc:message-converters>
</mvc:annotation-driven>

2. 返回json字符串統一解決

上述我們使用了@ResponseBody注解,他是配合@Controller使用的,該注解可以使不走視圖解析器,而是直接返回一個字符串

同樣可以直接將@Controller替換為@RestController,也可以達到不走視圖解析器,直接返回字符串的效果,此時就不用使用@ResponseBody注解了

@RestController
public class UserController {@RequestMapping(value = "/json1")public String json1() throws JsonProcessingException {//創建一個jackson的對象映射器,用來解析數據ObjectMapper mapper = new ObjectMapper();//創建一個對象User user = new User("zsr", 20, "男");//將我們的對象解析成為json格式String str = mapper.writeValueAsString(user);//由于@RestController注解,這里會將str轉成json格式返回;十分方便return str;}
}

9、測試集合輸出

增加一個新的方法,多個對象的情況下,我們會將其放在一個集合中
@RequestMapping(value = "/j2")
public String json2() throws JsonProcessingException {//創建jackson的對象映射器,用來解析數據ObjectMapper mapper = new ObjectMapper();//創建容器List<User> list = new ArrayList<User>();//創建多個對象User user1 = new User("zsr1", 20, "男");User user2 = new User("zsr2", 20, "男");User user3 = new User("zsr3", 20, "男");User user4 = new User("zsr4", 20, "男");User user5 = new User("zsr5", 20, "男");//將所有對象存入容器list.add(user1);list.add(user2);list.add(user3);list.add(user4);list.add(user5);//將對象轉換成json格式String str = mapper.writeValueAsString(list);//由于@RequestMapping注解,這里會將str轉成json格式返回;十分方便return str;
}

運行測試,成功將所有對象的信息都以json的形式顯示出來

ac849a098ff397707bdcd66909e60a80.png

10、輸出日期對象

增加一個新的方法,測試日期對象的輸出
@RequestMapping(value = "/j3")
public String json3() throws JsonProcessingException {//創建jackson的對象映射器,用來解析數據ObjectMapper mapper = new ObjectMapper();//創建一個日期對象Date date = new Date();//將對象轉換為json格式String str = mapper.writeValueAsString(date);//ObjectMapper對時間解析后的默認格式為:Timestamp(時間戳)return str;
}

運行測試,訪問http://localhost:8080/j3,手動刷新,可以看到這個數字增長很快

2655aab4ac07c2002fd4a1504f123d1b.png
  • 默認日期格式會變成一個數字,是1970年1月1日到當前日期的毫秒數!
  • Jackson 默認是會把時間轉成timestamps形式

如果我們不想以時間戳的方式顯示呢?

方式一:我們新增一個方法,自定義日期的格式

@RequestMapping(value = "/j4")
public String json4() throws JsonProcessingException {//創建jackson的對象映射器,用來解析數據ObjectMapper mapper = new ObjectMapper();//創建一個日期對象Date date = new Date();//自定義日期格式SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yy-mm-dd hh:mm:ss");//將對象轉換為json格式String str = mapper.writeValueAsString(simpleDateFormat.format(date));return str;
}

運行測試:訪問http://localhost:8080/j4,成功按我們規定的格式輸出

c3d9723c0eacb20ca5252e3b5583a1d8.png

方式二:取消timestamps形式 , 自定義時間格式

@RequestMapping(value = "/j5")
public String json5() throws JsonProcessingException {//創建jackson的對象映射器,用來解析數據ObjectMapper mapper = new ObjectMapper();//不使用時間戳的方式mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);//自定義日期格式SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yy-mm-dd hh:mm:ss");//指定日期格式mapper.setDateFormat(simpleDateFormat);//創建一個日期對象Date date = new Date();//將對象轉換為json格式String str = mapper.writeValueAsString(date);return str;
}

運行測試:訪問http://localhost:8080/j5,同樣成功按我們規定的格式輸出

4e4ac0bb38612773a4f27a0a605be457.png

6. 使用FastJson進行數據交互

fastjson.jar是阿里開發的一款專門Java處理JSON開發的包
  • Fastjson 是一個 Java 庫,可以將 Java 對象轉換為 JSON 格式,當然它也可以將 JSON 字符串轉換為 Java 對象。
  • Fastjson 可以操作任何 Java 對象,即使是一些預先存在的沒有源碼的對象。

菜鳥教程:https://www.runoob.com/w3cnote/fastjson-intro.html

Fastjson 源碼地址:https://github.com/alibaba/fastjson

Fastjson 中文 Wiki:https://github.com/alibaba/fastjson/wiki/Quick-Start-CN

dc05f1d164055194f8cc43a519a3b0db.png
接下來我們簡單介紹一下SpringMVC中fastjson的使用

1. 導入依賴依賴

<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.73</version>
</dependency>

2. 三個主要的類

JSONObject

代表 json對象
  • JSONObject實現了Map接口, 猜想 JSONObject底層操作是由Map實現的。
  • JSONObject對應json對象,通過各種形式的get()方法可以獲取json對象中的數據,也可利用諸如size(),isEmpty()等方法獲取"鍵:值"對的個數和判斷是否為空。其本質是通過實現Map接口并調用接口中的方法完成的。

JSONArray

代表 json對象數組
  • 內部是有List接口中的方法來完成操作的。

JSON

代表 JSONObjectJSONArray 的轉化
  • JSON類源碼分析與使用
  • 仔細觀察這些方法,主要是實現json對象,json對象數組,javabean對象,json字符串之間的相互轉化。

3. 代碼測試

新建一個方法,利用fastjson的方法返回json字符串:
@RequestMapping(value = "/j6")
public String json6() throws JsonProcessingException {//創建容器List<User> list = new ArrayList<User>();//創建多個對象User user1 = new User("zsr1", 20, "男");User user2 = new User("zsr2", 20, "男");User user3 = new User("zsr3", 20, "男");User user4 = new User("zsr4", 20, "男");User user5 = new User("zsr5", 20, "男");//將所有對象存入容器list.add(user1);list.add(user2);list.add(user3);list.add(user4);list.add(user5);return JSON.toJSONString(list);
}

運行測試:同樣正確顯示了結果

a72054538290cea27ac1007c662ceeee.png

4. 常用方法測試代碼

這種工具類,我們只需知道了解即可,在使用的時候在根據具體的業務去找對應的實現即可

接下來是幾種常用的方法(更多的方法在具體的業務時查找使用即可)

public static void main(String[] args) {//創建容器List<User> list = new ArrayList<User>();//創建多個對象User user1 = new User("zsr1", 20, "男");User user2 = new User("zsr2", 20, "男");User user3 = new User("zsr3", 20, "男");User user4 = new User("zsr4", 20, "男");User user5 = new User("zsr5", 20, "男");//將所有對象存入容器list.add(user1);list.add(user2);list.add(user3);list.add(user4);list.add(user5);//常用代碼測試System.out.println("Java對象集合轉化為JSON字符串:  "+ JSON.toJSONString(list));System.out.println("Java對象user1轉化為JSON字符串:  "+ JSON.toJSONString(user1));System.out.println("JSON字符串轉化為Java對象user1:  "+ JSON.parseObject(JSON.toJSONString(user1), User.class));System.out.println("Java對象user1轉化為JSON對象:  "+ JSON.toJSON(user1));System.out.println("JSON對象轉化為Java對象user1:  "+ JSON.toJavaObject((JSON) JSON.toJSON(user1), User.class));
}

運行結果:

79bc2a0d0705e68a2d779fe7da412331.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/530580.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/530580.shtml
英文地址,請注明出處:http://en.pswp.cn/news/530580.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

format 函數包含_Python成為專業人士筆記-高級對象Format格式化

“專業人士筆記”系列目錄&#xff1a;創帆云&#xff1a;Python成為專業人士筆記--強烈建議收藏&#xff01;每日持續更新&#xff01;?zhuanlan.zhihu.com在存儲和轉換數據輸出供查看時&#xff0c;字符串格式可能變得非常重要。Python提供了本文概述的各種字符串格式化方法…

python 預測算法_Python 與金融數據使用機器學習算法預測交易策略

記得 關注、分享、點在看呀&#xff5e; 這樣您就能持續收到優質的推送啦這一期&#xff0c;我們將使用上一期處理好的數據特征和標簽訓練機器&#xff0c;然后預測交易策略。我們將分別使用 K近鄰算法和集成學習兩種方法分別完成模型的訓練和預測。FinTech HistoryPython 與金…

mysql主從表結構差異_mysqldiff對比主從表結構是否一致

mysqldiff該工具是官方mysql-utilities工具集的一個腳本&#xff0c;可以實現主從服務器表結構是否一致。數據校驗需要使用Percona的pt-table-checksum工具。安裝&#xff1a;# tar zxvf mysql-utilities-1.5.4.tar.gz# cd mysql-utilities-1.5.4# python setup.py install使用…

mysql 存儲過程插入慢_mysql存儲過程太慢怎么辦

mysql存儲過程太慢的解決方法&#xff1a;首先打開my.cnf配置文件&#xff1b;然后添加配置【long_query_time1】&#xff1b;接著通過【tail -f /tmp/logs/mysqld.log】命令監控sql&#xff1b;最后進行針對性的優化即可。解決方法&#xff1a;第一步&#xff1a;修改/etc/my.…

mongoose換成mysql_Package - tms-koa

tms-koa基于koa的輕量級快速開發框架&#xff0c;包含 MVC 中的 M 和 C 兩部分&#xff0c;適合于實現 API 服務和前后端徹底分離的應用。內置基于 access_token 的訪問鑒權機制&#xff0c;更容易實現 API 調用的負載分擔。內置通過連接池訪問 MySQL 數據庫&#xff0c;支持進…

導出遠程mysql數據庫中的表_shell腳本實現導出遠程mysql數據庫表數據至本地

bin/main.sh腳本內容 #!/bin/bash#作用&#xff1a;用于同步遠程mysql數據庫表數據至本地#作者&#xff1a;丁藝博source /etc/profilesource ~/.bash_profileexport LANGen_US.UTF-8export RUN_HOME$(cd "$(dirname "$0")"; echo "${PWD%/*}")s…

商業智能解決方案_格至智能開關:簡單便捷的商業智能照明解決方案

美萊恩智能照明推出的格至智能調光開關&#xff0c;是一款便捷、可輕松實現擴展的智能照明系統。它能夠節約能源&#xff0c;并在為各種空間工作或者學習的人們&#xff0c;營造最舒適的照明環境。借助美萊恩SLT單火線傳輸技術&#xff0c;在新建或者改造項目中&#xff0c;你將…

vue 安裝 less_解決舊Vue項目升級less-loader 6.0.0報錯

作為一個愛折騰的主,我的package隨時都是ncu -u! 何為ncu,就是檢查nodejs npm/yarn項目依賴最新版本package.json一個插件! 這不,前幾天less-loader 升級了最新版,我也迫不及待升級。 升級最新版軟件依賴有很多好處,總之作為一個開發者你發布新版本肯定是升級改造的工作…

php讀取mysql數據無法修改時間_php設置mysql查詢讀取數據的超時時間

php可以設置mysql查詢的超時時間估計大家不知道吧&#xff0c;一般都直接在mysql中進行設置了&#xff0c;下面我們來為各位介紹一下php設置mysql查詢讀取數據的超時時間吧。現象&#xff1a;php能通過代理正常連接到mysql。但是&#xff0c;執行query后&#xff0c;一直等待&a…

mysql無序id怎么優化limit_MYSQL分頁limit速度太慢優化方法

原標題&#xff1a;MYSQL分頁limit速度太慢優化方法在mysql中limit可以實現快速分頁&#xff0c;但是如果數據到了幾百萬時我們的limit必須優化才能有效的合理的實現分頁了&#xff0c;否則可能卡死你的服務器哦。當一個表數據有幾百萬的數據的時候成了問題&#xff01;如 * fr…

反積分飽和 程序_用抗積分飽和PID控制傳遞函數為G(s)的被控對象

題目&#xff1a;用抗積分飽和PID控制傳遞函數為G(s)的被控對象G(s)523500/(s^387.35s^210470s)二、抗積分飽和原理積分飽和現象是在系統存在一個方向的偏差&#xff0c;PID控制器的輸出由于積分作用的不斷加大而加大&#xff0c;從而導致執行器達到極限位置&#xff0c;如果控…

mysql top 1效率_TOP 1比不加TOP慢的疑惑

問題描述&#xff1a; 有一個查詢如下&#xff0c;去掉 TOP 1 的時候&#xff0c;很快就出來結果了&#xff0c;但加上 TOP 1 的時候&#xff0c;一般要 2~3 秒才出數據&#xff0c;何解&#xff1f; SELECT TOP 1 ??? A . INVNO FROM A , B WHERE A . Item B . ItemNumber…

jieba庫詞頻統計_用jieba庫統計文本詞頻及云詞圖的生成

一、安裝jieba庫&#xff1a;\>pip install jieba #或者 pip3 install jieba二、jieba庫解析jieba庫主要提供提供分詞功能&#xff0c;可以輔助自定義分詞詞典。jieba庫中包含的主要函數如下&#xff1a;jieba.cut(s) …

mysql查看表描述_MySQL表記錄操作介紹(重點介紹查詢操作)

MySQL表記錄操作指的是對數據庫表中數據進行CRUD增刪改查操作&#xff0c;一下將一一給大家介紹&#xff0c;重點介紹查詢操作。一、插入數據(INSERT)二、刪除數據(DELETE)三、修改數據(UPDATE)四、查詢數據(SELECT)下面將以例子對數據查詢進行詳細講解&#xff1a;例子&#x…

python郵件的圖片放在哪里_用python保存電子郵件中的嵌入圖像

我試圖在一個嵌入的電子郵件中抓取圖像。問題是我保存的圖像不可讀&#xff0c;我不知道為什么。電子郵件(保存為我在代碼開頭加載的文件)&#xff1a;MIME-Version: 1.0Received: by 10.100.120.7 with HTTP; Tue, 18 Oct 2011 10:36:48 -0700 (PDT)In-Reply-To: <8B4FDE07…

sqoop從mysql導入hdfs_sqoop 從mysql導入數據到hdfs、hive

1.上傳sqoop安裝包 2.安裝和配置 在添加sqoop到環境變量 將數據庫連接驅動拷貝到$SQOOP_HOME/lib里 3.使用 第一類&#xff1a;數據庫中的數據導入到HDFS上 sqoop import --connect jdbc:mysql://hadoop07:3306/test --username root --password 123 --table user_info--colum…

安卓mysql插入數據_【11-25求助】關于Android 的SQLite數據庫插入數據報錯問題

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓運行程序&#xff0c;不知道為何點插入數據按鈕會報錯&#xff0c;請萬能的吧友幫我看看&#xff0c;謝謝&#xff0c;不廢話&#xff0c;直接上代碼MainActivity.javapackage com.example.activity16;import android.support.v7.a…

安裝python擴展庫時只能使用pip_安裝 Python 擴展庫時只能使用 pip 工具在線安裝,如果安裝不成功就沒有別的辦法了。_學小易找答案...

【單選題】關于Python中的復數,下列說法錯誤的是_________________。【填空題】在Python程序中,導入sys模塊后,可以通過列表________________訪問命令行參數。_________________表示Python腳本名;____________________表示第一個參數。【簡答題】嘗試用顏色 表達 冷暖 感覺 !【…

opencv java_opencv的Java開發環境配置(IntelliJ idea)

1、首先我們先到官網下載opencv的包&#xff0c;在官網下載到的是一個可運行文件&#xff0c;其實就是一個解壓程序&#xff0c;運行后會把opencv的相關文件解壓到填寫的路徑。2、 在編輯環境變量窗口&#xff0c;點擊新建&#xff0c;然后將opencv文件夾里的bin路徑復制進去&a…

java session 永不過期_Java Web Application使Session永不失效(利用cookie隱藏登錄)

在做 Web Application 時&#xff0c;因為 Web Project 有 session 自動失效的問題&#xff0c;所以如何讓用戶登錄一次系統就能長時間運行三個月&#xff0c;就是個問題。后來&#xff0c;看到 session 失效的攔截器代碼&#xff0c;就猜想能否通過攔截器來實現。查資料發現可…