最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
java服务器简单实现过程记录代码示例
时间:2022-06-29 02:03:13 编辑:袖梨 来源:一聚教程网
本篇文章小编给大家分享一下java服务器简单实现过程记录代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。
一、HTTP
http请求
一般一个http请求包括以下三个部分:
1 请求方法,如get,post
2 请求头
3 实体
一个http请求的实例如下:
GET /index.jsp HTTP/1.1
Host: localhost:8080
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:15.0) Gecko/20100101 Firefox/15.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
注意红色部分的url,这是我们待会要截取出来的。
http响应
与http请求类似,http响应也包括三个部分
1 协议-状态码-描述
2 响应头
3 响应实体段
二、socket类
套接字是网络连接的断点。套接字使得应用程序可以从网络中读取数据,可以向网络中写入数据。不同计算机上的应用程序可以通过套接字发送或接受字节流。java中提供了Socket类来实现这个功能,通过getInputStream和getOutputStream可以获取网络中的输入输出流。
但是,光靠Socket类还是不能够实现我们构建一个服务器应用程序的功能的,因为服务器必须时刻待命,因此java里面提供了ServerSocket类来处理等待来自客户端的请求,当ServerSocket接受到了来自客户端的请求之后,它就会创建一个实例来处理与客户端的通信。
三、服务器应用程序的实现
首先,我们要构建一个封装请求信息的类requst,一个响应请求的类response,还要有一个主程序httpServer来处理客户端来的请求。
package com.lwq;
import java.io.IOException;
import java.io.InputStream;
/**
* @author Joker
* 类说明
* 将浏览器发来的请求信息转化成字符和截取url
*/
public class Request {
//输入流
private InputStream input;
//截取url,如http://lo**c*alhost:8080/index.html ,截取部分为 /index.html
private String uri;
public Request(InputStream inputStream){
this.input = inputStream;
}
public InputStream getInput() {
return input;
}
public void setInput(InputStream input) {
this.input = input;
}
public String getUri() {
return uri;
}
public void setUri(String uri) {
this.uri = uri;
}
//从套接字中读取字符信息
public void parse(){
StringBuffer request = new StringBuffer(2048);
int i = 0;
byte[] buffer = new byte[2048];
try {
i = input.read(buffer);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
i = -1;
}
for(int j = 0;jindex1){
return requestString.substring(index1+1,index2);
}
}
return null;
}
}
下面是封装了响应请求的类response:
package com.lwq;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
/**
* @author Joker
* @version 创建时间:Sep 5, 2012 9:59:53 PM
* 类说明 根据相应信息返回结果
*/
public class Response {
private static final int BUFFER_SIZE = 1024;
Request request;
OutputStream output;
public Response(OutputStream output){
this.output = output;
}
public void sendStaticResource() throws IOException{
byte[] bytes = new byte[BUFFER_SIZE];
FileInputStream fis = null;
File file = new File(HttpServer.WEB_ROOT,request.getUri());
if(file.exists()){
try {
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);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}finally{
if(fis !=null){
fis.close();
}
}
}else{
//找不到文件
String errorMessage = "HTTP/1.1 404 File Not Foundrn" +
"Content-Type: text/htmlrn" +
"Content-Length: 23rn" +
"rn" +
"
File Not Found
";
try {
output.write(errorMessage.getBytes());
output.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public Request getRequest() {
return request;
}
public void setRequest(Request request) {
this.request = request;
}
public OutputStream getOutput() {
return output;
}
public void setOutput(OutputStream output) {
this.output = output;
}
public static int getBUFFER_SIZE() {
return BUFFER_SIZE;
}
}
接下来是主程序,
package com.lwq;
import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
/**
* @author Joker
* 类说明
*/
public class HttpServer {
/**
* @param args
*/
//WEB_ROOT是服务器的根目录
public static final String WEB_ROOT = System.getProperty("user.dir")+File.separator+"webroot";
//关闭的命令
private static final String SHUTDOWN_COMMAND= "/SHUTDOWN";
public static void main(String[] args) {
// TODO Auto-generated method stub
HttpServer server = new HttpServer();
server.await();
}
public void await(){
ServerSocket serverSocket = null;
int port = 8080;
try {
serverSocket = new ServerSocket(port,1,InetAddress.getByName("127.0.0.1"));
while(true)
{
try {
Socket socket = null;
InputStream input = null;
OutputStream output = null;
socket = serverSocket.accept();
input = socket.getInputStream();
output = socket.getOutputStream();
//封装request请求
Request request = new Request(input);
request.parse();
//封装response对象
Response response = new Response(output);
response.setRequest(request);
response.sendStaticResource();
socket.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
continue;
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
运行httpServer,在浏览器中打下http://localh**ost*:8080/index.jsp,就能看到服务器响应的结果了。
相关文章
- 三国志8重制版虚构特典剧本介绍说明 10-30
- 暗喻幻想暗黑法师解锁方法攻略分享 10-30
- 暗喻幻想元素大师解锁方法攻略分享 10-30
- 暗喻幻想地下纳骨堂锁住的门打开方法 10-30
- 暗喻幻想6月22日玛丽亚位置一览 10-30
- 暗喻幻想巫师阿基态解锁方法分享 10-30