zoukankan      html  css  js  c++  java
  • javaweb-codereview 学习记录-1

    Servlet是在Java Web容器上运行的小程序,通常我们用Servlet来处理一些较为复杂的服务器端的业务逻辑。值得注意的是在Servlet3.0之后(Tomcat7+)可以使用注解方式配置Servlet了。

    Servlet3.0之前的版本都需要在web.xml中配置,Servlet两对标签,由<servlet><servlet-mapping>组成,Spring MVC框架就是基于Servlet技术实现的。

    自己的理解:

    servlet实际上就是服务后端逻辑的一段代码,配置servlet的过程实际上就是定义处理类与对应url的映射关系,而filter也是处理http请求的,只不过在servlet处理之前可以做一些过滤检测的操作。当然这种配置方式可以配置在文件中,也可以在代码中以@符号来定义注解,效果一样

    spring : 

    struts2:

     Struts2主要的开发模式是基于xml配置,在struts.xml中配置Action地址和对应的处理类。

    Java反射获取类方法有两种方式:

    getMethod(xxx),getMethods()
    getDeclaredMethod(xxx)、getDeclaredMethods()。

    区别在于getMethod会返回当前类和父类的所有public方法,而getDeclaredMethod返回的是当前的所有方法

    Java反射获取类成员变量有两种方式:

    getField(xxx)、getFields()
    getDeclaredField(xxx)、getDeclaredFields()

     java反射来调用类和类成员方法,在jdk7中MethodHandle可以非常方便的访问和调用类方法:

    例子:

    import  java.io.InputStream;
    import java.lang.invoke.MethodHandle;
    import java.lang.invoke.MethodHandles;
    import  java.lang.invoke.MethodType;
    import java.lang.reflect.Method;
    import java.util.Scanner;
    
    public class methodhandler {
        public static void  main(String[] args){
            try {
                String str = "calc.exe";
                Class runtimeClass = Runtime.class;
                MethodHandles.Lookup lookup = MethodHandles.lookup();
                //Runtime rt = Runtime.getRuntime();
    
                MethodHandle methodHandle = lookup.findStatic(runtimeClass,"getRuntime", MethodType.methodType(runtimeClass));
                //get Runtime.exec
                MethodHandle execMethod = lookup.findVirtual(runtimeClass,"exec",MethodType.methodType(Process.class,new Class[]{String.class} ));
    
                MethodHandle input = lookup.findVirtual(Process.class,"getInputStream",MethodType.methodType(InputStream.class));
                InputStream in = (InputStream)input.invoke(execMethod.invoke(methodHandle.invoke(),str));
    
    
            } catch (NoSuchMethodException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (Throwable throwable) {
                throwable.printStackTrace();
            }
    
    
        }
    }

    上面这段代码实际上我们只要拿到MethodHandles.lookup 类的对象即可来调用任意类中的方法,这里当然还要注意要调用的方法的返回值的类型也就是MethodType.methodType()中需要指定的目标方法的类型,那么第二个参数肯定就是目标函数的入口参数的类型了,和反射调用传值貌似差不多,获取方法的时候都是传入口参数的类型

  • 相关阅读:
    “工业4.0”下的可视化工厂建设方案
    logstash 发送慢页面到zabbix告警
    windows 挂载linux nfs
    zabbix报警把特定的应用集发送给developer
    logstash 判断接口响应时间发送zabbix告警
    zabbix 对于logstash告警连续发邮件
    zabbix 发送邮件配置
    zabbix如何选择适合的监控类型(107)
    logstash 发送zabbix告警
    zabbix 添加自定义key
  • 原文地址:https://www.cnblogs.com/tr1ple/p/12094006.html
Copyright © 2011-2022 走看看