nclude指令用于在JSP頁面引入其它內容,可以是JSP文件、html文件和文本文件等,相當于把文件的內容復制到JSP頁面。引入的文件和JSP頁面同時編譯運行。
使用include指令有以下優點:
增加代碼的可重用性
使JSP頁面的代碼結構清晰易懂
維護簡單
include的語法如下:
<%@ include file="URL" %> 1復制代碼類型:[java]
其中,file指定需要引入文件的相對路徑。
可以在頁面的任何位置編寫include指令。
「鏈接」
asmEdge 將 Rust 強大的性能和 JavaScript 的簡單易用完美結合在一起
在我之前的文章中,我討論了如何在 WebAssembly 沙箱中運行 JavaScript 程序。 WasmEdge runtime 為云原生 JavaScript 應用程序提供了一個輕量級、高性能且符合 OCI 標準的“容器”。
然而,JavaScript 是一種“慢”語言。使用 JavaScript 的原因主要是因為它用起來很容易,開發者生產力高,對初學者來說尤其如此。另一方面,WebAssembly 能夠運行用 Rust 等語言編寫的高性能應用程序。有沒有結合 JavaScript 和 Rust 的解決方案? WasmEdge 給出了兩全其美的答案。
有了 WasmEdge 和 QuickJS,開發者就可以完美搭配這兩個最強大的語言來創造應用程序。就像下面這樣:
接下來,讓我們看幾個示例。所有示例都在 wasmedge-quickjs repo 的 embed_in_rust 分支中。
`$ git clone https://github.com/second-state/wasmedge-quickjs
$ git checkout embed_in_rust`
確保你已經安裝 Rust 和 WasmEdge,這樣才能構建和運行本文中的示例。
main.rs 中的以下 Rust 程序在編譯時嵌入了一個 JavaScript 程序。
`pub mod quickjs_sys;
... ...
fn main() {
use quickjs_sys as q;
let mut ctx = q::Context::new();
// include js code
let code = include_str!("../example_js/demo.js");
// get args and set into quickjs
let mut res_args = args_parse();
res_args.insert(0, "<embedded_no_filename>".to_string());
ctx.put_args(res_args);
// run js code
ctx.eval_str(code, "");
}`
example_js/demo.js 代碼如下。
`import * as std from 'std';
print('hello')
print('args:',...args)
//write fs
let wf = std.open('demo.txt','w')
wf.puts('hello quickjs')
wf.close()
//read fs
let rf = std.open('demo.txt','r')
let r = rf.getline()
print(r)
rf.close()`
你可以將 Rust + JavaScript 應用程序構建到單個 WebAssembly 字節碼程序中。
`$ cargo build --target wasm32-wasi --release`
運行它,就看到打印到控制臺的結果了。
`$ cd example_js
$ wasmedge --dir .:. ../target/wasm32-wasi/release/quickjs-rs-wasi.wasm`
就是這樣。 Rust 代碼可以通過傳遞參數甚至直接修改包含的 JavaScript 源代碼,將數據傳遞到 JavaScript 代碼中。 JavaScript 代碼還可以通過寫入臨時文件來返回值。
你可以修改 main.rs 中的 Rust 程序以嵌入不同的 JavaScript 程序。 在下面的示例中,讓我們更改為
`pub mod quickjs_sys;
... ...
fn main() {
... ...
let code = include_str!("../example_js/tensorflow_lite_demo/main.js");
... ...
ctx.eval_str(code, "");
}`
main.js 代碼使用 WasmEdge Tensorflow 擴展的 JavaScript API 來調用 ImageNet 讀取和識別圖像模型。
`import {TensorflowLiteSession} from 'tensorflow_lite'
import {Image} from 'image'
let img = new Image('./example_js/tensorflow_lite_demo/food.jpg')
let img_rgb = img.to_rgb().resize(192,192)
let rgb_pix = img_rgb.pixels()
let session = new TensorflowLiteSession('./example_js/tensorflow_lite_demo/lite-model_aiy_vision_classifier_food_V1_1.tflite')
session.add_input('input',rgb_pix)
session.run()
let output = session.get_output('MobilenetV1/Predictions/Softmax');
let output_view = new Uint8Array(output)
let max = 0;
let max_idx = 0;
for (var i in output_view){
let v = output_view[i]
if(v>max){
max = v;
max_idx = i;
}
}
print('label index:',max_idx,'\nconfidence:',max/255)`
你可以將 Rust + JavaScript 應用程序構建到單個 WebAssembly 字節碼程序中。 注意 --features=tensorflow 標志,它要求 Rust 編譯器使用 WasmEdge TensorFlow 擴展 API。
`$ cargo build --target wasm32-wasi --release --features=tensorflow`
運行并查看打印到控制臺的結果。
`$ cd example_js/tensorflow_lite_demo
$ wasmedge --dir .:. ../../target/wasm32-wasi/release/quickjs-rs-wasi.wasm`
運行上面的 Tensorflow 推理示例需要花費 1-2 秒。這在 Web 應用場景中是可以接受的,但還能改進。在上篇文章中,我們提過由于其 AOT(提前編譯器)優化,WasmEdge 是當前速度最快的 WebAssembly runtime。 WasmEdge 提供了一個 wasmedgec 實用程序來將 wasm 文件編譯為原生的 so 共享庫。你可以使用 wasmedge 來運行 so 文件而不是 wasm 文件以獲得更快的性能。
下面的例子使用了 wasmedge 和 wasmedgec 的擴展版本來支持 WasmEdge Tensorflow 擴展。
`cd example_js/tensorflow_lite_demo
$ wasmedgec-tensorflow ../../target/wasm32-wasi/release/quickjs-rs-wasi.wasm quickjs-rs-wasi.so
$ wasmedge-tensorflow-lite --dir .:. quickjs-rs-wasi.so`
你可以看到圖像分類任務可以在 0.1 秒內完成。這至少是 10 倍的改進!
so* 共享庫不能跨機器和操作系統移植。你必須在你部署和運行應用程序的機器上運行 wasmedec 和 wasmedec-tensorflow。
在 Rust 中嵌入 JavaScript 是一種創建高性能云原生應用程序的強大方法。 下一篇文章中,我們將研究另一種技術方法:在 JavaScript 中嵌入原生庫。
云原生 WebAssembly 中的 JavaScript 是下一代云和邊緣計算基礎設施中的新興領域。 我們也是剛剛起步! 如果你也感興趣,請加入我們的 WasmEdge 項目或通過提出 feature request issue 告訴我們,你需要的是什么。
.編寫一個hello.txt文件,寫入下面的話(文件中隨便寫)
Thank you for visiting me
<BR>
I hope you leave footprints
2.編寫includeHello.jsp
代碼:
<%@ page contentType="text/html"%>
<html>
<body>
<font size=4 color=blue>
<%@ include file="hello.txt"%>//包含hello.txt
</font>
</body>
</html>
3.運行結果
*請認真填寫需求信息,我們會在24小時內與您取得聯系。