提交 820f5f14 编写于 作者: 武汉红喜's avatar 武汉红喜

SimpleContainer

上级 617603d6
......@@ -7,6 +7,9 @@ public final class Bootstrap {
public static void main(String[] args) {
HttpConnector connector = new HttpConnector();
Container container = new SimpleContainer();
connector.setContainer(container);
connector.setBufferSize(2048);
connector.start();
}
}
package com.whatsmars.tomcat.connector;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* Created by shenhongxi on 16/4/14.
*/
public interface Container {
public void invoke(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException;
}
......@@ -10,10 +10,14 @@ import java.net.Socket;
*/
public class HttpConnector implements Runnable {
private Container container;
boolean stopped;
private String scheme = "http";
private int bufferSize;
public void run() {
ServerSocket serverSocket = null;
int port = 8080;
......@@ -44,4 +48,20 @@ public class HttpConnector implements Runnable {
public String getScheme() {
return scheme;
}
public int getBufferSize() {
return bufferSize;
}
public void setBufferSize(int bufferSize) {
this.bufferSize = bufferSize;
}
public Container getContainer() {
return container;
}
public void setContainer(Container container) {
this.container = container;
}
}
......@@ -4,6 +4,8 @@ import com.whatsmars.tomcat.servlet.ServletProcessor;
import com.whatsmars.tomcat.servlet.StaticResourceProcessor;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
......@@ -26,7 +28,7 @@ public class HttpProcessor {
SocketInputStream input = null;
OutputStream output = null;
try {
input = new SocketInputStream(socket.getInputStream(), 2048); // 1.读取套接字的输入流
input = new SocketInputStream(socket.getInputStream(), connector.getBufferSize()); // 1.读取套接字的输入流
output = socket.getOutputStream();
// create HttpRequest object and parse
......@@ -39,8 +41,7 @@ public class HttpProcessor {
parseHeaders(input); // 解析请求头
if (request.getRequestURI().startsWith("/servlet/")) {
ServletProcessor processor = new ServletProcessor();
//processor.process(request, response);
connector.getContainer().invoke((HttpServletRequest) request, (HttpServletResponse) response);
} else {
StaticResourceProcessor processor = new StaticResourceProcessor();
//processor.process(request, response);
......
package com.whatsmars.tomcat.connector;
import com.whatsmars.tomcat.servlet.Constants;
import javax.servlet.Servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.net.URLClassLoader;
import java.net.URLStreamHandler;
/**
* Created by shenhongxi on 16/4/14.
*/
public class SimpleContainer implements Container {
public void invoke(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
String servletName = ( (HttpServletRequest) request).getRequestURI();
servletName = servletName.substring(servletName.lastIndexOf("/") + 1);
URLClassLoader loader = null;
try {
URL[] urls = new URL[1];
URLStreamHandler streamHandler = null;
File classPath = new File(Constants.WEB_ROOT);
String repository = (new URL("file", null, classPath.getCanonicalPath() + File.separator)).toString() ;
urls[0] = new URL(null, repository, streamHandler);
loader = new URLClassLoader(urls);
} catch (IOException e) {
System.out.println(e.toString() );
}
Class myClass = null;
try {
myClass = loader.loadClass(servletName);
}
catch (ClassNotFoundException e) {
System.out.println(e.toString());
}
Servlet servlet = null;
try {
servlet = (Servlet) myClass.newInstance();
servlet.service((HttpServletRequest) request, (HttpServletResponse) response);
}
catch (Exception e) {
System.out.println(e.toString());
}
catch (Throwable e) {
System.out.println(e.toString());
}
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册