java nio servlet_java nio http服务器(3)简单的Servlet容器
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容器相关推荐
- 2.一个简单的Servlet容器
章前准备 如何处理ifelse众多的问题,当然也可以说是switch case 我们经常写这样的代码,如果这货小一点,且可预测什么的,那都不是事,问题是如果他要是可拓展的类- -!让他 ...
- tomcat(2)一个简单的servlet容器
[0]README 0.1)本文部分文字转自 "深入剖析Tomcat",旨在学习 一个简单的servlet容器 的基础知识: 0.2)for complete source c ...
- java webserver demo_Java 实现 web服务器的简单实例
Java 实现 web服务器的简单实例 实例代码: import java.util.*; // Chapter 8, Listing 3 public class WebServerDemo { / ...
- 并发型服务器响应方式,Java NIO 在并发型服务器设计中的应用.pdf
Java NIO 在并发型服务器设计中的应用 丁辉 北京邮电大学PCN&CAD 中心,北京(100876 ) E-mail :lvsehaier@ 摘 要:本文分析了应用传统阻塞型网络I/O ...
- NIO详解(十三):Java IO 和NIO 总结
1. 概述 下面总结了Java NIO和IO之间的主要差别 IO NIO 面向流 面向缓冲 阻塞IO 非阻塞IO 无 选择器 2. Java IO和 NIO的主要区别 2.1 面向流和面向缓冲区 Ja ...
- 【学习笔记】JAVA IO与NIO(new IO)的对比与不同IO模型的理解
JAVA IO 分类: 几种IO 模型 1. 阻塞 IO 模型 2. 非阻塞 IO 模型 JAVA NIO 多路复用 IO 模型(即Java中的NIO) JAVA IO 思维导图: 分类: 按照流的方 ...
- 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 ...
- JAVA IO : BIO NIO AIO
JAVA IO : BIO NIO AIO 同步异步.阻塞非阻塞概念 同步与异步 阻塞与非阻塞 IO VS NIO VS AIO 面向流与面向缓冲 阻塞与非阻塞IO BIO.NIO.AIO的JAVA实 ...
- Java服务端NIO多线程编程库系列(一)
Java作为一种跨平台的开发语言,被广泛地应用,对比C++来讲,不需要关心对象的释放,缓冲区的管理,使编程的细节处理上要简单了很多,但是在高负载.多线程.多任务的协作处理时,对象的频繁new,线程的频 ...
最新文章
- 任正非最新讲话透露:华为在加快开发统一的人工智能平台
- 使用 Optional 摆脱 NullPointException 的折磨
- 香帅的北大金融学课笔记10 -- 金融衍生品
- static void SetSysClockTo72(void)的一些理解
- Java--Socket通信
- 喜马拉雅 Apache RocketMQ 消息治理实践
- C语言实现用星号在屏幕上打印菱形
- mysql5.7过滤重复数据_MySQL5.7 设置同步复制过滤不用重启mysql服务进程了
- 毕设项目 - 基于SSM的房屋租赁系统(含源码+论文)
- 大学生必读的100本书
- 二叉查找树,二叉平衡树
- 【NOI科目校 信息学知识点测评-组合计数专题】展览方案
- java好听的名字_(男孩起名)李白诗中最唯美的三字名字推荐,李白诗中最唯美的三字名字取名方法 - Java伴我余生 - 宝宝起名网...
- 上下左右键的ASCII
- 国内快速下载 CentOS 镜像源
- linux获取完整的man(manpages)linux参考手册/中文man的下载和使用/获取buildin 命令的完整帮助文档/多种man手册/man着色colorful man
- Java面向对象:Account类
- Synergy配置过程--实现跨电脑的键鼠互通操作
- 初学C语言【14】寻找单身狗
- python 笔记 PySimpleGUI 图形界面6- 高级API调用-进度表控件、调试输出
热门文章
- 存取算法 oracle,JAVA存取Oracle的BFile和LOBs
- 基于 SpringBoot2 + Redis + Vue 商城管理系统,拼团、砍价、秒杀等都有,支持二次开发!...
- python练习---菜品统计
- excel排版转换为印刷版:设置页面是否区分为奇数偶数页
- pdf怎么转换成jpg图片?快来收藏这两种方法
- html浮动效果无法显示解决办法
- 多媒体编程——摄像头录像预览
- PPPOE拨号之五:juniper SRX 防火墙 PPPOE拨号配置
- CAD软件查找图纸中的文字
- 遥感图像目标检测常用数据集及下载链接汇总