Servlet补充(序列化,拷贝,代理服务器)

Servlet补充(序列化,拷贝,代理服务器)

一.序列化和反系列化

1.认识序列化

网络数据传输,双方需要约定好同一的数据格式(广泛使用的统一标准就是协议,小众就是序列化和反序列化)
Java序列化是指把Java对象转换为字节序列的过程,而Java反序列化是指把字节序列恢复为Java对象的过程
注意:只有实现了Serializable或Externalizable接口的类的对象才能被序列化,否则抛出异常!
在这里插入图片描述

2.代码示例

 //定义一个ObjectMapper类,主要实现java类和json对象之间的转换
    private static final ObjectMapper MAPPER = new ObjectMapper();

<1>序列化

/**
     * JSON序列化,将java对象序列化为json字符串
     *
     * @param o java对象
     * @return json字符串
     */

    //序列化,返回json字符串
    public static String serialize(Object o) {
        try {
            return MAPPER.writeValueAsString(o);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
            throw new RuntimeException("json序列化失败" + o);
        }
    }

<2>反序列化

/**
     * 反序列化操作
     *
     * @param is    输入流
     * @param clazz 指定要反序列化的类型
     * @param <T>
     * @return 反序列化对象
     */
    //反序列化(使用输入流InputStream获取输入字符串)
    public static <T> T deserialize(InputStream is, Class<T> clazz) {
        try {
            return MAPPER.readValue(is, clazz);
        } catch (IOException e) {
            e.printStackTrace();
            throw new RuntimeException("json反序列化失败" + clazz.getName());
        }
    }

<3>测试

public class JSONUtilTest {
    //单元测试,junit框架使用方法上@Test注解,保证方法为public void
    @Test
    public void testSerialize() {
//测试序列化操作,使用map模拟复杂
        Map map = new HashMap();
        map.put("name", "1班");
        map.put("students", new int[]{1, 2});
        String json = JSONUtil.serialize(map);
        Assert.assertNotNull(json);
    }

    @Test
    public void testDeSerialize() {
        //测试反序列化
        //类加载器加载某个资源,返回输入流
        InputStream is = JSONUtilTest.class.
                getClassLoader().getResourceAsStream("login.json");//特别注意该api
        Map map = JSONUtil.deserialize(is, Map.class);
        System.out.println(map);
        Assert.assertNotNull(map);
    }
}

二.深拷贝浅拷贝

在这里插入图片描述
结论:
在这里插入图片描述
深拷贝就是两个不同的引用指向不同的对象,但是对象内容完全相同,浅拷贝就是两个不同的引用指向同一个对象

三.正向代理服务器和反向代理服务器

1.正向代理服务器

<1>概念

正向代理服务器:抓包工具
正向代理是一个位于客户端和目标服务器之间的代理服务器(中间服务器)。为了从原始服务器取得内容,客户端向代理服务器发送一个请求,并且指定目标服务器,之后代理向目标服务器转交并且将获得的内容返回给客户端。正向代理的情况下客户端必须要进行一些特别的设置才能使用。

<2>原理图

在这里插入图片描述

<3>使用场景和特点

1.特点:要访问的服务器只知道代理服务器来访问它,并不知道真实的客户端是谁
2.使用场景:正向代理的典型用途是为在防火墙内的局域网客户端提供访问Internet的途径。正向代理还可以使用缓冲特性减少网络使用率。

2.反向代理服务器

<1>概念

反向代理服务器:nginx等
反向代理正好相反。对于客户端来说,反向代理就好像目标服务器。并且客户端不需要进行任何设置。客户端向反向代理发送请求,接着反向代理判断请求走向何处,并将请求转交给客户端,使得这些内容就好似他自己一样,一次客户端并不会感知到反向代理后面的服务,也因此不需要客户端做任何设置,只需要把反向代理服务器当成真正的服务器就好了

<2>原理图

在这里插入图片描述

<3>使用场景和特点

1.特点:特点:反向代理服务器隐藏了真实服务器的信息,例如淘宝,京东,天猫等
2.使用场景:
反向代理的典型用途是将 防火墙后面的服务器提供给Internet用户访问。反向代理还可以为后端的多台服务器提供负载平衡,或为后端较慢的服务器提供缓冲服务。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Serendipity sn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值