国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java反射調(diào)用ashx

這篇具有很好參考價值的文章主要介紹了Java反射調(diào)用ashx。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

這篇文章卡了大概一周,一個是沒時間,只能帶娃加鍛煉間隙擠點(diǎn)時間,一個是碰到了問題卡住了。本篇實(shí)現(xiàn)反射調(diào)用ashx實(shí)現(xiàn)類的基礎(chǔ)結(jié)構(gòu)。

首先申明ashx的接口,所有的ashx實(shí)現(xiàn)類繼承實(shí)現(xiàn)該接口的基類

package appcode;
import java.io.*;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
//http執(zhí)行請求接口
public interface IBaseHttpHandler {
    /// <summary>
    /// 執(zhí)行請求
    /// </summary>
    /// <param name="request">請求對象</param>
    /// <param name="response">響應(yīng)對象</param>
    public void ProcessRequest(HttpServletRequest request, HttpServletResponse response);
}

然后實(shí)現(xiàn)第一個不需要會話的基類

package appcode;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.PrintWriter;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.lang.Class;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.jar.JarFile;
import java.util.jar.JarEntry;
import LIS.Core.MultiPlatform.LISContext;
import appcode.IBaseHttpHandler;
//實(shí)現(xiàn)不帶會話的請求基類
public class BaseHttpHandlerNoSession implements IBaseHttpHandler {
    ///請求對象
    public HttpServletRequest Request=null;

    ///響應(yīng)對象
    HttpServletResponse Response=null;


    ///輸出數(shù)據(jù)到前臺
    private void Write(PrintWriter writer,String str)
    {
        writer.println(str);
        writer.flush();
        writer.close();
    }


    /// <summary>
    /// 執(zhí)行請求
    /// </summary>
    /// <param name="request">請求對象</param>
    /// <param name="response">響應(yīng)對象</param>
    public void ProcessRequest(HttpServletRequest request, HttpServletResponse response)
    {
        try {
            Request = request;
            Response = response;
            //前臺傳入的要調(diào)用的方法
            String method = LISContext.GetRequest(request, "Method");
            if (method != "") {
                //得到方法
                Method m = this.getClass().getMethod(method);
                if (m != null) {
                    //執(zhí)行
                    Object ret = m.invoke(this);
                    PrintWriter writer = response.getWriter();
                    if (ret == null) {
                        Write(writer, "");
                    } else {
                        Write(writer, (String) ret);
                    }
                } else {
                    //沒有指定名稱的方法
                }
            } else {
                //沒按要求傳調(diào)用方法
            }
        }
        catch (Exception ex)
        {
            ex.printStackTrace();
        }
    }
}

然后實(shí)現(xiàn)主中間件中轉(zhuǎn)調(diào)用實(shí)現(xiàn)的ashx

import appcode.IBaseHttpHandler;

import java.io.*;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.util.concurrent.ConcurrentHashMap;
import java.net.URL;
import java.net.URLClassLoader;

import java.util.*;


@javax.servlet.annotation.WebServlet(name = "MianMiddleware")
public class MianMiddleware extends javax.servlet.http.HttpServlet {

    /// <summary>
    /// 緩存路徑和類型,允許多線程讀一個線程寫
    /// </summary>
    private static ConcurrentHashMap<String, Class> hsType = new ConcurrentHashMap<>();

    ///執(zhí)行post請求
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html");
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");
        String url=request.getRequestURI();
        //解析得到類名
        String className = url.split("\\.")[0];
        PrintWriter writer = response.getWriter();
        //反射得到類型
        Object objDeal = GetObjectByConfString(className,writer);
        //轉(zhuǎn)換處理接口
        if(objDeal!=null)
        {
            //轉(zhuǎn)換成接口
            appcode.IBaseHttpHandler baseDeal=(appcode.IBaseHttpHandler)objDeal;
            baseDeal.ProcessRequest(request,response);
        }
        else
        {
            Write(writer,"為找到名稱為:"+className+"的處理類");
        }
    }

    /// <summary>
    /// 通過配置得當(dāng)對象
    /// </summary>
    /// <param name="confStr">配置/UI/sys/ashx/ashCommonNoSession</param>
    /// <returns></returns>
    public static Object GetObjectByConfString(String confStr,PrintWriter writer) {
        try {
            //取第一部分
            if (confStr.charAt(0) == '/') {
                confStr = confStr.substring(1);
            }
            if (!hsType.containsKey(confStr)) {
                URL urlBase = new File("D:\\Java業(yè)余\\jbase\\Lib\\appcode.jar").toURI().toURL();
                //自己生成jar包路徑
                URL url = new File("D:\\Java業(yè)余\\jbase\\Lib\\AshDemo.jar").toURI().toURL();
                URL[] urls = new URL[]{urlBase,url};
                //加載程序集,這里很重要,一定要指定父加載器,否則加載的類和父加載器的類不認(rèn)為是一個類
                URLClassLoader loader = new URLClassLoader(urls, MianMiddleware.class.getClassLoader());
                ClassLoader  loader1=Thread.currentThread().getContextClassLoader();
                //加載類
                Class c = loader.loadClass("AshDemo.ashDemo");
                //先寫死,后面執(zhí)行編譯和從jar包反射
                hsType.put(confStr, c);
            }
            Class c = hsType.get(confStr);
            //創(chuàng)建對象
            Object o = c.newInstance();
            return o;
        }
        catch (Exception ex) {
            ex.printStackTrace();
        }
        return null;
    }

    //get直接走post的邏輯
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doPost(request,response);
    }

    ///輸出數(shù)據(jù)到前臺
    private static void Write(PrintWriter writer,String str)
    {
        writer.println(str);
        writer.flush();
        writer.close();
    }

}

