一.设置Eclipse
- 关联TOMCAT
开发过程中,环境发生变化(重新关联tomcat)
*_删除servers窗口下的tomcat
*_Project Explorer 窗口下的server
*_重新关联window --->preferences --->servers --->runtime --->tomcat
二.注解 Annotation
- 注解和接口,类一样,都是属于数据类型
注解可以在变量,方法,类之上加载
注解可以有属性,也可以没有属性 @Override @Time(timeout=1000)
注解有作用范围(源码,编译期间,运行期间) - 回顾JDK中出现的3种注解
@Override 重写
@Deprecated 声明下面的已过时
@Suppresswarning 抑制编译器发生警告信息
三.自定义注解
- 格式
//定义注解的时候,需要通过元注解Retention说明当前自定义注解的作用域(Class,Source,Runtime)
@Retention();
//定义注解的时候,需要通过元注解Target说明当前的自定义注解的作用对象
@Target();
public @interface 注解名称 {
public 属性类型 属性名称1();
public 属性类型 属性名称2() default 默认值;
} - 自定义注解的属性支持的类型有 :
基本数据类型(4类8种),String,Class(字节码类型),Annotation(注解类型), 枚举类型,以及以上类型的一维数组类型 - 注解作用:配置作用
四.动态代理模式
- 原理:通过虚拟机在内存中创建类似MyCar.class文件
- //参数1:固定值:告诉虚拟机用哪个字节码加载器加载内存中创建出来的字节码文件
//参数2:告诉虚拟机内存中正在被创建的字节码文件中应该有哪些方法
//参数3:告诉虚拟机正在被创建的字节码上的各个方法如何处理
Proxy.newProxyInstance(TestCar.class.getClassLoader(),BCar.class.getInterfaces(),new InvocationHandler(){
@Override
//返回值Object : 当前方法的返回值
//参数2 : 当前的方法
//参数3: 当前的方法需要传的参数
public Object invoke(Object proxy,Method method,Object[] args) throws Throwable{
method.invoke(new BCar() , args);
}
});
- //参数1:固定值:告诉虚拟机用哪个字节码加载器加载内存中创建出来的字节码文件
- 字节码加载器:jak有一些程序,专业将各种字节码文件加载到内存中,这类程序简称为字节码加载器
五.动态代理解决网站的字符集编码问题
- 在过滤器中,为request上的getParameter()功能进行增强
思路:
省略了创建代理对象,详见四-1
if(method.getName().equalsIgnoreCase("getParameter")){
判断当前的请求是get/post request.getMethod();
如果是post,设置一句话:req.setCharacterEncoding("utf-8");
obj=method.invoke(req,args);
如果是get,调用原先的String v = (String)method.invoke(req,args);
将v进行转码 String vv = new String(v.getBytes("iso-8859-1"),"utf-8"); return vv;
}else{
obj = method.invoke(req , args);
}
return obj;