當前位置:首頁 » 資源管理 » 靜態資源包含哪些內容
擴展閱讀
木子電動工具是哪裡的 2025-06-14 23:27:55
哪個畫家畫的畫價格最高 2025-06-14 23:23:23
毛騙小成本是多少 2025-06-14 23:07:53

靜態資源包含哪些內容

發布時間: 2022-03-15 22:25:01

㈠ Spring Boot中靜態資源等應該放在什麼位置

Spring 框架包含幾十個不同的子項目,涵蓋應用開發的不同方面。要在這些子項目之間進行選擇,並快速搭建一個可以運行的應用是比較困難的事情。Spring Boot 的目的在於快速創建可以獨立運行的 Spring 應用。

㈡ 靜態資源配置名詞解釋靜態資源配置名詞解釋

靜態資源和動態資源的概念
簡單來說:
靜態資源:一般客戶端發送請求到web伺服器,web伺服器從內存在取到相應的文件,返回給客戶端,客戶端解析並渲染顯示出來。
動態資源:一般客戶端請求的動態資源,先將請求交於web容器,web容器連接資料庫,資料庫處理數據之後,將內容交給web伺服器,web伺服器返回給客戶端解析渲染處理。
2.靜態資源和動態資源的區別
a.靜態資源一般都是設計好的html頁面,而動態資源依靠設計好的程序來實現按照需求的動態響應;
b.靜態資源的交互性差,動態資源可以根據需求自由實現;
c.在伺服器的運行狀態不同,靜態資源不需要與資料庫參於程序處理,動態可能需要多個資料庫的參與運算。

㈢ 「頭文件 」,「源文件 」,「資源文件」,分別是什麼意思

頭文件就是.h文件,一般用來放類的聲明,平時你用的#include<string.h>就是包含這種文件
源文件就是.cpp文件,一般用來放你在頭文件里聲明的類成員函數的具體實現,一般一個.h文件總會有一個同名的.cpp
譬如現在我有一個類
class T
{
void printf(){}
}
這些內容就放在.h文件中
void T::printf(){......}
這些內容就放在.cpp文件中
(MFC的消息衍射類都是這樣的)
至於資源文件就是.rc文件,用來存放一些譬如菜單,或者圖標等資源的內容

㈣ 互聯網中的靜態資源指什麼呢

html,htm,css ,js ,jpg .txt 這種文件,都算靜態資源

㈤ java靜態資源(靜態方法,靜態屬性)是程序一運行就載入到jvm中,還是當被調用的時候才進行載入呢

當類第一次被調用時載入(靜態方法,靜態屬性的載入就是類載入) 。

1、類中的靜態屬性會被加入到類對象(也可以叫做類的模板,是類的描述) 的構造器中,靜態方法也會被加入到類對象中。

2、當第一次使用類時,JVM會通過類載入器,載入類對象,從而初始化靜態屬性,並裝入類的方法,包括靜態方法和實例方法(方法不會被調用,只是載入,從這個意義上來說,靜態方法和實例方法是類似的)。

3、當創建類的實例對象時,JVM會調用類的構造器,從而初始化類的屬性。

(5)靜態資源包含哪些內容擴展閱讀:

類(包括靜態方法、屬性)載入過程:

一、載入。

根據一個類的全限定名(如cn.e.h.test.HelloWorld.class)來讀取此類的二進制位元組流到JVM內部。

將位元組流所代表的靜態存儲結構轉換為方法區的運行時數據結構(hotspot選擇將Class對象存儲在方法區中,Java虛擬機規范並沒有明確要求一定要存儲在方法區或堆區中)轉換為一個與目標類型對應的java.lang.Class對象。

二、連接。

1、驗證。

驗證階段主要包括四個檢驗過程:文件格式驗證、元數據驗證、位元組碼驗證和符號引用驗證;

2、准備。

為類中的所有靜態變數分配內存空間,並為其設置一個初始值(由於還沒有產生對象,實例變數將不再此操作范圍內);

3、解析。

將常量池中所有的符號引用轉為直接引用(得到類或者欄位、方法在內存中的指針或者偏移量,以便直接調用該方法)。這個階段可以在初始化之後再執行。

㈥ web應用中的動態資源和靜態資源分別指什麼

靜態資源不需要資料庫參與,動態資源需要資料庫參與運算。

㈦ Resources這個文件夾是什麼

這是系統資源文件夾,用來存放系統SHELL資源文件,可以進行內容刪除,但是文件夾不要刪除。

