`

框架基础加强

阅读更多

1.动态代理:proxy
      1.写一个类
      2.目标对象:
      3.写一个获得Proxy对象的方法:
      4.使用JDK中的Proxy创建代理对象,这个代理对象是程序动行时产生,因此叫动态代理


static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h)
        返回一个指定接口的代理类实例,该接口可以将方法调用指派到指定的调用处理程序。

三个参数:
参数一:代理对象是由哪个类加载器加载器UserDaoProxy.class.getClassLoader(),
参数二:代理对象要与目标对象有相同的方法iUserDao.getClass().getInterfaces(),
参数三:在代理对象中,如何去处理客户端调用的方法

5.获得动态代理对象后,强转成指定接口
6.最后一个参数是一个内部类:
   1.//返回值
        Object returnValue = "";
   2.//获取客户端调用的方法名
String methodName = method.getName();
   3.判断://如果客户端调用的方法是addUser的话
if("addUser".equals(methodName)){
1.//写日志
log.write();
2.//增加用户,并接收返回值
returnValue = method.invoke(iUserDao,args);
3.//写日志
log.write();
     否则://查询用户,并接收返回值,相当于iUserDao.findAll()
else{
//查询用户,并接收返回值,相当于iUserDao.findAll()
returnValue = method.invoke(iUserDao,args);
  }
   4.//将返回值返回
return returnValue;
   



动态代理在web上应用:
解决get post请求的编码问题:(和装饰设计模式比较)







2.发送复杂邮件:
1.send.jsp发送复杂邮件:

2.生成上传地址文件夹upload

3.sendServlet:接受客户端发送的数据:
   1.导包:
   定义一个Map集合,用于存贮普通文本的字段名和值。
 
   2.生成一个处理上传文件的方法:
上传文件的代码:
初始化一个文件对象。
1.创建DiskFileItemFactory对象
2.创建ServletFileUpload对象
3.设置上传文件的编码格式:
4.通过ServletFileUpload对象解析请求
5.遍历解析得到的FileItem对象
6.判断是普通文本还是附件。
7.如果是普通文本则获取名字和值,解决编码问题,且收集fieldName和fieldValue
8.如果是文件附件则获取名字并封装成一个文件对象,再获取文件对象的名字。
9.获取上传文件夹根地址:
10.封装上传文件保存的目录为文件对象:
11.写入
12.删除
13.返回获得的文件
   3.创建一个复杂邮件:
处理上传文件,保存到指定的服务端目录下,并返回这个上传的文件

1.创建一个复杂邮件:
2.设置主机名:
3.权限认证:

4.设置编码
5.设置邮件发送方from
6.设置邮件接受方to
7.设置邮件主题
8.设置邮件信息:
   4.权限认证:
   5.判断是否有附件:
如果有附件
1.创建附件对象:
2.封装附件位置
3.封装附件标题:
4.将附件加入到上述的邮件中

   6.发送邮件:
   7.响应信息:
1.设置响应的编码格式:
2.向页面写入一段js代码,弹出发生成功对话框。
3.并重定向到send.jsp页面。


3.反射泛型:
1.创建sql文件,写入sql语句:
      2.Student类Teacher类
      3.StudentDao;TeacherDao:
      4.BaseDao:
      继承BaseDao:
      5.要进行与数据库交互数据。所以要
导包:c3p0,数据库驱动,dbutils。
c3p0-config.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<default-config>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql:///javaweb(数据库名)</property>
<property name="user">root</property>
<property name="password">123456</property>
</default-config>
</c3p0-config>
写一个dbUtils工具类获取数据库连接池:

BaseDao中写两个方法:
findById();
findAll();
在写这两个方法时,发现问题:
1.需要动态获取表名。
2.需要动态获取class字节码文件。

解决方法是通过反射泛型来解决该问题。
BaseDao代码内容:
1.定义两个变量:
   1.clazz就是Student或Teacher的字节码:
           2.表名
2.通过空参构造器为实例变量设置值:
   1.获得子类的字节码文件:
   2.通过子类的字节码文件获得父类的泛型得到的是Type
   3.父子接口强转,将Type装换为参数化类型(泛型类型)
   4.返回泛型类型中的实际类型:
   5.取出第一个与元素,即Student或Teacher类型
   6.类名和表名有一定的关系,所以可以获得表名:

3.findById();
注意class字节码文件和表名的动态获取。
4.findAll();
注意class字节码文件和表名的动态获取。


4.反射注解:
1.演示常用的注解:
  1.@Override
  2.@Deprecated :注解在方法上时表示方法过时的,废弃的。
  3.@SuppressWarnings :压制警告。


2.自定义注解:
  语法:@interface MyAnnotation{}

@interface MyAnnotation{
//用户名
String name();
//年龄
int age();
//收入
double salary();
}
@MyAnnotation(age=22, name="哈哈", salary=7000)
public void run(){

}

可以设置初始化值:
@interface YouAnnotation{
//用户名
String name() default "嘻嘻";
//年龄
int age() default 22;
//收入
double salary() default 6500;
}

字段可以是字符串和字符串数组。value 可以省略。



3.注解的应用:用来替代配置文件。

这个注解,就相当于原来的db.properties或db.xml配置文件
@Retention(RetentionPolicy.RUNTIME)表示运行时还有效。。
@Target({METHOD})这是表示只能用在方法上
@interface DB{
String driver() default "com.mysql.jdbc.Driver";
String url() default "jdbc:mysql://127.0.0.1:3306/javaweb";
String username() default "root";
String password() default "root";
}

    1.自定义一个注解:取名为DB。
    2.写一个获取数据库连接的方法:getConnection();在方法上加上注解。
反射注解:
1.获取该类的字节码:
2.获取getConnection方法:
3.获取方法上的注解:
4.分别获取DB注解中的所以属性:
5.注册数据库驱动:
6.用JDBC方式获取连接对象并返回:
    3.写个主方法测试结果:
     三元表达式判断是否获得连接。
   
     易发生的错误是:
     1. @Retention(RetentionPolicy.RUNTIME)这是自定义注解的生命周期
     这是修饰注解的注解,叫做元注解。
     2.没有将注解写到方法上。



5.为字符串动态设置值:
1.创建一个模式字符串:
2.创建默认语言环境和指定模式的字符串格式对象:
3.准备3个实际参数:
4.动态为模式字符串设置值:
5.显示:

 

分享到:
评论

相关推荐

    .NET框架基础

    ### .NET框架基础详解 #### 2.1 .NET基础概念 在深入探讨.NET框架之前,我们首先需要明确几个基础概念,这对于理解后续的技术细节至关重要。 ##### 2.1.1 什么是CTS、CLS和CLR .NET框架的核心在于三个关键组成...

    Spring框架基础总结

    Spring框架基础总结 一、Spring框架概述 Spring框架是一个开源的控制反转(IoC)和面向切面(AOP)的容器框架,旨在简化企业级Java应用的开发工作。Spring框架的核心价值在于其分层架构设计,使得开发者可以根据...

    struts2框架基础jar包

    这个压缩包包含了Struts2框架的基础jar包,这些库是开发Struts2应用不可或缺的部分。 1. **核心库**:Struts2的核心库主要由`struts2-core.jar`组成,它包含了处理HTTP请求、执行Action逻辑、管理应用流程和视图...

    ssh框架基础包

    这个SSH框架基础包为你提供了一个完整的开发环境,你可以在此基础上快速构建一个具备CRUD功能、事务管理、日志记录等功能的Web应用。通过学习和实践,你可以深入了解Java Web开发的各种技术,并提升你的开发效率。

    框架基础梁的设置.pdf

    在建筑工程中,框架基础梁的设置对于整个结构的稳定性和抗震性能至关重要。本文主要讨论了几个关键知识点,涉及框架计算简图的正确设定、基础拉梁层的计算模型及其设计要求。 首先,对于框架计算简图,正确的设置是...

    java框架基础

    Java框架基础是Java开发中的重要组成部分,它提供了一套预制的结构和规范,使得开发者能够更高效、便捷地构建应用程序。框架通过简化代码编写、管理依赖、自动化测试以及优化性能,极大地提升了开发效率和项目的可...

    《美国提高关键基础设施网络安全框架》探析.pdf

    该框架旨在强化联邦政府与私营企业的合作,以增强关键基础设施部门的网络安全管理和风险应对能力。其核心是通过业务驱动因素来指导国家网络安全工作,并将网络安全风险视为组织风险管理的一部分。 框架主要由三个...

    SSH框架----初学基础

    它通过Action类和配置文件定义了控制器层,使得业务逻辑和视图层分离,增强了代码的可维护性和可测试性。 Spring框架则是一个全面的企业级应用开发框架,提供了依赖注入(DI)和面向切面编程(AOP)等核心特性。在...

    SSH三大框架基础架构

    SSH三大框架,即Struts、Spring和...总的来说,SSH三大框架基础架构是Java Web开发中的基石,它们帮助开发者构建出健壮、可扩展的系统。理解并熟练掌握这三个框架的原理和使用方法,对于提升Java Web开发技能至关重要。

    C++图像处理基础框架

    本主题聚焦于"C++图像处理基础框架",它为开发者提供了一套用于图像处理的基本工具和方法,便于理解和实践。源代码的提供使得初学者能够更直观地学习图像处理的原理和技巧,同时也方便了有经验的程序员快速开发相关...

    基于firefox(火狐)浏览器引擎gecko,基于xulrunner框架基础之上实现基于web技术的跨平台开始框架

    XULRunner是Mozilla的一个基础平台,它提供了一套运行时环境,用于支持使用XUL(XML User Interface Language)和其他相关技术构建的应用程序。XUL类似于HTML,但专为创建桌面应用程序设计,支持跨平台运行。开发者...

    关键信息基础设施网络安全框架研究(下).pdf

    为了加强关键信息基础设施的保护,文中提出了完善顶层设计的需求,这意味着需要从国家战略层面制定全面的网络安全政策。同时,技术可行性分析对于确保框架的落地实施至关重要,因为关键信息基础设施往往涉及高度复杂...

    canphp框架-php框架

    2. **PHP框架基础** PHP框架是一种用于组织和简化PHP开发的结构,通过预定义的类库和方法,可以规范开发流程,减少重复工作,提高开发效率。CanPHP作为其中之一,具有自己的优势和特点,适应不同的项目需求。 3. *...

    【AI框架基础】系列第三篇!AI框架之争!都2022年,还在为用什么AI框架发愁?

    4. **增强现实与虚拟现实集成**:AI框架可能与AR/VR技术融合,为混合现实应用提供智能支持。 5. **安全性与隐私保护**:随着数据安全和用户隐私的关注度提高,框架将集成更多的加密和隐私保护机制,保障模型训练和...

    风度框架安卓12 (框架修改器软件下载安装包).zip

    风度框架则是对这个基础架构进行定制和优化的工具,它允许用户根据自己的需求调整系统行为,实现更深层次的个性化设置。 风度框架的核心功能可能包括但不限于以下几点: 1. **权限管理**:通过风度框架,用户可以...

    快速开发后台框架

    4. **插件系统**:允许开发者添加自定义功能,通过插件形式集成,增强框架的灵活性。 5. **模板引擎**:提供模板语言,简化视图层的编写,使界面设计和业务逻辑分离。 总结来说,"快速开发后台框架"是一个为了提高...

    数字图像处理基础框架代码

    《数字图像处理基础框架代码》 本程序是一个用于数字图像处理的基础框架,旨在为具有相关经验的研究人员提供一个可扩展的平台,以便于理解和实践数字图像处理的各种算法。该框架的核心是VC++编程语言,利用其高效性...

    xposed框架大全压缩包

    然而,编写Xposed模块需要一定的编程基础,通常涉及Java或Kotlin等语言,并理解Android系统的内部工作原理。 尽管Xposed框架为用户提供了很多便利,但也存在一些风险。由于修改了系统核心部分,可能会引发兼容性...

Global site tag (gtag.js) - Google Analytics