自己的web服务器项目-实现多线程处理(三)
2017-01-06 09:20
561 查看
上面项目中,服务器只能接受单方的请求,不能够多用户同时访问,这明显不符合现实逻辑,那么在这里,我们将其修改为多线程的,实现多用户的访问
首先,我们实现Server类如下:
[java] view
plain copy
package com.sapmle.server;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import com.sample.utils.ServerPortUtils;
public class Server {
public static void main(String[] args) {
//声明变量
ServerSocket ss=null;
Socket s=null;
boolean flag=true;
int port=Integer.valueOf(ServerPortUtils.getPortValue("serverPort"));
int i=1;
System.out.println("Server Port:"+port);
try {
ss=new ServerSocket(port);
while(flag)
{
//接受客户端发送过来的Socket
s=ss.accept();
System.out.println("accept count:"+i++);
ServerThread st=new ServerThread(s);
st.start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
注意:在实现int port=Integer.valueOf(ServerPortUtils.getPortValue("serverPort"));时同样使用了properties文件进行端口的配置,参照前面自己配置。
代码中,while(true)为保持服务器端一直处于监听状态,st.start()启动线程
下面就是线程类的实现:
[java] view
plain copy
package com.sapmle.server;
import java.net.Socket;
import com.sample.http.HttpAccessProcessor;
import com.sample.http.HttpCreatorImpl;
import com.sample.http.HttpRequest;
import com.sample.http.HttpResponse;
public class ServerThread extends Thread {
private Socket s;
public ServerThread(Socket s) {
this.s=s;
}
@Override
public void run() {
HttpCreatorImpl hci=new HttpCreatorImpl(s);
HttpRequest request=hci.getHttpRequest();
System.out.println(request.getProtocol());
HttpResponse response=hci.getHttpResponse();
HttpAccessProcessor hapi=hci.getHttpAccessProcessor();
if(request.isStaticResource())
{
hapi.processStaticResource(request, response);
}
else if(request.isDynamicResource())
{
hapi.processDynamicResource(request, response);
}
else
{
System.out.println("无法处理");
hapi.sendError(404, request, response);
}
}
}
这样的话,我们就完成了类似于服务器端Servlet的功能,能够同时处理html页面和Servlet页面,最重要的是多用户同时访问哦。。。,效果这儿就不展示了,你可以将自己的电脑作为服务器,然后使用局域网中的多台电脑进行访问,由于代码中含有很多提示信息,所以控制台上会有打印,如下是我的控制台界面:
首先,我们实现Server类如下:
[java] view
plain copy
package com.sapmle.server;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import com.sample.utils.ServerPortUtils;
public class Server {
public static void main(String[] args) {
//声明变量
ServerSocket ss=null;
Socket s=null;
boolean flag=true;
int port=Integer.valueOf(ServerPortUtils.getPortValue("serverPort"));
int i=1;
System.out.println("Server Port:"+port);
try {
ss=new ServerSocket(port);
while(flag)
{
//接受客户端发送过来的Socket
s=ss.accept();
System.out.println("accept count:"+i++);
ServerThread st=new ServerThread(s);
st.start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
注意:在实现int port=Integer.valueOf(ServerPortUtils.getPortValue("serverPort"));时同样使用了properties文件进行端口的配置,参照前面自己配置。
代码中,while(true)为保持服务器端一直处于监听状态,st.start()启动线程
下面就是线程类的实现:
[java] view
plain copy
package com.sapmle.server;
import java.net.Socket;
import com.sample.http.HttpAccessProcessor;
import com.sample.http.HttpCreatorImpl;
import com.sample.http.HttpRequest;
import com.sample.http.HttpResponse;
public class ServerThread extends Thread {
private Socket s;
public ServerThread(Socket s) {
this.s=s;
}
@Override
public void run() {
HttpCreatorImpl hci=new HttpCreatorImpl(s);
HttpRequest request=hci.getHttpRequest();
System.out.println(request.getProtocol());
HttpResponse response=hci.getHttpResponse();
HttpAccessProcessor hapi=hci.getHttpAccessProcessor();
if(request.isStaticResource())
{
hapi.processStaticResource(request, response);
}
else if(request.isDynamicResource())
{
hapi.processDynamicResource(request, response);
}
else
{
System.out.println("无法处理");
hapi.sendError(404, request, response);
}
}
}
这样的话,我们就完成了类似于服务器端Servlet的功能,能够同时处理html页面和Servlet页面,最重要的是多用户同时访问哦。。。,效果这儿就不展示了,你可以将自己的电脑作为服务器,然后使用局域网中的多台电脑进行访问,由于代码中含有很多提示信息,所以控制台上会有打印,如下是我的控制台界面:
自己的web服务器项目-request请求和response响应处理(一)
相关文章推荐
- 自己的web服务器项目-实现多线程处理(三)
- 自己的web服务器项目-request请求和response响应处理(一)
- 自己的web服务器项目-静态请求和动态请求处理(二)
- 自己动手写web服务器四(web服务器是如何通过压缩数据,web服务器的gzip模块的实现)
- 自己动手写web服务器四(web服务器是如何通过压缩数据,web服务器的gzip模块的实现)
- 自己实现简单Web服务器,支持GET POST请求
- 自己实现一个简易web服务器
- 个人电脑配置FTP服务器,四张图搞定。项目需要,并自己写了个客户端实现下载和上传的功能!
- 手把手教你搭建自己的Java Web(Android)项目(SpringMVC + Mybatis服务端,Html5 Web端, Android客户端实现)
- 用本地局域网中的电脑做web服务器,dns配置,花生壳,XAMPP 虚拟主机配置,实现多域名访问本地项目
- web 项目中的文件上传服务器的代码实现
- 如何利用自己的电脑做服务器发布tomcat的WEB项目供外网访问
- 利用免费的域名和服务器部署自己的web项目(Java)
- 如何利用自己的电脑做服务器发布tomcat的WEB项目供外网访问
- 关于如何在服务器上搭建tomcat并发布自己的web项目
- 利用HTTP协议实现Android文件上传至WEB服务器,采用PHP接收文件(参考网上自己实现)
- 处理【试图运行项目是出错:无法在Web服务器上启动服务。您不具备此应用程序的权限。】
- 如何利用自己的电脑做服务器发布tomcat的WEB项目供外网访问
- iOS项目开发中 webView 服务器返回来一堆不标准的html 语言 处理办法
- 一个嵌入式web服务器项目,实现通过手机Android App实现对嵌入式设备的控制