Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
武汉红喜
whatsmars
提交
820f5f14
W
whatsmars
项目概览
武汉红喜
/
whatsmars
通知
3
Star
0
Fork
1
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
W
whatsmars
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
820f5f14
编写于
4月 14, 2016
作者:
武汉红喜
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
SimpleContainer
上级
617603d6
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
96 addition
and
3 deletion
+96
-3
whatsmars-tomcat/src/main/java/com/whatsmars/tomcat/connector/Bootstrap.java
...c/main/java/com/whatsmars/tomcat/connector/Bootstrap.java
+3
-0
whatsmars-tomcat/src/main/java/com/whatsmars/tomcat/connector/Container.java
...c/main/java/com/whatsmars/tomcat/connector/Container.java
+14
-0
whatsmars-tomcat/src/main/java/com/whatsmars/tomcat/connector/HttpConnector.java
...in/java/com/whatsmars/tomcat/connector/HttpConnector.java
+20
-0
whatsmars-tomcat/src/main/java/com/whatsmars/tomcat/connector/HttpProcessor.java
...in/java/com/whatsmars/tomcat/connector/HttpProcessor.java
+4
-3
whatsmars-tomcat/src/main/java/com/whatsmars/tomcat/connector/SimpleContainer.java
.../java/com/whatsmars/tomcat/connector/SimpleContainer.java
+55
-0
未找到文件。
whatsmars-tomcat/src/main/java/com/whatsmars/tomcat/connector/Bootstrap.java
浏览文件 @
820f5f14
...
...
@@ -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
();
}
}
whatsmars-tomcat/src/main/java/com/whatsmars/tomcat/connector/Container.java
0 → 100644
浏览文件 @
820f5f14
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
;
}
whatsmars-tomcat/src/main/java/com/whatsmars/tomcat/connector/HttpConnector.java
浏览文件 @
820f5f14
...
...
@@ -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
;
}
}
whatsmars-tomcat/src/main/java/com/whatsmars/tomcat/connector/HttpProcessor.java
浏览文件 @
820f5f14
...
...
@@ -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);
...
...
whatsmars-tomcat/src/main/java/com/whatsmars/tomcat/connector/SimpleContainer.java
0 → 100644
浏览文件 @
820f5f14
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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录