java学习笔记————本质篇6

21.3.JSON:是一种轻量级的数据交换格式。 (JavaScript Object Notation)


格式: [{“id”:1,”name”:”吉林省”},{“id”:2,”name”:”辽宁省”}][{'province':'辽宁省'},{'province':'吉林省'},{'province':'浙江省'}]


语法; 一段JSON的字符串,本身就是JS中支持的一种数据的格式.// JSON 语法是 JavaScript 对象表示语法的子集。
JSON的格式在JS中当做数组使用.
解析成数组: var arr = eval("("+data+")");
获取数组中的值: arr[i].province arr[i].id / name


JSONLIB的使用: JSONLIB是一个工具类:将数组、List , 对象、MAP集合转换成JSON的串.


API:
* JSONObject : 主要用于将 对象和MAP集合  转成JSON的.
* JSONArray : 主要用于将 数组和List集合 转成JSON的.


JSONObject.fromObject(object/map)
JSONArray.fromObject(arr/list)


eg: JsonConfig jsonConfig = new JsonConfig();
jsonConfig.setExcludes(new String[]{"currentPage","pageSize","detachedCriteria","decidedzones"});// 尽可能多的去掉不需要序列化的字段
JSONObject json = JSONObject.fromObject(javaBean , jsonConfig);






22.java基础加强:
1.JDK中提供的三个注解:
@Override : 标识子类重写父类/接口的方法.
@SuppressWarnings:用来压制警告.
@Deprecated : 用来描述方法过时


自定义注解 :@interface Anno1{..属性...}// 同 定义类/接口 : class / interface  HelloWorld{...}
* @interface Anno1{
int sum() default 1;// 变量类型  变量名称()  ————设置了 default值,@Anno1(写sum="xx",覆盖默认值1.不写默认sum=1 )
String value();//如果注解中只有一个属性,属性名为value.那么这个value可以省略.@Anno3(value = "aaa") == @Anno3(“aaa”)
}


泛型的基本术语:
* 以ArrayList<E>为例:
* <> :念为 typeof
* E :称为类型参数变量
* ArrayList<Integer>中   Integer: 称为实际类型参数.
* ArrayList<Integer>   : 整个称为 参数化类型


通过反射获得参数化类型从而获得实际类型参数:
* Class:
Class c = this.getClass();// 获得到子类的Class的对象.     获得的是:继承此类的子类的Class对象   //谁继承它,就代表谁
c.getGenericInterfaces/Superclass();// 获得带有泛型的接口/父类.       -------  参数化类型 BaseDao<Book> ————— 得到一个 带有泛型的父类
* ParameterizedType:
pType.getActualTypeArguments();// 获得带有泛型的父类.       -------  实际类型参数   Book —————从 参数化类型中 获取到 实际类型参数 :Book


******************  Type:  类型
// 代表 java中 所有类型 的公共父类接口   ———————— 参数化类型、数组类型、变量类型、原始类型、未处理类型
Type is the common superinterface for all types in the Java programming language.
———————— These include raw types, parameterized types,array types, type variables and primitive types.


ParameterizedType:参数化类型 ———————— (ParameterizedType)Type  : 将this.getClass().getGenericSuperclass()/getGenericInterfaces() 获取的Type 强转为 参数化类型
// interface ParameterizedType extends Type// 将用 子类的class对象 获取的 父类/父接口 的Type 强转为 ParameterizedType(参数化类型)类型
// 然后可 调用 ParameterizedType接口 的API,获取到 父类中的所有 泛型数组
ParameterizedType:参数化类型,通过字面意思理解:带有参数的类型————————即 如果这个类型(Type)带有泛型,我们就可以强转为ParameterizedType(Type)
只要Type类型 中带有 <泛型> ,就可以向下强转为  参数化类型: (ParameterizedType)Type




******* API:  再通过参数化类型  获取到具体的Class类型 <具体的泛型类型>
Type[] getGenericInterfaces()     // ParameterizedType.getGenericInterfaces()  : 获取到 父类中的所有 泛型 (泛型数组) --->泛型[]


****************** 1.Type、Class、ParameterizedType三者的关系?
Class<T> implements java.lang.reflect.Type,   //  Type 在 反射包下  ————> 我们可知,获取具体的Class类型,自然是通过反射获取到的
interface ParameterizedType extends Type






2.Servlet3.0:
新增特性:
* 1.支持注解开发. ———————— @WebServlet(urlPatterns="/servletDemo1")  @WebFilter  @WebListener   // EE6.0    Tomcat7以上可以不存在web.xml.


* 2.支持文件上传. ———————— @MultipartConfig // 需要在Servlet上添加一个注解: @MultipartConfig
Part part = request.getPart("upload");// 获得文件上传项: Part部分.类似于FileUpload组件中的FileItem.
InputStream is = part.getInputStream(); // 获得文件内容的输入流


