⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 httpserver.java

📁 简单的Web Server!带界面的
💻 JAVA
字号:
package test;

import java.net.*;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.util.*;
import javax.swing.*;
//import java.lang.*;

public class httpServer {
	private static int port;
	private static ServerSocket server_socket;
	
	public int getPort() {
		return port;
	}
	
	public void setPort(int port) {
		this.port = port;
	}
	
	public void Init()
	{
		//int port;
		
		// 读取服务器端口号
		
		try {
			// 监听服务器端口,等待连接请求
			server_socket = new ServerSocket(port);
			System.out.println("httpServer running on port "
					+ server_socket.getLocalPort());
			// 显示启动信息
			while (true) {
				Socket socket = server_socket.accept();
				System.out.println("New connection accepted "
						+ socket.getInetAddress() + ":" + socket.getPort());
				// 创建分线程
				try {
					httpRequestHandler request = new httpRequestHandler(socket);
					Thread thread = new Thread(request);
					// 启动线程
					thread.start();
				} catch (Exception e) {
					System.out.println(e);
				}
			}
		} catch (IOException e) {
			System.out.println(e);
		}
	}
	
	public static void main(String args[]) {
		new WebserverFrame();
		//Init();
	}	
}

class httpRequestHandler implements Runnable {
	final static String CRLF = "\r\n";
	Socket socket;
	InputStream input;
	OutputStream output;
	BufferedReader br;

	// 构造方法
	public httpRequestHandler(Socket socket) throws Exception {
		this.socket = socket;
		this.input = socket.getInputStream();
		this.output = socket.getOutputStream();
		this.br = new BufferedReader(new InputStreamReader(socket
				.getInputStream()));
	}

	// 实现Runnable 接口的run()方法
	public void run() {
		try {
			processRequest();
		} catch (Exception e) {
			System.out.println(e);
		}
	}

	private void processRequest() throws Exception {
		while (true) {
			// 读取并显示Web 浏览器提交的请求信息
			String headerLine = br.readLine();
			System.out.println("The client request is " + headerLine);
			if (headerLine.equals(CRLF) || headerLine.equals(""))
				break;
			StringTokenizer s = new StringTokenizer(headerLine);
			String temp = s.nextToken();
			if (temp.equals("GET")) {
				String fileName = s.nextToken();
				fileName = "." + fileName;
				// 打开所请求的文件
				FileInputStream fis = null;
				boolean fileExists = true;
				try {
					fis = new FileInputStream(fileName);
				} catch (FileNotFoundException e) {
					fileExists = false;
				}
				// 完成回应消息
				String serverLine = "Server: a simple java httpServer";
				String statusLine = null;
				String contentTypeLine = null;
				String entityBody = null;
				String contentLengthLine = "error";
				if (fileExists) {
					statusLine = "HTTP/1.0 200 OK" + CRLF;
					contentTypeLine = "Content-type: " + contentType(fileName)
							+ CRLF;
					contentLengthLine = "Content-Length: "
							+ (new Integer(fis.available())).toString() + CRLF;
				} else {
					statusLine = "HTTP/1.0 404 Not Found" + CRLF;
					contentTypeLine = "text/html";
					entityBody = "<HTML>"
							+ "<HEAD><TITLE>404 Not Found</TITLE></HEAD>"
							+ "<BODY>404 Not Found"
							+ "<br>usage:http://yourHostName:port/"
							+ "fileName.html</BODY></HTML>";
				}
				// 发送到服务器信息
				output.write(statusLine.getBytes());
				output.write(serverLine.getBytes());
				output.write(contentTypeLine.getBytes());
				output.write(contentLengthLine.getBytes());
				output.write(CRLF.getBytes());
				// 发送信息内容
				if (fileExists) {
					sendBytes(fis, output);
					fis.close();
				} else {
					output.write(entityBody.getBytes());
				}
			}
		}
		// 关闭套接字和流
		try {
			output.close();
			br.close();
			socket.close();
		} catch (Exception e) {
		}
	}

	private static void sendBytes(FileInputStream fis, OutputStream os)
			throws Exception {
		// 创建一个 1K buffer
		byte[] buffer = new byte[1024];
		int bytes = 0;
		// 将文件输出到套接字输出流中
		while ((bytes = fis.read(buffer)) != -1) {
			os.write(buffer, 0, bytes);
		}
	}

	private static String contentType(String fileName) {
		if (fileName.endsWith(".htm") || fileName.endsWith(".html")) {
			return "text/html";
		}

		return "fileName";
	}
}

class WebserverFrame extends JFrame
{
	private JLabel label_port;
	private JLabel label_alert;
	private JLabel label_path;
	private JTextField tf_port;
	private JTextField tf_path;
	private JButton button_open;
	private JButton button_ok;
	private JButton button_cancel;
	
	public WebserverFrame()
	{
		//初始化
		label_port = new JLabel("选择端口号:");
		label_alert=new JLabel("请选择1025-65534!");
		label_alert.setForeground(Color.red);
		label_path = new JLabel("选择主目录:");
		tf_port = new JTextField("8000",8);
		tf_path = new JTextField(8);
		button_open = new JButton("打开···");
		button_open.addActionListener(new ActionListener(){

			public void actionPerformed(ActionEvent e) {
				JFileChooser chooser =new JFileChooser(); 
				int state=chooser.showOpenDialog(null); 
				File file=chooser.getSelectedFile(); 
				String path = file.getPath();
				String name = file.getName();
				tf_path.setText(name);
				
			}
			
		});
		button_ok = new JButton("确定");
		button_ok.addActionListener(new ActionListener(){

			public void actionPerformed(ActionEvent e) {
				httpServer hs = new httpServer();
				int get_port = Integer.parseInt(tf_port.getText());
				hs.setPort(get_port);
				setVisible(false);
				System.out.println(tf_path.getText());
				hs.Init();
				
			}
			
		});
		button_cancel = new JButton("取消");
		button_cancel.addActionListener(new ActionListener(){

			public void actionPerformed(ActionEvent arg0) {
				System.exit(0);
				
			}
			
		});
		setTitle("一个简单的Web Server!");
		add(label_port);
		add(tf_port);
		add(label_alert);
		add(label_path);
		add(tf_path);
		add(button_open,BorderLayout.EAST);
		add(button_ok,BorderLayout.SOUTH);
		add(button_cancel);
		setSize(300,150);
		setLayout(new FlowLayout());
		setVisible(true);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -