tomcat学习一(简单web服务器示例)

Request.java

package com.chen;

import java.io.IOException;
import java.io.InputStream;

public class Request {
private InputStream input ;
private String uri;

public Request(){}
public Request(InputStream input){
this.input = input;
}

public void parse(){
byte by[] = new byte[2048];
int len = 0 ;
StringBuilder sb = new StringBuilder();
try {
//while(len!=-1){
len =input.read(by);
System.out.println("len="+len);
if(len>0){
sb.append(new String(by,0,len));
}
//}
} catch (IOException e) {
e.printStackTrace();
}
this.uri = parseUri(sb.toString());
}

private String parseUri(String str) {
int index1 , index2 ;
index1 = str.indexOf(' ');
if(index1!=-1){
index2 = str.indexOf(' ',index1+1);
if(index2>index1)
return str.substring(index1+1,index2);
}
return null;
}
public String getUri() {
return uri;
}
public void setUri(String uri) {
this.uri = uri;
}

}




Response.java

package com.chen;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;

public class Response {
private static final int BUFFER_SIZE=1024;
private OutputStream output;
private Request request ;

public Response(){}

public Response(OutputStream output){
this.output = output;
}

public Request getRequest() {
return request;
}

public void setRequest(Request request) {
this.request = request;
}

public void sendStaticResource() throws IOException{
byte[] bytes = new byte[BUFFER_SIZE];
FileInputStream fis = null;
try{
System.out.println("uri:"+request.getUri());
File file = new File(HttpServer.WEB_ROOT,request.getUri());
if(file.exists()){
fis = new FileInputStream(file);
int ch = fis.read(bytes,0,BUFFER_SIZE);
while(ch!=-1){
output.write(bytes,0,ch);
ch = fis.read(bytes, 0, BUFFER_SIZE);
}
}else{
String errorMessage="HTTP/1.1 404 File Not Found\r\n" +
"Content-Type:text/html\r\n" +
"Content-Length:23\r\n" +
"\r\n" +
"<h1>File Not Found!</h1>";
output.write(errorMessage.getBytes());
}
}catch(Exception e){
e.printStackTrace();
}finally{
if(fis!=null){
fis.close();
}
}

}

}




HttpServer.java

package com.chen;

import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;

public class HttpServer {

public static final String WEB_ROOT=System.getProperty("user.dir")
+File.separator+"webroot";
public static final String SHUTDOWN_COMMAND="/SHUTDOWN";

public static void main(String[] args) {
HttpServer server = new HttpServer();
server.await();
}
private boolean shutdown = false;

public void await(){
ServerSocket serverSocket = null;
int port = 8080;
try{
serverSocket = new ServerSocket(port, 1, InetAddress.getByName("127.0.0.1"));
}catch(Exception e){
e.printStackTrace();
System.exit(1);
}

while(!shutdown){
Socket socket = null;
InputStream input = null;
OutputStream output = null;
try{
socket = serverSocket.accept();
input = socket.getInputStream();
output = socket.getOutputStream();

Request request = new Request(input);
request.parse();

Response response = new Response(output);
response.setRequest(request);
response.sendStaticResource();

socket.close();

}catch(Exception e){
e.printStackTrace();
System.exit(1);
}


}

}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值