javaweb-codereview 学习记录-1
Posted tr1ple
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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()中需要指定的目标方法的类型,那么第二个参数肯定就是目标函数的入口参数的类型了,和反射调用传值貌似差不多,获取方法的时候都是传入口参数的类型
以上是关于javaweb-codereview 学习记录-1的主要内容,如果未能解决你的问题,请参考以下文章