所有可以從中讀取出需要的資源的文件,可以稱之為「資源文件」。資源的類型可以是圖片、音頻、視頻、文字資源,或者其他可以在計算機中展示的內容等等。由專門的程序介面去讀取,並在應用程序中根據需要向用戶展示。

資源文件包含著無需重新編輯代碼便可以改變的點陣圖、字元串和其它數據。例如,如果計劃用一種外語將應用程序本地化,可以將用戶界面的全部正文串和點陣圖存放在資源文件里,然後將資源文件本地化,而不是將整個應用程序本地化。一個工程最多包含一個資源文件。



相關信息

1.資源文件每次編譯都要,相當於靜態鏈接,在運行時載入速度快;資源文件實際還是在硬碟上,但是已經把資源文件映射到虛擬內存中,如果到需要文件時就看它在不在物理內存中,不在就載入,說到底還是在硬碟中,只不過載入是速度比我直接讀取硬碟文件快。

2.如果直接讀取文件就是在程序運行到需要時才從硬碟上搜索(沒有現成的地址,這應該是比較慢的原因)。也就是說如果一個工程需要外圍文件的量很大,那就不應該把它們加入資源文件,而是在需要的那個文件時再載入它,資源文件比較適合於占空間小的文件。

㈧ 如何實現前端工程化和靜態資源的管理

提升開發體驗
我們主要從以下三個方面來提升我們的開發體驗。
規范化
當團隊人員不斷擴充時,我們需要制定統一的規范來對平時的開發工作做出一定約束和指導。統一的規范包括前端的代碼規范,根據規范定義好一套代碼檢查的規則,在代碼提交的時候進行檢查,讓開發人員知道自己的代碼情況。
同時,根據以往的開發經驗,我們制定了統一的項目框架,根據業務功能不同,將一個項目(app)拆分成不同的業務模塊(mole),而每一個模塊都包含自身的頁面(page)以及構成頁面所需要的組件(widget),每一個項目涉及到app、mole、page、widget這些已經約定好的概念,這樣讓項目結構更加清晰,而且讓團隊內不同業務的人員之間切換無障礙。

組件化
在項目中引入組件化的概念,這里的組件對應上文講到的widget,每一個組件都會包含組件自身的模板、css、js、圖片以及說明文件,我們使用組件來拼裝頁面,像搭積木一樣來拼裝我們的頁面,同時一個組件內可以調用另一個組件。

在拿到設計稿後,我們首先需要確定哪些需要做成公共組件,那些是要做成獨立組件,以及組件間如何進行通信。在頁面中調用這些組件後,會自動載入組件的模板以及組件的靜態資源,而當組件不再需要時,只要移除掉組件引用,那麼相應的模板和靜態資源也會不再載入。
組件化的好處主要有這么幾點
管理方便,我們可以把一個獨立功能相關的文件在工程目錄中放在一起,這樣代碼管理起來會非常便利
組件復用,通過抽取公共組件,可以實現組件復用,從而減少工作量,創造價值
分而治之,這是組件化最重要的一點,將頁面組件化,就是對頁面功能的拆分,將一個大的工程拆成小的零件,我們只需要關注每一個零件的功能,極大地降低了頁面的開發與維護的難度
自動化編譯
在前端開發中,我們總是會去使用很多工具、手段來優化代碼、提升開發效率,例如,我們會使用sass、less等CSS預處理工具來編寫更好維護的樣式代碼,我們也會使用CSSLint、eslint等代碼檢查工具來檢查代碼的語法錯誤,使用文件合並壓縮等手段來減少資源大小,除此之外我們還會去做雪碧圖合並、多倍圖處理、字體壓縮處理、代碼發布等等。
曾經有大神說過,超過90s的工作都應該自動化掉。而以上所有的這些工作,貫穿我們整個開發流程,但是不同工具的切換不但顯得凌亂,而且影響開發效率。在自動化、工程編譯的思想早已深入人心的當下,我們當然也要緊跟潮流,所以我們考慮通過自動化手段來提升我們的效率,讓所有操作可以一鍵式開速執行完。
我們將通過定義好一系列的編譯任務,按照一定順序依次對我們的項目自動進行編譯操作,最後產生出可上線的代碼。

㈨ 緩存靜態資源,不知怎麼解決

