java web置顶_[置顶] java web 动态服务器

d7731da1f485442757ef8d0a3cc770e3.png

5c11f275fb85be11dc1930799d40d615.png

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

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

朋友。判断做的不够多,

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

静态文件index.html:

简单的web服务器
简单的web静态服务器

主要核心代码:

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");

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值