一个类似Tomcat的容器,不过只是模拟Web容器的解析过程,只做了简单的解析HTML。
首先用Java IDE建立一个普通的Java Project,要解析web少不了Request和Response对象,所以在工程(项目)里建立两个类:MyHttpServletRequest(对应HttpServletRequest)、MyHttpServletResponse(对应 HttpServletResponse),如下:
//MyHttpServletRequest.java
package com.kalman03.servlet;
import java.io.BufferedReader;
import java.io.IOException;
public class MyHttpServletRequest{
private BufferedReader br;
private String header;
public MyHttpServletRequest(BufferedReader br){
try{
this.br = br;
this.header = br.readLine();// GET /index.html HTTP/1.1
}catch(IOException ex){
ex.printStackTrace();
}
}
public String getURL(){
String [] temp = header.split(" ");
return temp[1].substring(1);
}
}
//MyHttpServletResponse.java
package com.kalman03.servlet;
import java.io.PrintWriter;
public class MyHttpServletResponse{
private PrintWriter out;
public MyHttpServletResponse(PrintWriter out){
this.out = out;
out.println("HTTP/1.1 200 OK");
}
public PrintWriter getWriter(){
return out;
}
}
构造一个抽象类MyHttpServlet:
//MyHttpServlet.java
package com.kalman03.servlet;
public abstract class MyHttpServlet{
public abstract void doGet(MyHttpServletRequest request,MyHttpServletResponse response)throws Exception;
public abstract void doPost(MyHttpServletRequest request,MyHttpServletResponse response)throws Exception;
}
用MyServlet类实现上面MyHttpServlet抽象类:
//MyServlet.java
package com.kalman03.servlet.ext;
import java.io.BufferedReader;
import java.io.PrintWriter;
import java.io.File;
import java.io.FileReader;
import com.kalman03.servlet.MyHttpServlet;
import com.kalman03.servlet.MyHttpServletRequest;
import com.kalman03.servlet.MyHttpServletResponse;
//该类继承MyHttpServlet类,实现其中的doGet(),doPost()方法
public class MyServlet extends MyHttpServlet {
private PrintWriter out;
private String url;
public void doGet(MyHttpServletRequest request,
MyHttpServletResponse response) throws Exception {
this.out = response.getWriter();
url = request.getURL();
if (url.equals("")) {
url = "index.html";
}
File file = new File(url);
FileReader fr = new FileReader(file);
BufferedReader brR = new BufferedReader(fr);
String temp;
while ((temp = brR.readLine()) != null) {
out.println(temp);
}
out.close();
brR.close();
fr.close();
}
public void doPost(MyHttpServletRequest request,
MyHttpServletResponse response) throws Exception {
this.doGet(request, response);
}
}
跑一个线程监听类MyWebService:
//MyWebService.java
package com.kalman03.servlet;
import java.net.ServerSocket;
import java.net.Socket;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
public class MyWebService {
public MyWebService(MyHttpServlet ms) {
try {
ServerSocket ss = new ServerSocket(2008);
while (true) {
Socket s = ss.accept();
new myRunnable(s, ms).start();
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
//线程监听
class myRunnable extends Thread {
private Socket s;
private MyHttpServlet ms;
public myRunnable(Socket s, MyHttpServlet ms) {
this.s = s;
this.ms = ms;
}
public void run() {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(s.
getInputStream()));
PrintWriter out = new PrintWriter(s.getOutputStream(), true);
MyHttpServletRequest req = new MyHttpServletRequest(br);
MyHttpServletResponse rep = new MyHttpServletResponse(out);
ms.doGet(req, rep);
br.close();
out.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
至此大工基本告成,再来一个main方法(MainClass类)就OK了:
//MainClass.java
package com.kalman03.test;
import com.kalman03.servlet.MyWebService;
import com.kalman03.servlet.ext.MyServlet;
public class MainClass {
public static void main (String[] args) {
new MyWebService(new MyServlet());
}
}
运行,OK!一个web容器已经启动,当你在刚建的工程(项目)目录下丢一个HTML(比如welcome.html),在浏览器里输入 http://127.0.0.1:2008/welcome.html,即可解析welcome.html。
(转自http://www.blogjava.net/kalman03/archive/2008/10/17/235090.html,尊重原作者的成果)
分享到:
相关推荐
在IT行业中,手动构建Web工程是一项基础且至关重要的技能,尤其对于初学者和开发者来说,理解这一过程能够帮助他们更好地掌握Web开发的全貌。本文将深入探讨如何手动构建一个最基本的Web工程,涵盖相关的概念、步骤...
【标题】手动实现的简单Spring框架 在Java Web开发领域,Spring框架是一个极其重要的存在,它提供了丰富的功能,包括依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)架构等。本项目是基于对Spring框架核心...
【标题】:Web容器Tomcat 7.0详解 【描述】:Apache Tomcat是一款开源且免费的Web应用服务器,特别适用于运行Java Servlet和JavaServer Pages(JSP)技术。Tomcat 7.0版本是它的一个重要里程碑,提供了一系列增强...
Docker 手动创建 Tomcat 容器且端口映射且磁盘对应 本文将详细介绍如何使用 Docker 手动创建 Tomcat 容器,并进行端口映射和磁盘对应。 一、创建容器 首先,我们需要使用 Docker 创建一个新的容器。我们可以使用...
本资料包"21-04-05_DefaultDIPattern(003_使用常规、泛型、反射等 方式实默认容器注入和管道的建立_Web转控件台)"详细介绍了如何通过常规方法、泛型以及反射来实现默认容器注入和管道的建立,这对于理解和实践.NET ...
C#和.NET平台提供了多种实现DI容器的方式,包括自定义实现和使用第三方库。本文将深入探讨C#和.NET中的容器概念、其工作原理以及如何在实践中应用。 首先,让我们了解什么是依赖注入。依赖注入是一种软件设计原则,...
【标题】:“canal-server-web:Canal服务端的Web版本,支持在Web容器中启动” 【正文】: Canal是阿里巴巴开源的一款高效、稳定、轻量级的数据库实时增量同步工具,它能够实现对数据库的binlog进行监听并解析,...
在进行Web开发时,我们经常会遇到需要手动添加的jar包和配置文件,这些是构建一个功能完备、运行稳定的Web应用程序必不可少的部分。"SS+Ajax"的标签表明此资源集主要涉及Spring Framework(简称SS)与Ajax技术的整合...
在我们的例子中,客户端通常是Web浏览器,而服务器端则是运行Servlet的Web容器,如Tomcat或Jetty。 **注册模块** 在"friend"项目中,注册功能通常涉及以下几个步骤: 1. **创建表单**:HTML页面上有一个表单,...
本文将探讨几种在Vue中实现手动刷新组件的方法,这些方法可以帮助开发者解决数据更新后视图不刷新的问题。 首先,Vue实例中提供了一个 vm.$forceUpdate() 方法,此方法允许我们强制组件重新渲染。当你在组件的数据...
离线百度地图Web示例通常会提供完整的代码示例,帮助开发者快速理解和实现这一功能。在实际应用中,你可能还需要考虑版权问题,因为地图数据可能受到严格的使用条款限制。 总的来说,离线百度地图Web示例及使用涉及...
初始化发生在Web应用启动时,Web容器调用filter的init()方法,可以进行一些全局的设置。doFilter()方法会在每次请求匹配到该过滤器时被调用。销毁发生在Web应用关闭或重新部署时,Web容器调用destroy()方法,释放...
在这个主题中,“21-04-05_DefaultDIPattern(004_使用常规、泛型、反射等 方式实默认容器注入和管道的建立_Web).rar”文件涵盖了如何使用不同的技术来实现依赖注入,特别是关注默认容器的配置以及管道的建立。...
JavaProject工程通常是一个标准的Java应用程序,主要包含源代码、资源文件等,而Web项目则是构建Web应用的基础,它需要额外的配置和结构以支持动态网页(如JSP)、Servlet以及Web容器(如Tomcat)的运行。...
然而,一个“纯Java写的web服务器”可能不依赖这些成熟的容器,而是直接实现Servlet的逻辑,或者使用其他方式(如函数式编程、微服务框架)来处理动态请求。 在提供的压缩包文件"myserver"中,可能包含了服务器的源...
你可以通过POST请求向 `/admin/indexer` API发送数据,或者在Web界面中手动操作。 7. **配置WebLucene** 在`src/main/resources`目录下,有多个配置文件,如`search-config.xml`和`index-config.xml`,它们定义了...
接着,容器创建一个ServletConfig对象,这个对象包含了Servlet的初始化配置信息,如在web.xml文件中定义的参数。ServletConfig对象还与当前Web应用程序的ServletContext对象关联,ServletContext是整个Web应用的共享...
本教程将详细介绍如何使用Axis手动创建并调用Web服务。 首先,我们需要了解Web服务的基本概念。Web服务基于SOAP(Simple Object Access Protocol)协议,通过HTTP协议进行通信,使得应用程序可以在网络上共享功能。...
"自动排课功能的实现"则表明系统能够自动进行课程安排,避免手动排课的繁琐与耗时,这对于规模较大的实验室或课程设置复杂的教育机构来说尤其重要。 【标签】:“rar” “rar”是文件压缩格式,通常用于打包多个...