天天看點

利用java反射機制實作自動調用類的方法

 1. 建立testservlet類

package com.yanek.test;

import java.io.ioexception;

import java.lang.reflect.method;

import javax.servlet.servletexception;

import javax.servlet.http.httpservlet;

import javax.servlet.http.httpservletrequest;

import javax.servlet.http.httpservletresponse;

public class testservlet extends httpservlet {

 public void doget(httpservletrequest request, httpservletresponse response)

   throws servletexception, ioexception {

  // 擷取類的全路徑以及名稱

  string classname = request.getparameter("classname");

  // 擷取方法名

  string methodname = request.getparameter("method");

  try {

   // 擷取class檔案

   class<?> t_class = class.forname(classname);

   // 擷取該類所需求的方法

   method method = t_class.getdeclaredmethod(methodname,

     httpservletrequest.class, httpservletresponse.class);

   method.invoke(t_class.newinstance(), request, response);// 方法的實作

  } catch (exception e) {

   e.printstacktrace();

  }

 }

 public void dopost(httpservletrequest request, httpservletresponse response)

  doget(request, response);

}

2. 建立需要自動調用的類

public class test {

 /**

  * @param args

  */

 public static void main(string[] args) {

  system.out.println("hello world !");

 public void test(httpservletrequest request, httpservletresponse response) {

  system.out.println("hello");

  system.out.println(request.getparameter("username"));

3. web.xml配置

<?xml version="1.0" encoding="utf-8"?>

<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"

 xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://java.sun.com/xml/ns/javaee  http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

 <servlet>

  <description>test</description>

  <display-name>test</display-name>

  <servlet-name>test</servlet-name>

  <servlet-class>com.yanek.test.testservlet</servlet-class>

  <load-on-startup>1</load-on-startup>

 </servlet>

 <servlet-mapping>

  <url-pattern>/test</url-pattern>

 </servlet-mapping>

 <welcome-file-list>

  <welcome-file>index.jsp</welcome-file>

 </welcome-file-list>

 <login-config>

  <auth-method>basic</auth-method>

 </login-config>

</web-app>

4. 啟動伺服器通路:

http://127.0.0.1:8081/testprj/test?classname=com.yanek.test.test&method=test&username=aspboy

控制台輸出:

hello

aspboy

說明: 類com.yanek.test.test類的 方法 public void test(httpservletrequest request, httpservletresponse response) 被執行了.

反射機制是java中的重要功能,在架構設計中大量使用.

測試環境: tomcat6.0