Servlet容器中放着我们所有要访问的Servlet,根据我们具体的请求来访问不同的Servlet。下面是一个简单的Servlet容器的实现。request和response的封装以及连接器的实现代码这里就不再重复写了,请看上一篇博客。

servlet

package com.hcserver.servlet;

import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class MyServlet extends HttpServlet{

private static final long serialVersionUID = 1L;

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

this.doPost(req, resp);

}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

String aa = req.getParameter("aa");

String bb = req.getParameter("bb");

System.out.println("param aa = "+aa);

System.out.println("param bb = "+bb);

resp.getWriter().print("hello world...");

}

}

servlet容器

package com.hcserver.container;

import java.io.File;

import java.util.HashMap;

import java.util.Map;

import javax.servlet.http.HttpServlet;

public class Container {

public final static String WEB_ROOT = Container.class.getResource("/webapps").getPath();

private Map> projectMap = new HashMap<>();

private static Container container = new Container();

private Container(){}

public static Container getInstance(){

return container;

}

public void init(){

try{

//模拟解析web.xml,利用反射得到servlet实例

Map map = new HashMap<>();

Class> servletClass = Class.forName("com.hcserver.servlet.MyServlet");

HttpServlet newInstance = (HttpServlet)servletClass.getConstructor(new Class[]{}).newInstance(new Object[]{});

map.put("myServlet", newInstance);

projectMap.put("hello",map);

}catch(Exception e){

}

}

public Map getProject(String projectName){

return projectMap.get(projectName);

}

public static void main(String[] args) {

container.init();

}

}

处理器修改

package com.hcserver.process;

import java.util.Map;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import com.hcserver.container.Container;

public class Process {

public void service(HttpServletRequest request,HttpServletResponse response){

String project = request.getContextPath();

String servletPath = request.getServletPath();

//得到容器类

Container container = Container.getInstance();

Map servletMap = container.getProject(project);

HttpServlet servlet = servletMap.get(servletPath);

try {

//返回页面

servlet.service(request, response);

} catch (Exception e) {

e.printStackTrace();

}

}

}

后台输出

param aa = 1

param bb = 3

java nio servlet_java nio http服务器(3)简单的Servlet容器相关推荐

  1. 2.一个简单的Servlet容器

    章前准备     如何处理ifelse众多的问题,当然也可以说是switch case     我们经常写这样的代码,如果这货小一点,且可预测什么的,那都不是事,问题是如果他要是可拓展的类- -!让他 ...

  2. tomcat(2)一个简单的servlet容器

    [0]README 0.1)本文部分文字转自 "深入剖析Tomcat",旨在学习  一个简单的servlet容器  的基础知识: 0.2)for complete source c ...

  3. java webserver demo_Java 实现 web服务器的简单实例

    Java 实现 web服务器的简单实例 实例代码: import java.util.*; // Chapter 8, Listing 3 public class WebServerDemo { / ...

  4. 并发型服务器响应方式,Java NIO 在并发型服务器设计中的应用.pdf

    Java NIO 在并发型服务器设计中的应用 丁辉 北京邮电大学PCN&CAD 中心,北京(100876 ) E-mail :lvsehaier@ 摘 要:本文分析了应用传统阻塞型网络I/O ...

  5. NIO详解(十三):Java IO 和NIO 总结

    1. 概述 下面总结了Java NIO和IO之间的主要差别 IO NIO 面向流 面向缓冲 阻塞IO 非阻塞IO 无 选择器 2. Java IO和 NIO的主要区别 2.1 面向流和面向缓冲区 Ja ...

  6. 【学习笔记】JAVA IO与NIO(new IO)的对比与不同IO模型的理解

    JAVA IO 分类: 几种IO 模型 1. 阻塞 IO 模型 2. 非阻塞 IO 模型 JAVA NIO 多路复用 IO 模型(即Java中的NIO) JAVA IO 思维导图: 分类: 按照流的方 ...

  7. Java IO BIO NIO

    Java IO BIO NIO 一.Java I/O概述 1.1 什么是流 1.2 流的分类 1.3 字符流 1.3.1 Reader 1.3.2 Writer 1.4 字节流 1.4.1 Input ...

  8. JAVA IO : BIO NIO AIO

    JAVA IO : BIO NIO AIO 同步异步.阻塞非阻塞概念 同步与异步 阻塞与非阻塞 IO VS NIO VS AIO 面向流与面向缓冲 阻塞与非阻塞IO BIO.NIO.AIO的JAVA实 ...

  9. Java服务端NIO多线程编程库系列(一)

    Java作为一种跨平台的开发语言,被广泛地应用,对比C++来讲,不需要关心对象的释放,缓冲区的管理,使编程的细节处理上要简单了很多,但是在高负载.多线程.多任务的协作处理时,对象的频繁new,线程的频 ...

最新文章

  1. 任正非最新讲话透露:华为在加快开发统一的人工智能平台
  2. 使用 Optional 摆脱 NullPointException 的折磨
  3. 香帅的北大金融学课笔记10 -- 金融衍生品
  4. static void SetSysClockTo72(void)的一些理解
  5. Java--Socket通信
  6. 喜马拉雅 Apache RocketMQ 消息治理实践
  7. C语言实现用星号在屏幕上打印菱形
  8. mysql5.7过滤重复数据_MySQL5.7 设置同步复制过滤不用重启mysql服务进程了
  9. 毕设项目 - 基于SSM的房屋租赁系统(含源码+论文)
  10. 大学生必读的100本书
  11. 二叉查找树,二叉平衡树
  12. 【NOI科目校 信息学知识点测评-组合计数专题】展览方案
  13. java好听的名字_(男孩起名)李白诗中最唯美的三字名字推荐,李白诗中最唯美的三字名字取名方法 - Java伴我余生 - 宝宝起名网...
  14. 上下左右键的ASCII
  15. 国内快速下载 CentOS 镜像源
  16. linux获取完整的man(manpages)linux参考手册/中文man的下载和使用/获取buildin 命令的完整帮助文档/多种man手册/man着色colorful man
  17. Java面向对象:Account类
  18. Synergy配置过程--实现跨电脑的键鼠互通操作
  19. 初学C语言【14】寻找单身狗
  20. python 笔记 PySimpleGUI 图形界面6- 高级API调用-进度表控件、调试输出

热门文章

  1. 存取算法 oracle,JAVA存取Oracle的BFile和LOBs
  2. 基于 SpringBoot2 + Redis + Vue 商城管理系统,拼团、砍价、秒杀等都有,支持二次开发!...
  3. python练习---菜品统计
  4. excel排版转换为印刷版:设置页面是否区分为奇数偶数页
  5. pdf怎么转换成jpg图片?快来收藏这两种方法
  6. html浮动效果无法显示解决办法
  7. 多媒体编程——摄像头录像预览
  8. PPPOE拨号之五:juniper SRX 防火墙 PPPOE拨号配置
  9. CAD软件查找图纸中的文字
  10. 遥感图像目标检测常用数据集及下载链接汇总