写了一个java web 动态服务器,主要通过内部类来实现,动态类使用了外部类,采用了

classforname 实例化,动态类的构造方法不能带参数, 效果都出来了,分享给有需要的

朋友。判断做的不够多,

写得不够好,感谢指出缺点。以下是代码:

静态文件index.html:

<html>
                    <head>
                             <title>简单的web服务器</title>
                    </head>
                    <body>
                              <div align="center">简单的web静态服务器</div>
                     </body>
              </html>

主要核心代码:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.MalformedURLException;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.URL;
import java.net.URLClassLoader;

/**
 * web处理类
 */
class WebProcess{
 private Request request;
 private Response response;
 public WebProcess(Request request, Response response) {
  // TODO Auto-generated constructor stub
  this.request=request;
  this.response=response;
  this.process();
 }
 private void process() {
  // TODO Auto-generated method stub
  String uri=request.getUri();
  System.out.println("uri---------------------------"+uri);
  String uriSuffix=uri.substring(uri.indexOf('.')+1);
  System.out.println("uriSuffix------------"+uriSuffix);
  if("htmlxmlhtm".indexOf(uriSuffix)>-1){
   System.out.println("静态文件");
   File fileToSend=new File(uri);
   if(fileToSend.exists()){
    System.out.println("存在文件");
    try {
     FileInputStream fis=new FileInputStream(fileToSend);
     byte[] data=new byte[fis.available()];
     fis.read(data);
     //System.out.println(data.length);
     response.out(new String(data));
    } catch (FileNotFoundException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    } catch (IOException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
   }else{
    System.out.println("不存在文件");
    response.out("您要访问的网页不存在");
   }
  }else{
   System.out.println("动态文件");
   //Visit v=new Visit(response,request);
   File fileToSend1=new File(uri);
   System.out.println("fileToSend----------------"+fileToSend1);
  /* if(fileToSend1.exists()){*/
    //System.out.println("类文件存在");
    try {
     //获取需要的的类的路径
     URL url=new URL("file:\\D:\\Users\\Administrator\\Workspaces\\MyEclipse 8.6\\2013-08-21\\src");
     String classname=uri;
     System.out.println("url-----------------"+url);
     ClassLoader cl=new URLClassLoader(new URL[]{url});
     Class d=cl.loadClass(classname);
     System.out.println(d);
     //System.out.println("cl-----------------------"+cl);
     Object c=Class.forName(uri).newInstance();
     Method method=c.getClass().getMethod("process", Response.class,Request.class);
     method.invoke(c,response,request);
    } catch (MalformedURLException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    } catch (ClassNotFoundException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    } catch (InstantiationException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    } catch (IllegalAccessException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    } catch (SecurityException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    } catch (NoSuchMethodException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    } catch (IllegalArgumentException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    } catch (InvocationTargetException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
   /*}else{
    System.out.println("类文件不存在");
   }*/
   
  }
 }
 
}

/**
 * 响应类
 */
class Response{
 private PrintWriter writer;
 public Response(OutputStream outputStream) {
  // TODO Auto-generated constructor stub
  this.writer=new PrintWriter(outputStream,true);
  //this.out(data);
 }
 public void out(String data) {
  // TODO Auto-generated method stub
  System.out.println("out()-----------------start");
  writer.println(data);
  
 }
 
}

/**
 * 请求类
 */
class Request{
 private InputStream input;
 public Request(InputStream inputStream) {
  // TODO Auto-generated constructor stub
  this.input=inputStream;
  //this.getUri();
 }
 public String getUri(){
  String resource=null;
  System.out.println("getUri()-------------------start--");
  BufferedReader in=new BufferedReader(new InputStreamReader(input));
  try {
   String line=in.readLine();
   resource=line.substring(line.indexOf('/')+1, line.lastIndexOf('/')-5);
   System.out.println("resource-----------"+resource);
   
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  return resource;
 }
 
}

/**
 * @author Administrator
 *采用了线程
 */
public class ServerWeb implements Runnable {

private static final int port = 8085;
 ServerSocket serversocket;

/**
  * @param args
  */
 public ServerWeb(){
  new Thread(this).start();      //把当前类设置为一个线程
 }
 
 @Override
 public void run() {
  // TODO Auto-generated method stub
  System.out.println("run()---------------------start-----");
  try {
   serversocket=new ServerSocket(port);
   System.out.println("serversocket--------------------"+serversocket.getLocalPort());
   while(true){
    Socket socket=serversocket.accept();
    System.out.println("socket----------------------"+socket.getLocalPort());
    Request request=new Request(socket.getInputStream());
    Response response=new Response(socket.getOutputStream());
    WebProcess webprocess=new WebProcess(request,response);
    socket.close();
   }
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
 
 
 
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  new ServerWeb();
 }

}

独立动态类的代码:

import java.util.Date;

public class Visit {
 public Visit(/*Response response, Request request*/) {
  // TODO Auto-generated constructor stub
  /*this.request=request;
  this.response=response;*/
  //this.process();
 }
 
 public void process(Response response, Request request){
  response.out("动态网页"+new Date().toString());
  System.out.println("process------------start");
 }
}

[置顶] java web 动态服务器的更多相关文章

  1. [置顶] Java Web开发教程来袭

    Java Web,是用Java技术来解决相关web互联网领域的技术总和.web包括:web服务器和web客户端两部分.Java在客户端的应用有java applet不过现在使用的很少,Java在服务器 ...

  2. [置顶] Java Web学习总结(24)——SSM(Spring+SpringMVC+MyBatis)框架快速整合入门教程

    1.基本概念 1.1.Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One  ...

  3. [置顶] Java Web学习总结(25)——MyEclipse+Tomcat+MAVEN+SVN项目完整环境搭建

    这次换了台电脑,所以需要重新配置一次项目开发环境,过程中的种种,记录下来,便于以后再次安装,同时给大家一个参考. 1.JDK的安装 首先下载JDK,这个从sun公司官网可以下载,根据自己的系统选择64 ...

  4. Python 之web动态服务器

    webServer.py代码如下: import socket import sys from multiprocessing import Process class WSGIServer(obje ...

  5. [置顶] Java基础学习总结(34)——HTTP协议详解

    一.什么是HTTP协议 HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的 ...

  6. Java Web Tomcat服务器

    一.Tomcat目录结构 1.bin:存放脚本文件.其中有个档是catalina.bat,打开这个配置文件,在非注释行加入JDK路径(SET JAVA_HOME=C:\j2sdk1.4.2_06)保存 ...

  7. [置顶] java 通过classloader加载类再通过classforname实例化

    自己写一个web服务器,发现class.forName用不了,找不到类,原因是找不到类路径, 可以过加载需要的类的文件路径,然后再通过ClassLoader来加载所需要的类.其中的原 理就不多说了,下 ...

  8. [置顶] Java套接字Socket编程

    1)概念 网络编程基本模型就客户端到服务器的模型,也就是我们常见的C/S模型.简单的说就是两个进程间相互通信的过程.即通信双方一方作为服务器等待客户端提出请求并给以回应,另一方作为客户端向服务器提出请 ...

  9. [置顶] Java 8全面解析!不知道的来看看那!

    java8的面世惊动了不少业界人员,让我们一起来看看吧! 函数式接口 函数式接口是只定义了一个抽象方法的接口.Java 8引入了FunctionalInterface注解来表明一个接口打算成为一个函数 ...

随机推荐

  1. flex容器解析

    通常在Flex种有两种形式的容器:布局和导航. 在容器中我们可以同时设置一些空间和子容器,我们可以叫在容器内定义的任何组件为该容器的孩子. 在一个Flex程序的根部是一个叫做Application C ...

  2. ffmpeg+SDl+ 播放器 -01

    最近因公司项目需要,打算自己在LINUX平台整一个播放器,来学习和研究音频编解码. 项目需求: 支持下列格式文件播放. 1> WMA 硬件解码,但需要软件分析ASF格式,提取Payload数据 ...

  3. PhoneGap或者Cordova框架下实现Html5中JS调用Android原生代码

    PhoneGap或者Cordova框架下实现Html5中JS调用Android原生代码 看看新闻网>看引擎>开源产品 0人收藏此文章, 发表于8小时前(2013-09-06 00:39) ...

  4. OpenGL研究2.0 计算圆

    OpenGL研究2.0 计算圆 DionysosLai2014-06-18 在游戏中.常常有些地方涉及到一些圆的轨迹计算,例如一些转轴类的游戏,人物一般在角色转轴上面运动.这时,我们就要时刻计算角色的 ...

  5. Swift主题色顶级解决方案

    一.常规主题色使用点 应用在发布前都会对主题色进行设置,以统一应用的风格(可能有多套主题).在主题色设置上有几个方面,如下: 1. TabBar部分,设置图片高亮.文本高度颜色2. Navigatio ...

  6. 搭建PhoneCat项目的开发与测试环境

    AngularJS官方网站提供了一个用于学习的示例项目:PhoneCat.这是一个Web应用,用户可以浏览一些Android手机,了解它们的详细信息,并进行搜索和排序操作. 获取源代码 PhoneCa ...

  7. JS(移动端)自己封装移动端一些常用方法

    /** * Created by Administrator on 2016/7/14. */ /*命名空间*/ window.lcf = {}; /*监听过渡结束的方法*/ lcf.transiti ...

  8. 触碰jQuery:AJAX异步详解(转)

    AJAX 全称 Asynchronous JavaScript and XML(异步的 JavaScript 和 XML).它并非一种新的技术,而是以下几种原有技术的结合体. 1)   使用CSS和X ...

  9. ImageButton与Button

    1.Button控件 Butotn控件,主要用来实现一些命令操作,通过注册监听事件来实现.首先需要在xml文档中放入一个button按钮. <Button android:id="@+ ...

  10. mysql主从同步从库同步报错

    1.在从库上设置master_info信息时出错 mysql> change master to master_host='192.168.157.143',master_port=3306,m ...