之前看過apach及nginx對於靜態資源(含js,圖片,css等)部分的緩存,用於加速並減輕後台實際web伺服器的壓力。
靜態資源緩存是WEB伺服器優化的一種手段,基本原理如下:
1.客戶端瀏覽器請求伺服器一個服務(該服務含有圖片,js等靜態資源),通常會對於每一個網頁中的獨立圖片或js文件發送一個http請求
2.WEB伺服器對於每個資源HTTP請求進行解析,並生成一個資源修改時間的唯一值(可以是etag或last_modified參數),放入伺服器端map,key為資源url,value為資源修改時間。最後將此資源修改時間的唯一值包含在http頭上返回,因為是首次請求,所以會將所有內容放在http body中一並返回給客戶瀏覽器端
3.客戶瀏覽器接收服伺服器響應,並將伺服器返回的資源修改時間作為key放入瀏覽器客戶端,value為http body中的實際資源內容
4.客戶瀏覽器再次請求靜態資源時,會將資源修改時間一並發送給伺服器
5.服務端會從最新的map中取出該資源url對應的修改時間,如果值晚於客戶端請求的資源修改時間,這時會返回最新的已經修改過的資源給客戶端。否則返回304 not modifed

這里記錄資源修改時間的方式有etag及last_modified。最先有的是last_modified,它的工作方式就是上述介紹的,但缺點是只能精確到秒級別。也就是說當你在一秒中修改資源兩次,而客戶端拿到的是第一次修改,那之後就算客戶端第二次再次請求也不會拿到最新的資源。
而etag的出現正是為了解決last_modified的秒級問題,於http 1.1被提出。

今天測試了下,在沒有nginx等前端反向代理伺服器時,tomcat竟然默認對靜態資源做了緩存。
tomcat默認運用etag及last_modifed。etag與if_no_match(客戶端瀏覽器上傳時在http head中應該放的屬性名)一起使用,last_modified與If-Modified-Since一起使用。

客戶端首次請求時,得到請求響應數據如下:

GET http://localhost:8080/webTest/jsp/index.jsp [HTTP/1.1 200 OK 1ms]
GET http://localhost:8080/webTest/js/hello.js [HTTP/1.1 200 OK 1ms]
GET http://localhost:8080/webTest/img/a.jpg [HTTP/1.1 200 OK 2ms]
我們看一下Hello.js這個請求響應具體信息:
server Apache-Coyote/1.1 (表明伺服器是tomcat)
Last-Modified: Sun, 11 May 2014 10:54:33 GMT
Etag: W/"175-1399805673000"
Date: Sun, 11 May 2014 10:59:23 GMT
Content-Type: application/javascript;charset=UTF-8
Content-Length: 175
Accept-Ranges: bytes

從上面可以看到tomcat即返回了last_modified也返回了etag。

客戶端再次請求時,請求數據如下:
If-None-Match: W/"175-1399805673000"
If-Modified-Since: Sun, 11 May 2014 10:54:33 GMT
響應如下:

GET http://localhost:8080/webTest/jsp/index.jsp [HTTP/1.1 200 OK 1ms]
GET http://localhost:8080/webTest/js/hello.js [HTTP/1.1 304 Not Modified 1ms]
GET http://localhost:8080/webTest/img/a.jpg [HTTP/1.1 304 Not Modified 1ms]
從中我們可以看到tomcat對於靜態數據作了緩存。

接著我們分析tomcat對於這部分靜態緩存的判斷處理,這部分邏輯是寫在DefaultServlet類中,
我們可以在doGet方法中進入ServiceContext方法中找到以下源碼:
// Check if the conditions specified in the optional If headers are
// satisfied.
if (cacheEntry.context == null) {

// Checking If headers
boolean included =
(request.getAttribute(Globals.INCLUDE_CONTEXT_PATH_ATTR) != null);
if (!included
&& !checkIfHeaders(request, response, cacheEntry.attributes)) { //這句判斷是否需要返回整個資源請求
return;
}

}
上面源碼的 if (!included
&& !checkIfHeaders(request, response, cacheEntry.attributes))
用於判斷是否需要返回整個資源,如果indcluded與checkIfHeaders方法返回的都是false,這時就直接返回,說明資源未修改,或者是緩存不支持的請求方式。
我們接著查看checkIfHeaders方法:
/**
* Check if the conditions specified in the optional If headers are
* satisfied.
*
* @param request The servlet request we are processing
* @param response The servlet response we are creating
* @param resourceAttributes The resource information
* @return boolean true if the resource meets all the specified conditions,
* and false if any of the conditions is not satisfied, in which case
* request processing is stopped
*/
protected boolean checkIfHeaders(HttpServletRequest request,
HttpServletResponse response,
ResourceAttributes resourceAttributes)
throws IOException {

return checkIfMatch(request, response, resourceAttributes)
&& checkIfModifiedSince(request, response, resourceAttributes)
&& checkIfNoneMatch(request, response, resourceAttributes)
&& checkIfUnmodifiedSince(request, response, resourceAttributes);

}

