# jerry-mouse **Repository Path**: liucaimo/jerry-mouse ## Basic Information - **Project Name**: jerry-mouse - **Description**: 您好,我是Lau_Chai-mor。 jerry-mouse是我自己写的一个Tomcat原型机,apache Tomcat有的功能,jerry-mouse也有。整个项目不算复杂,或者算简单吧,从无到有,并没有使用什么高大上的技术,基本都是Java原生Jdk的应用,我还写了使用文档,哈哈,方便食用。 最后感谢How2J的tomcat开源项目,学习他的代码,对我创作jerry-mouse贡献巨大。 - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-02-24 - **Last Updated**: 2022-02-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # jerry-mouse 是谁 ? ## 没错,就是它!! ![](webapps/ROOT/jerry.png) 本项目不做商业用途,这里借用一下 Jerry 的可爱形象。 ### 介绍 给大家介绍一下:jerry-mouse 它是一个Tomcat原型机,apache Tomcat有的功能,jerry-mouse也有。没错,就是要碰瓷 apache。(: 遮脸 #### 测试 1. 这里贴一个浏览器测试专用项目,是我在2019年6月初学 ajax 时做的 servlet 项目,当时超级菜,代码中妖魔鬼怪乱入,巨丑,但并不妨碍我用 jerrymouse 服务器去部署它,下载地址:http://liucaimo.natapp1.cc/art/detail?infoId=2nxlDS2j 2. 配合源码 test 包中的 Junit 自动测试专用项目:http://liucaimo.natapp1.cc/art/detail?infoId=N1dSDU7D 3. webapps 目录中会有 a,b 两个目录,webapps1 也有一个 c 目录,都是用来测试的。 ### jerry-mouse 它都有哪些功能 ? 它能像 apache Tomcat 一样部署servlet项目,处理servlet业务,最后在浏览器显示html页面。 1. 直接访问端口能像 tomcat 一样,显示欢迎页,访问不存在的路径时显示404页面,webapp 应用内部错误时显示500错误页面。 2. 支持显示 pdf,png,jpg 等二进制文件和纯文本显示,根据文件扩展名设置相应的 mime-type 返回给浏览器。 2. 支持 GZIP 压缩,可在 server.xml 的 Connector 标签中设定文本占用空间大小来触发是否启用压缩。 3. 支持 servlet 单例实现,生命周期,自启动loadOnStartup(即服务器启动时一同初始化servlet),需要在 WEB-INF/web.xml 中配置。包含初始化参数配置,可在 WEB/web.xml 中配置init-param。webapp 应用的servlet在 jerrymouse 服务器内部运行时都是单例。 4. 支持 get 和 post 请求,并解析请求头获取参数。 5. 支持 cookie 保存信息,jerrymouse 服务器内部会为不同的浏览器创建 cookie 并通过响应返回给浏览器。 6. 支持 session,每一个 webapp 应用部署后,当不同的浏览器初次访问时,都会为 webapp 应用创建一个独立的 session 空间,并将 jsessionid 保存到 cookie 当中,最后返回给浏览器。 7. 支持客户端跳转,即支持 response.redirect() 方法实现重定向。 8. 支持服务器内部跳转,即支持 request.getRequestDispatcher().forward( request , response ) 方法,同时也支持 request.getRequestDispatcher().include( request , response) 方法,并且以上两个方法都支持传递参数。 9. 支持 Filter 过滤器,责任链模式实现。需要在 WEB-INF/web.xml 中配置。包含初始化参数配置,可在 WEB/web.xml 中配置init-param。url-pattern 的匹配规则是从 tomcat 中复制过来的,这并非故意,而是除了 tomcat 的匹配规则,我也找不到更好的匹配规则了。 9. 支持 ContextListener 和 SessionListener 监听器,观察者模式实现。只要在 WEB-INF/web.xml 中配置了监听器,就会触发 SessionListener 和 ContextListener 9. 支持多个 Service 服务,像tomcat一样,每个 Service 内部都会有 Connector,Engine,Host 等内置对象。 9. 支持多个 Connector ,可同时多个浏览器多端口访问,在 server.xml 文件中配置 connector 标签即可,端口号不可重复。 9. 支持多个 Host 虚拟主机,每个 Host 享有一个端口号,并有指定的 appBase 目录(即webapps目录),Request对象实例会根据端口号找到 Host 虚拟主机。 9. 支持多个 webapp 应用部署,在 server.xml 文件中配置 Context 标签即可,path 属性和 base 属性不可重复。 9. 支持一个或所有 webapp 应用热部署,当 webapp 的内部 .class,.jar,web.xml 文件被更新时,启动热部署,重新加载 webapp 应用。 9. 支持 .war 包静态部署 webapp 应用,即启动前先在 webapps 目录中提前放置好 .war 包。 9. 支持 .war 包动态部署 webapp 应用,即 jerrymouse 启动后,如果有新的 .war 包投放到 Host 虚拟主机 appBase 指定目录下,就会触发动态部署。 9. 暂不支持 .jsp 处理,主要是这个东西比较复杂。 #### 软件架构 ``` 基于 JDK 1.8 开发 jerrymouse ├─ src 请查看服务器使用说明.pdf文档 ├─ log4j.properties 项目日志配置文件 ├─ conf 启动依赖的.xml基础配置文件 ├─ lib 项目运行依赖.jar类库 ├─ webapps webapp应用部署目录 ├─ webapps1 也是webapp应用部署目录 ├─ startup.bat windows下.bat启动项目(需要安装jdk) ``` #### 如何使用? 1. java 项目,运行依赖JDK 1.8 2. 双击 startup.bat 即可运行项目,或者用 IntelliJ IDEA 打开项目后找到 Bootstrap.java 启动main方法 3. 其他请查看使用说明文档.pdf ### 其他 如果运行后发现bug,希望能够联系本人 553774989@qq.com