URLClassloader 載入本地方法
package cn.how2j.diytomcat.servlet;
import cn.how2j.diytomcat.Request;
import cn.how2j.diytomcat.Response;
import cn.how2j.http.HttpServer;
import org.apache.tomcat.util.scan.Constants;
import javax.servlet.Servlet;
import javax.servlet.ServletException;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.net.URLClassLoader;
import java.net.URLStreamHandler;
/**
* @author WangYifei
* @desc Servlet 處理類
*/
public class ServletProcessor1 {
public void process(Request request, Response response) {
String uri = request.getUri();
String servletName = uri.substring(uri.lastIndexOf("/") + 1);
URLClassLoader loader = null;
try {
// create a URLClassLoader
URL[] urls = new URL[1];
URLStreamHandler streamHandler = null;
File file = new File(System.getProperty("user.dir") + File.separator + "webroot" + File.separator + "wyf-diytomcat.jar");
urls[0] = file.toURI().toURL();
System.out.println(urls[0]);
loader = new URLClassLoader(urls);
} catch (IOException e) {
System.out.println(e.toString());
}
Class myClass = null;
try {
System.out.println(servletName);
myClass = loader.loadClass("cn.how2j.diytomcat.servlet.PrimitiveServlet");
} catch (ClassNotFoundException e) {
System.out.println(e.toString());
}
Servlet servlet = null;
try {
servlet = (Servlet) myClass.newInstance();
servlet.service(request, response);
} catch (InstantiationException e) {
System.out.println(e.toString());
} catch (IllegalAccessException e) {
System.out.println(e.toString());
} catch (ServletException e) {
System.out.println(e.toString());
} catch (IOException e) {
System.out.println(e.toString());
}
}
}
從《深入剖析tomcat》中看到使用URLClassloader載入,一步一步跟著做,可能由於部分沒有寫出來,自己百度瞭解到URLClassloader載入的是jar包,通過loadClass 去使用jar,對jar中的某個類進行例項化,為了下一步手動將本專案打包成為jar之後設定固定值進行測試,為了學習下一步,雖然還有一部分問題並且與書中程式碼不一致,現在不知道怎麼實現,但是基本概念已經有了,可以進行下一步的學習了。
相關文章
- java URLClassLoader 載入外部jar包中的指定的類JavaJAR
- WebGL載入本地模型Web模型
- WKWebView載入本地檔案WebView
- Remix本地化,載入本地合約檔案,本地連結RemixREM
- vue如何動態載入本地圖片Vue地圖
- 載入本地圖片模糊,Glide載入網路圖片卻很清晰地圖IDE
- 使用URLClassLoader報錯not class found exceptionException
- Windows系統電腦不能載入本地儲存的配置檔案的解決方法Windows
- 如何載入本地下載下來的BERT模型,pytorch踩坑!!模型PyTorch
- js 進入頁面載入的方法JS
- 在 PowerShell 中,"本地載入"和"遠端載入"通常指的是執行指令碼或命令的位置或方式。以下是關於本地載入和遠端載入的一些基本概念和示例:指令碼
- JAVA載入配置檔案方法Java
- 梨影片(PearVideo)下載解析的方法和技巧,梨影片下載到本地IDE
- Android WebView適配html載入本地檔案並上傳AndroidWebViewHTML
- Android入門教程 | Fragment (載入方法與通訊)AndroidFragment
- TensorFlow 載入多個模型的方法模型
- 雲盤本地載入工具:CloudMounter for mac v4.3啟用版CloudMac
- Qt(QtWebEngine)載入本地網頁跨域問題的總結QTWeb網頁跨域
- $(function(){}裡面方法不載入問題Function
- VS載入lib庫的三種方法
- golang匯入本地包Golang
- SpringBoot載入子模組配置檔案的方法Spring Boot
- Vue路由元件按需載入的幾種方法Vue路由元件
- 部落格園去google廣告載入方法Go
- Linux驅動模組載入方法和如何判斷Linux驅動是否載入成功Linux
- Mysql匯入本地檔案MySql
- SpringMVC何時載入的controller裡的mapping方法SpringMVCControllerAPP
- Java入門第12天 (方法過載 ,方法的引數傳遞)Java
- 將libc database下載到本地Database
- 本地HTML中圖片下載HTML
- 已解決,本地 Laravel 的除錯頁面載入緩慢打不開Laravel除錯
- 使用 electron 和 electron-forge 載入 本地磁碟資源 img 的問題
- Python 黑帽程式設計 4.2 Sniffer 之資料本地儲存和載入Python程式設計
- 懶載入和預載入
- 前端配置本地代理方法總結前端
- https頁面載入http資源的解決方法HTTP
- 提高網站載入速度的五大方法網站
- vue3.0 載入json的“另類”方法(非ajax)VueJSON