Java反射調(diào)用ashx,java,開發(fā)語言

然后實(shí)現(xiàn)一個ashx的demo
Java反射調(diào)用ashx,java,開發(fā)語言

測試
Java反射調(diào)用ashx,java,開發(fā)語言

Java反射調(diào)用ashx,java,開發(fā)語言

本次碰到的卡殼問題就是通過URLClassLoader加載的類和創(chuàng)建的對象無法轉(zhuǎn)換成接口類型。明明是一個類型,運(yùn)行總是報錯無法轉(zhuǎn)換。各方資料查看加上自己嘗試,發(fā)現(xiàn)要指定URLClassLoader類加載器的父加載器,這樣父加載器加載的類就不會被重復(fù)加載導(dǎo)致類型不匹配了。

下個階段就是實(shí)現(xiàn)文件變化監(jiān)控和比對ashx實(shí)現(xiàn)類代碼和jar包時間自動編譯jar包供反射調(diào)用了。為下圖的每個ashx的Java類生成jar包供反射使用而達(dá)到腳本化的目的,這樣就可以實(shí)現(xiàn)業(yè)務(wù)腳本化和虛擬M層,用虛擬M來兼容打印和儀器接口等。

Java反射調(diào)用ashx,java,開發(fā)語言

卡殼問題沒人詢問是真痛苦,卡過去了收獲不少,有些事看著簡單,動手做多多少少還是有些意外的文章來源地址http://www.zghlxwxcb.cn/news/detail-724521.html