可以看到tomcat只有當這四個屬性全部返回true(也就是說全部認為資源已經改變)才會返回true,這樣最終會將整個資源(最新修改過的)返回客戶端。
在這里,我們從上面實際過程當中看到,瀏覽器第二次請求資源時在http請求header中放了
If-None-Match: W/"175-1399805673000"
If-Modified-Since: Sun, 11 May 2014 10:54:33 GMT
這兩個屬性。
因此我們查看
&& checkIfModifiedSince(request, response, resourceAttributes)
&& checkIfNoneMatch(request, response, resourceAttributes)
這兩個方法
checkIfModifiedSince源碼如下:
/**
* Check if the if-modified-since condition is satisfied.
*
* @param request The servlet request we are processing
* @param response The servlet response we are creating
* @param resourceInfo File object
* @return boolean true if the resource meets the specified condition,
* and false if the condition is not satisfied, in which case request
* processing is stopped
*/
protected boolean checkIfModifiedSince(HttpServletRequest request,
HttpServletResponse response,
ResourceAttributes resourceAttributes) {
try {
long headerValue = request.getDateHeader("If-Modified-Since");
long lastModified = resourceAttributes.getLastModified();
if (headerValue != -1) {

// If an If-None-Match header has been specified, if modified since
// is ignored.
if ((request.getHeader("If-None-Match") == null)
&& (lastModified < headerValue + 1000)) {
// The entity has not been modified since the date
// specified by the client. This is not an error case.
response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
response.setHeader("ETag", resourceAttributes.getETag());

return false;
}
}
} catch (IllegalArgumentException illegalArgument) {
return true;
}
return true;

}
源碼中可以看到:
if ((request.getHeader("If-None-Match") == null)
&& (lastModified < headerValue + 1000)) {
這句話表明只有在客戶端瀏覽器發送的請求頭中不包含If-None-Match,IfModifiedSince才會生效。
我們接著看checkIfNoneMatch,源碼如下:
/**
* Check if the if-none-match condition is satisfied.
*
* @param request The servlet request we are processing
* @param response The servlet response we are creating
* @param resourceInfo File object
* @return boolean true if the resource meets the specified condition,
* and false if the condition is not satisfied, in which case request
* processing is stopped
*/
protected boolean checkIfNoneMatch(HttpServletRequest request,
HttpServletResponse response,
ResourceAttributes resourceAttributes)
throws IOException {

String eTag = resourceAttributes.getETag();
String headerValue = request.getHeader("If-None-Match");
if (headerValue != null) {

boolean conditionSatisfied = false;

if (!headerValue.equals("*")) {

StringTokenizer commaTokenizer =
new StringTokenizer(headerValue, ",");

while (!conditionSatisfied && commaTokenizer.hasMoreTokens()) {
String currentToken = commaTokenizer.nextToken();
if (currentToken.trim().equals(eTag))
conditionSatisfied = true;
}

} else {
conditionSatisfied = true;
}

if (conditionSatisfied) {

// For GET and HEAD, we should respond with
// 304 Not Modified.
// For every other method, 412 Precondition Failed is sent
// back.
if ( ("GET".equals(request.getMethod()))
|| ("HEAD".equals(request.getMethod())) ) {
response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
response.setHeader("ETag", eTag);

return false;
}
response.sendError(HttpServletResponse.SC_PRECONDITION_FAILED);
return false;
}
}
return true;

}
這里:
String eTag = resourceAttributes.getETag();
String headerValue = request.getHeader("If-None-Match");
這兩句比較簡單,就是分別從伺服器緩存和http請求頭中中取出etag。
接著判斷這兩個etag如果相等,則conditionSatisfied為true,會執行到以下語句:
if (conditionSatisfied) {

// For GET and HEAD, we should respond with
// 304 Not Modified.
// For every other method, 412 Precondition Failed is sent
// back.
if ( ("GET".equals(request.getMethod()))
|| ("HEAD".equals(request.getMethod())) ) {
response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
response.setHeader("ETag", eTag);

return false;
}
response.sendError(HttpServletResponse.SC_PRECONDITION_FAILED);
return false;
}
這段語句中可以發現,如果資源未改變的情況下,並且請求方式為GET或者HEAD時,會返回304狀態碼。否則返回一個412狀態碼,同樣不會返回資源內容。
如果上述最終
if ((request.getHeader("If-None-Match") == null)
&& (lastModified < headerValue + 1000))
條件不成立,即資源更新了或者是第一次請求,這里會讀取當前請求資源文件,並最終放入http響應中。