手写WEB服务器的步骤(可以简单的了解到服务器的原理)

耐心到最后!定有收获!

 

创建server类,(main)

工作流程:这个类启动Serversocket 服务器,网页点击登录,

(server类)

创建Request对象(使用输入流对网页的内容进行分解,获取到url,name的值,输入的密码的值,知道了是get请求还是post请求)

(request类)

创建Respons对象(传入了流,然后构造回馈网页的头文件)

(response类)

再调用WebAPP的得到url的方法(通过Request得到网页中的url,再与WebApp读取XML的url-pattern比较,然后得到对应的Class,知道了这个class是对应的LoginServer登录的功能,然后反射得到LoginServer对象)

两个实体类:EntityMappingWebDom4j类读取XML,WebContext类有两个map集合可以存放两个对应的实体类,WebAppWebDom4j的类进行提取,然后存放到WebContext,再创建对应的url--class:反射创建对象:server类和它的子类Loginservelet

通过得到LoginServer对象,使用里面的写死的值进行判断,判断里面的值是否与自己定义的值的内容相同,成功返回登陆成功,将结果内容反馈到Respons的方法中进行打印,再用输出流输出到网页中,关闭。

 

每个类的详解:

首先需要建立对应的实体类 Entity  Mapping 类:

        Entity  实体类的属性是(String) login  (String)class。

        Mapping  实体类的属性是(String)login   和 (List) url。

 

我们需要写一个XML文件,上面的 serverletname 对应 serverletClass ,下面的   serverletname 对应多个  urlpattern

如图所示,这个时候就有些人会问我,我想要干什么,我想要做的是:

   通过    url-pattern   获取到对应的    servelet-name

   再通过下面的   servelet-name  获取到上面名字相同的    servelet-name

   最后通过   servelet-name  获取到    servelet-class    。然后再通过反射创建 对应的   servelet   对象

 

创建WebDom4j对XML的信息进行读取,

   将上面的信息存入List<Entity>entityList集合中

  将下面的信息存入 List<Mapping>mappingList集合中

 

 

创建ServeletContext类,这个类的作用是判断Entity和Mapping对应的关系(他们之间的联系是有相同的serverlet-name

     在这个类中创建两个map集合:

    private Map<String, String>entityMap;//键:位 servelet-name value:servelet-class都存在与Entity中。
    private Map<String, String>mappingMap;//键:url-pattern value:servelet-name(Mapping中多个url-pattern对应同一个serverlet-name

 

创建WebApp类,这个类就是可以判断出不同的url,然后创建不同的serverlet对象,执行不同的功能

    webApp是干什么的?

一:就是把WebDom4j读取XML文件的两个list,准确的关联到ServerletContext类里,因为Webdom4j读取的上面的的XML文          件,存取为一个EntityList,WebApp把这个EntityList拿出来,存放到ServerletContext 的 entityMap 集合里,一个                   Serverlet-name 对应 Serverlet-class,所以键为Serverlet-name,值为Serverlet-class。

           同理WebApp把WebDom4j读取的XML文件存取的MappingList的集合,把这个集合拿出来,存放到 ServerletContext 的mappingMap的集合里:这里多个 url-pattern 对应同一个 Serverlet-name ,所以键为url-pattern,值为 Serverlet-name。
 

二:写一个方法,根据传进来的url,先得到mappingMap的集合的Serverlet-name,在 通过这个Serverlet-name得到对应的 entityMap 集合的Serverlet-class。

 

 

写一个html文件:

 

创建Request类,对传进来的参数进行分别区分,分解得到方法(是GET还是POST的请求),得到参数(姓名:文本框输入的内容,密码:密码框输入的内容,爱好:文本框选择的内容),获取URL(判断是/log 还是别的 就是xml对应的 url-pattern)。

 

创建Response类,这个类就是对浏览器起到回馈作用,就是点击完登录,会按照我们的要求往浏览器数据传输一定的格式的内容,浏览器就会做出响应。

 

创建servelet抽象类,里面有服务方法,参数为响应和回馈

 

创建LoginServelet类,继承servelet类,重写服务方法,能够写死一个值,判断我们输入的和这个值相等不相等。

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值