到了這里,關(guān)于Java反射調(diào)用ashx的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • HarmonyOS鴻蒙基于Java開發(fā): Java UI JS FA調(diào)用Java PA機(jī)制

    目錄 FA調(diào)用PA接口 FA調(diào)用PA常見問題 示例參考 使用兼容JS的類Web開發(fā)范式的方舟開發(fā)框架提供了JS FA(Feature Ability)調(diào)用Java PA(Particle Ability)的機(jī)制,該機(jī)制提供了一種通道來傳遞方法調(diào)用、處理數(shù)據(jù)返回以及訂閱事件上報,支持的UI頁面和組件請參考構(gòu)建JS用戶界面 。 當(dāng)前

    2024年01月19日
    瀏覽(22)
  • Java開發(fā)或調(diào)用WebService的幾種方式

    Java開發(fā)或調(diào)用WebService的幾種方式

    1.服務(wù)端開發(fā)與發(fā)布 編寫接口 編寫接口的實(shí)現(xiàn)類 發(fā)布服務(wù) 訪問已發(fā)布的WebService服務(wù) 打開瀏覽器輸入http://127.0.0.1:8888/JaxWSTest?wsdl訪問,如下面內(nèi)容 截圖內(nèi)容1 瀏覽器中輸入wsdl文檔中的 http://127.0.0.1:8888/JaxWSTest?xsd=1可查看綁定的參數(shù)等信息看如下圖: 截圖內(nèi)容2 jdk自帶生成W

    2024年01月17日
    瀏覽(27)
  • Qt安卓開發(fā):調(diào)用java代碼的獲取usb權(quán)限

    最近換了工作,新工作是負(fù)責(zé)用qml做qt安卓開發(fā)。 工作中遇到一個問題:安卓設(shè)備有USB口,需要插入一個U盤在程序里讀寫U盤中的文件,由于安卓系統(tǒng)的安全性的問題導(dǎo)致QFile、c++的文件操作相關(guān)方法都不能讀寫成功,想要讀寫成功只能調(diào)用java代碼,在java代碼里面使用安卓的

    2024年02月06日
    瀏覽(20)
  • 大數(shù)據(jù)平臺開發(fā)——使用Java和Python調(diào)用Shell腳本

    大數(shù)據(jù)平臺開發(fā)——使用Java和Python調(diào)用Shell腳本

    大數(shù)據(jù)平臺開發(fā)——使用Java和Python調(diào)用Shell腳本 在大數(shù)據(jù)平臺開發(fā)中,經(jīng)常會遇到需要調(diào)用Shell腳本的場景,倒不是說只能用Shell,畢竟大數(shù)據(jù)開發(fā)到頭來一定是個語言無關(guān)的事情: 從Hive源碼解讀大數(shù)據(jù)開發(fā)為什么可以脫離SQL、Java、Scala:https://lizhiyong.blog.csdn.net/article/deta

    2023年04月09日
    瀏覽(27)
  • HarmonyOS學(xué)習(xí)路之開發(fā)篇—Java UI框架(JS FA調(diào)用Java PA)

    HarmonyOS學(xué)習(xí)路之開發(fā)篇—Java UI框架(JS FA調(diào)用Java PA)

    使用兼容JS的類Web開發(fā)范式的方舟開發(fā)框架提供了JS FA(Feature Ability)調(diào)用Java PA(Particle Ability)的機(jī)制,該機(jī)制提供了一種通道來傳遞方法調(diào)用、處理數(shù)據(jù)返回以及訂閱事件上。 當(dāng)前提供Ability和Internal Ability兩種調(diào)用方式。 Ability:擁有獨(dú)立的Ability生命周期,F(xiàn)A使用遠(yuǎn)端進(jìn)程

    2024年02月09日
    瀏覽(17)
  • GaussDB 開發(fā)篇+Java調(diào)用JDBC訪問openGauss數(shù)據(jù)庫

    GaussDB 開發(fā)篇+Java調(diào)用JDBC訪問openGauss數(shù)據(jù)庫

    ★ JDBC獲取 ★ 環(huán)境信息 ★ Java代碼 ※ 如果您覺得文章寫的還不錯,?別忘了在文末給作者點(diǎn)個贊哦 ~

    2024年02月13日
    瀏覽(21)
  • 【Java反射】Java利用反射獲取和設(shè)置對象某屬性的值

    【Java反射】Java利用反射獲取和設(shè)置對象某屬性的值

    通用工具類: 測試:

    2024年02月02日
    瀏覽(29)
  • Java中的Reflection(反射)、暴力反射

    Java中的Reflection(反射)、暴力反射

    1.1 反射的出現(xiàn)背景 Java程序中,所有的對象都有兩種類型: 編譯時類型 和 運(yùn)行時類型 ,而很多時候?qū)ο蟮木幾g時類型和運(yùn)行時類型 不一致 。 例如: 如上 :某些變量或形參的聲明類型是 Object 類型,但是程序卻需要調(diào)用該對象運(yùn)行時類型的方法,該方法不是Object中的方法

    2024年02月04日
    瀏覽(24)
  • Java開發(fā) - 帶你了解集群間的相互調(diào)用,你還在等什么?

    Java開發(fā) - 帶你了解集群間的相互調(diào)用,你還在等什么?

    目錄 前言 導(dǎo)讀 項(xiàng)目準(zhǔn)備 集群準(zhǔn)備 父工程引入子項(xiàng)目 服務(wù)調(diào)用方HelloService準(zhǔn)備 pom文件 yml文件 Controller文件 服務(wù)提供方HelloWorld準(zhǔn)備? pom文件 yml文件 Controller文件? 運(yùn)行此兩個工程? hello_world組集群 集群調(diào)用測試 RestTemplate換成Dubbo行不行,怎么換 兩個pom文件引入依賴 ?兩個啟

    2024年02月09日
    瀏覽(23)
  • 【Java 基礎(chǔ)篇】Java 反射詳解

    Java反射是指在運(yùn)行時動態(tài)地獲取類的信息,并可以通過該信息來操作類或?qū)ο蟆Mㄟ^反射,我們可以在運(yùn)行時獲取類的字段、方法、構(gòu)造函數(shù)等信息,并能夠動態(tài)地創(chuàng)建對象、調(diào)用方法、訪問和修改字段的值。本文將詳細(xì)介紹Java反射的概念、原理和使用方法,并提供一些示

    2024年02月09日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包