[置顶] java web 动态服务器
写了一个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 动态服务器的更多相关文章
- [置顶] Java Web开发教程来袭
Java Web,是用Java技术来解决相关web互联网领域的技术总和.web包括:web服务器和web客户端两部分.Java在客户端的应用有java applet不过现在使用的很少,Java在服务器 ...
- [置顶]
Java Web学习总结(24)——SSM(Spring+SpringMVC+MyBatis)框架快速整合入门教程
1.基本概念 1.1.Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One ...
- [置顶]
Java Web学习总结(25)——MyEclipse+Tomcat+MAVEN+SVN项目完整环境搭建
这次换了台电脑,所以需要重新配置一次项目开发环境,过程中的种种,记录下来,便于以后再次安装,同时给大家一个参考. 1.JDK的安装 首先下载JDK,这个从sun公司官网可以下载,根据自己的系统选择64 ...
- Python 之web动态服务器
webServer.py代码如下: import socket import sys from multiprocessing import Process class WSGIServer(obje ...
- [置顶]
Java基础学习总结(34)——HTTP协议详解
一.什么是HTTP协议 HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的 ...
- Java Web Tomcat服务器
一.Tomcat目录结构 1.bin:存放脚本文件.其中有个档是catalina.bat,打开这个配置文件,在非注释行加入JDK路径(SET JAVA_HOME=C:\j2sdk1.4.2_06)保存 ...
- [置顶] java 通过classloader加载类再通过classforname实例化
自己写一个web服务器,发现class.forName用不了,找不到类,原因是找不到类路径, 可以过加载需要的类的文件路径,然后再通过ClassLoader来加载所需要的类.其中的原 理就不多说了,下 ...
- [置顶] Java套接字Socket编程
1)概念 网络编程基本模型就客户端到服务器的模型,也就是我们常见的C/S模型.简单的说就是两个进程间相互通信的过程.即通信双方一方作为服务器等待客户端提出请求并给以回应,另一方作为客户端向服务器提出请 ...
- [置顶] Java 8全面解析!不知道的来看看那!
java8的面世惊动了不少业界人员,让我们一起来看看吧! 函数式接口 函数式接口是只定义了一个抽象方法的接口.Java 8引入了FunctionalInterface注解来表明一个接口打算成为一个函数 ...
随机推荐
- Windows服务程序的原理及实现(服务分为WIN32服务和系统服务)
今天给大家讲下怎样做一个服务程序...本来是想详细讲的,不过写着写着累得要命..很多 地方就没详细...不过代码我加了点注...如果还有一些不明白的自己查下MSDN......便宜 环境,,VC++6 ...
- CentOS7 yum lamp 虚拟主机配置 lamp各组件简单影响性能的参数调整--for 一定的环境需求
LAMP Server on CentOS 7 Updated Tuesday, January 13, 2015 by Joel Kruger This guide provides step-by ...
- poj 3185 The Water Bowls(反转)
Description The cows have a line of water bowls water bowls to be right-side-up and thus use their w ...
- eclipse搭建Log4J日志环境
在hibernate使用的日志标准都为slf,slf可以看作为它的接口,因此需要找到它的实例,为我们做日志.我们选择使用log4j为实例. 1. 为防止冲突,先将slf4j-nop的jar包(它也是s ...
- 移动web开发前准备知识了解(html5、jquery)笔记
1.经常使用 插件工具 chrome插件: Mobile & Tablet Emulator(用于常见移动端适配):(重点) Mobile Emulator is an useful o ...
- Emmet 插件使用教程
1)使用 Emmet 生成 HTML 的语法详解生成 HTML 文档初始结构 HTML 文档的初始结构,就是包括 doctype.html.head.body 以及 meta 等内容.你只需要输入一个 ...
- 一点用JS写控制权限的心得
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- android开发字符串工具类(一)
package com.gzcivil.utils; import java.io.BufferedReader; import java.io.ByteArrayOutputStream; impo ...
- 利用SQL语句产生分组序号
partition by关键字是分析性函数的一部分,它和聚合函数不同的地方在于它能返回一个分组中的多条记录,而聚合函数一般只有一条反映统计值的记录,partition by用于给结果集分组,如果没 ...
- Java的常见误区与细节
网上转来的 昨天整整一天,我都都呆在图书里.本打算找一些书学习“正则表达式”,很失望,没找到有这部分的内容的书.发现了一本<Java深入解析>,其中涉及了很多平时没有注意的一些误区,也许开 ...