java程序填空题输出汤姆猫_Java学习之手写Tomcat“迷你汤姆猫”

之前学习Java EE的时候,做的项目都是部署在Tomcat上面,配置web.xml(小毛驴),然后启动Tomcat,通过浏览器输入URL去访问,当时其实真的不懂好多东西,尤其是不懂request、和response这两个对象是谁创建的,为什么继承了HttpServlet,重写service方法就可以用,今天手写了一遍,豁然开朗,可以说学的更明白了。

今天一天,每一步都敲了一遍,虽然不能脱离老师的视频,但是自己理解了思路,我觉得学编程最重要的是理解,思路一定要清晰,不是打字,照着敲10遍,不理解原理也没有用。

手写“假汤姆猫”的步骤:

1、首先是Socket,用于通信,基于TCP,使用io流,分C/S(客户端和服务器),B/S(浏览器和服务器),C/S就是在客户端创建Socket对象,服务器端常见ServerSocket,调用accpet()监听

我们手写服务器的是B/S模式

当一个浏览器,URL地址栏输入IP地址+端口号会发生,会发生什么呢?

虽然浏览器没有显示内容,但是控制台有请求的信息

我们在看通过浏览器提交表单访问

我之前都不知道还有这种操作,原谅我孤陋寡闻了。。。。

步入正题:

通过在浏览器URL地址栏输入一个连接,是怎么访问Tomcat项目上面的项目呢?

1、web.xml(小毛驴),配置了一个个的Servlet的信息,

我们通过在URL地址栏输入的/log之类的东西,就能找到Servlet,那么是怎么做到创建对象的呢?

原来,使用DOM4J解析XML,就可以得到web.xml的servlet的信息,浏览器的请求我们可以通过字节输入流得到,然后在请求字符串中得到相应的我们需要的信息。

这样,知道了对应servlet的路径,我们就可以通过反射创建servlet了

然后,我们把请求的信息,封装到一个叫做request的类中存储,是不是似曾相似的,没错,就是我们一直用servlet的那个,还有响应的信息,封装到response中

再谈servlet类,它有一个所有servlet的父类

它里面的sevice方法,doGet,doPost方法,我们一直使用,都没有发现原来是这种操作。

基于每个请求和响应都是会有很多人同时使用的,一个服务器不可能只有一个人访问,所以我们使用了多线程,有一个线程类

import java.io.IOException;

import java.net.Socket;

import com.chenpeng.servlet.Servlet;

import com.chenpeng.util.IOCloseUtil;

/**

* 一个请求与响应就是一个Dispatcher,就是一个线程

*

* @author chenpeng

*

*/

public class Dispatcher implements Runnable {

private Request req;

private Response rep;

private Socket client;

private int code = 200;// 状态码

// 构造方法初始化

public Dispatcher(Socket client) {

this.client = client;

try {

req = new Request(this.client.getInputStream());

rep = new Response(this.client.getOutputStream());

} catch (IOException e) {

// 异常

code = 500;

return;

}

}

@Override

public void run() {

//根据不同的url创建指定的Servlet对象

System.out.println(req.getUrl());

Servlet servlet = WebApp.getServlet(req.getUrl());

if(servlet==null) {

this.code=404;

}else {

//调用相应的Servlet中的service方法

try {

servlet.service(req, rep);

} catch (Exception e) {

this.code=500;

}

}

//将响应结果推送到客户机的浏览器

rep.pushToClient(code);

//关闭流

IOCloseUtil.closeAll(client);

}

}

然后,服务器要一直开着,因为不可能只有一个人来访问

使用while循环

对了,还有一点,当我们向服务器发送请求的时候

每次我们向浏览器发送自己的登录请求的时候,浏览器还会去发送一个ico的小图标请求,而我们产生上面的问题的原因就是没有在web.xml中配置这个请求的servlet,所以就报错,解决方式为:配置一下就行了

描述的不是太清楚,以后再补充吧,附上代码代码​pan.baidu.com

提取码:434f

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值