* 3.支持异步请求.    ———————— @WebServlet(urlPatterns="/servletDemo3",asyncSupported=true)// 需要在@WebServlet中使用一个属性:asyncSupported=true
AsyncContext asyncContext = request.startAsync(req, resp);// 开启一个异步的请求的对象.


3.动态代理:
* 1.继承


* 2.装饰者模式
* 1.被增强的类和增强类需要实现相同的接口.
* 2.在增强的类中获得被增强的类的引用.


* public class BigBirdWrapper implements Bird{
private Bird bird;
public BigBirdWrapper(Bird bird){   //有参构造,参数: 被增强的类的引用
this.bird = bird;
}
public void fly(){
System.out.println(“飞飞 ...”);// 增强代码.//bird.fly();
}
}
Bird bird = new BigBirdWrapper(new BigBird());
bird.fly(); // 最终都是用 多态实现的    实际运行调用子类的方法




* 3.动态代理:(*****最为灵活的一种增强的方式)被增强类必须实现接口.JDK动态代理可以对 实现了接口的类 产生代理.


必须 implements InvocationHandler 接口,
* 1.创建代理对象
* 2.重写invoke()方法// 真正的执行是靠invoke(),我们只需在invoke()中重写需要增强的method即可!!!


相关API:
* Proxy: // 代理类
Proxy.newProxyInstance(ClassLoader loader, Class[] interfaces, InvocationHandler h);// 创建代理对象
* ClassLoader : 接口的类加载器.
* Class[] : 类实现的 所有接口的Class的对象.
* InvocationHandler: 真正的处理对象.
eg:Waiter waiterProxy = (Waiter) Proxy.newProxyInstance( waiter.getClass().getClassLoader(),  waiter.getClass().getInterfaces(),  this );


Object invoke(Object proxy, Method method, Object[] args);
* proxy :代理对象.
* method :指代的方法本身(正在执行的方法)     // method.getName() 、 method.invoke()
* args :方法的参数列表


4.类的加载器:将编译后的class文件加载到内存.(加载到JVM)
类的加载器分类:
引导类加载器: jre/lib/rt.jar(JDK中常用的类) // String—————————null
扩展类加载器: jre/lib/ext/ *.jar(JDK的扩展的类) // DNSNameService—————————sun.misc.Launcher$ExtClassLoader
应用类加载器: 类路径下的class的.(自定义的类)// Demo—————————sun.misc.Launcher$AppClassLoader




















25.HTTPS是以安全为目标的HTTP通道,简单讲是HTTP的安全版。(全称:Hyper Text Transfer Protocol over Secure Socket Layer)
即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。 它是一个URI scheme(抽象标识符体系),句法类同http:体系。用于安全的HTTP数据传输。
https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。
这个系统的最初研发由网景公司(Netscape)进行,并内置于其浏览器Netscape Navigator中,提供了身份验证与加密通讯方法。现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。
















90.1.webservice:即web服务,是一种跨平台的远程调用技术,实现客户/服务器模式的应用。
webservice基于 soap协议 传输数据。
soap:soap=http+xml
wsdl:说明书
uddi:目录
webservice就是发布一个服务接口,供其它计算机调用,可以实现的技术有好多,socket、http、soap方式、hessian等,在实际应用时根据具体的需求和场景去选择应用技术。






90.2.CXF框架:apache的开源项目,是一个webservice开发框架。它支持多种协议,比如:SOAP1.1,1,2、XML/HTTP、RESTful HTTP 或者 CORBA
Cxf是基于SOA总线结构,依靠spring完成模块的集成,实现SOA方式。
灵活的部署:可以运行在Tomcat,Jboss,Jetty(内置),weblogic等web容器上面。




安装: 解压apache-cxf-3.0.5目录
配置:
CXF_HOME=cxf的目录
Path = %JAVA_HOME%\bin;%CXF_HOME%\bin;
CLASSPATH=.;%CXF_HOME%\lib\cxf-manifest.jar




/** server端:   //jar包


Dao层:
创建applicationContext-dao.xml文件配置dao接口,由spring容器统一管理     配置daoBean






service层: // 与jaxws编程不同的是将   @WebService注解  加在  SEI接口  上边


在service接口实现类中注入dao


创建applicationContext-service.xml,配置service






cxf和spring整合发布服务:


创建applicationContext-cxf.xml,配置发布webservice服务


使用jaxwx 发布服务
jaxws: server标签就相当于JaxWsServerFactoryBean编程方式
address: webservice地址
serviceClass:   SEI




web.xml配置:   //web容器中加载spring容器


加载spring容器


配置cxf的servlet,所有cxf的服务请求由servlet进行解析 // 直接用Apache提供的CXFServlet    ----- org.apache.cxf.transport.servlet.CXFServlet




部署tomcat启动:


http://ip:port/工程名/ws/                           <!-- web.xml中Servlet配置的 url-pattern  -->


*/






client端:


wsdl2java工具: wsdl2java -d . http://127.0.0.1:12345/area // 使用wsdl2java工具生成客户端调用代码    功能同wsimport

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值