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

📄 webserver.java

📁 这个程序实现了web服务器端的服务功能 能够配置web服务的端口 主目录
💻 JAVA
字号:
//WebServer.java  用JAVA编写Web服务器
import java.io.*;
import java.math.*;
import java.net.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.border.*;

public class WebServer extends JFrame
{

	static  JTextField 	tf1,tf2,tf3,tf4;
	static	JTextArea	ta1;
	static	boolean  statusFlag=false;

 	JPanel  	pu,pd,pw,pe,pc,pdw,pdc,pde;
	String[]  	string={"启动服务","终止服务"};
	JButton[]   	button=new JButton[2];
	JLabel 		lb1,lb2,lb3,lb4,lb5;


   public WebServer(){
	super("WEB服务器");
	EventHandler handler=new EventHandler();


getContentPane().setLayout(new BorderLayout());

	pu=new JPanel();

	tf1=new JTextField(18);
	tf1.setText("d:\\s\\");
	tf2=new JTextField(4);
	tf2.setText("80");
	lb1=new JLabel("设置主目录:");
	lb2=new JLabel("端口号:");
//	tf1.setHorizontalAlignment(JTextField.RIGHT);  //右对齐
//	lb1.setBorder(BorderFactory.createLoweredBevelBorder());//标签凹陷效果
	pu.add(lb1);
	pu.add(tf1);
	pu.add(lb2);
	pu.add(tf2);
	
	pd=new JPanel();
	pd.setLayout(new FlowLayout());
	lb3=new JLabel("服务器状态:");
	lb4=new JLabel("未运行");
	lb4.setBorder(BorderFactory.createLoweredBevelBorder());//标签凹陷效果
	lb5=new JLabel("         ");
	button[0]=new JButton(string[0]);
	button[1]=new JButton(string[1]);

	pdw=new JPanel();
	pdc=new JPanel();
	pde=new JPanel();
	pdw.add(lb3);
	pdw.add(lb4);
	pdc.add(lb5);
	pde.add(button[0]);
	pde.add(button[1]);
	pd.add("WEST",pdw);
	pd.add("CENTER",pdc);
	pd.add("EAST",pde);
	button[0].addActionListener(handler);
	button[1].addActionListener(handler);

	pc=new JPanel();
	pc.setBorder(BorderFactory.createEmptyBorder(5,10,10,10));
//	ta1=new JTextArea(" ",10,1);
	ta1 = new JTextArea(){
	   public void append(String str) {
	    	super.append(str);
	    	this.setCaretPosition(getDocument().getLength());
	   }
	 };
	pc.add(ta1);

	pe=new JPanel();
	pw=new JPanel();
//	pe.setBorder(BorderFactory.createEmptyBorder(5,10,10,10));
//	pw.setBorder(BorderFactory.createEmptyBorder(5,10,10,10));

	getContentPane().add("North",pu);
	getContentPane().add("South",pd);
	getContentPane().add("Center",pc);
	getContentPane().add("West",pw);
	getContentPane().add("East",pe);
	this.getContentPane().add(new JScrollPane(ta1),BorderLayout.CENTER);  //添加滚动条

//	this.setCaretPosition(getDocument().getLength());

	setSize(405,350);
	setVisible(true);
	setResizable(false);

   }

/*在textarea里添加信息*/
  public static void printString(String s){
	ta1.append(" "+s+"\n");
  }

/*返回状态信息*/
  public static boolean serverStatus(){
	return statusFlag;
  }

/*返回文件夹信息*/
  public static String getFilePath(){
	String filepath;
	return(filepath=tf1.getText());
  }


/*事件处理程序*/

  class EventHandler implements ActionListener{
     public void actionPerformed(ActionEvent event){

	String sCommand=event.getActionCommand();

  /*当用户按下了'启动服务'键*/
    	if((JButton)event.getSource()==button[0]){
		lb4.setText("运行中");
		if(!statusFlag)
		{
			System.out.println("服务器启动!");
			ta1.append(" 服务器启动!\n");
		}
		statusFlag=true;
     	}

  /*当用户按下了'终止服务'键*/
    	if((JButton)event.getSource()==button[1]){
		lb4.setText("未运行");
		if(statusFlag)
		{
			System.out.println("服务器停止运行");
			ta1.append(" 服务器停止运行 !!!!!\n\n");
		}
		statusFlag=false;
     	}

    }
  }


    public static void main(String args[])
    {
	WebServer myWebServer=new WebServer();
	myWebServer.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

	int i=1, PORT;
	ServerSocket server=null;
	Socket client=null;
     	while(!statusFlag){}

	try 
	{
	   for(;;)
	   {
     	        while(!statusFlag){}

		if((tf2.getText()).length()==0)
		    PORT=8080;
		else
		    PORT=Integer.valueOf(tf2.getText()).intValue();

		server=new ServerSocket(PORT);  
		System.out.println("服务器正监听端口: "+server.getLocalPort());
		ta1.append(" 服务器正监听端口:"+server.getLocalPort()+"....................\n\n");

		for (;;)
		{	
		    if(statusFlag){	
		    	client=server.accept();  //接受客户机的连接请求
			if(statusFlag)
			{
				new ConnectionThread(client,i).start();  
				i++;
			}
		    }
		    else{
//			try{
//				Thread.currentThread().sleep(100);
//		 	}catch(InterruptedException e){}
			break;			
		    }
		}
//		System.out.println("Web Server stoped servering");
//		ta1.append("Web Server stoped servering\n");
	   }
	}
	catch (Exception e) {System.out.println(e);}
      
    }

}


/* ConnnectionThread类完成与一个Web浏览器的通信  */
class ConnectionThread extends Thread
{
	Socket client;  //连接Web浏览器的socket字
	int counter;  //计数器
     	public ConnectionThread(Socket cl,int c) 
	{
		client=cl;
		counter=c;
	}
    public void run()   //线程体
    {
	if(WebServer.serverStatus())
	{
	   try
	   { 
		String destIP=client.getInetAddress().toString();  //客户机IP地址
		int destport=client.getPort();                   //客户机端口号
		System.out.println("Connection "+counter+":connected to "+destIP+" on port "+destport+".");
	WebServer.printString("连接 "+counter+":connected to "+destIP+" on port "+destport+".");
		PrintStream outstream=new PrintStream(client.getOutputStream());
		DataInputStream instream=new DataInputStream(client.getInputStream());
		String inline=instream.readLine();  //读取Web浏览器提交的请求信息
		System.out.println("Received:"+inline);
	WebServer.printString("Received:"+inline);
		if (WebServer.serverStatus()&&getrequest(inline))
		{      //如果是GET请求
			String filename=WebServer.getFilePath().concat(getfilename(inline));
			File file=new File(filename);
			if (WebServer.serverStatus()&&file.exists())
			{  //若文件存在,则将文件送给Web浏览器
				System.out.println(filename+" requested.");
	WebServer.printString(filename+" requested.");
				outstream.println("HTTP/1.0 200 OK");
				outstream.println("MIME_version:1.0");
				outstream.println("Content_Type:text/html");
				int len=(int)file.length();
				outstream.println("Content_Length:"+len);
				outstream.println("");
				sendfile(outstream,file);  //发送文件
				outstream.flush();
			}		
			else
			{  //文件不存在时
				String msg1="<html><head><title>Not Found</title></head><body><h1>Error 404-file not 						found</h1></body></html>";
			System.out.println(filename+" 未找到.");
			WebServer.printString(filename+" 未找到!");
				outstream.println("HTTP/1.0 404 no found");
				outstream.println("Content_Type:text/html");
				outstream.println("Content_Length:"+msg1.length()+2);
				outstream.println("");
				outstream.println(msg1);
				outstream.flush();
			}
		}
		//instream.close();
		//outstream.close();
		long m1=1;    //延时
		while (m1<11100000) {m1++;} 
		client.close();
	    }
	    catch (IOException e)
	    {
		System.out.println("Exception:"+e);
	    }
	}
      }

	/* 获取请求类型是否为“GET” */
	boolean getrequest(String s)
	{  
	   if (s.length()>0)
	   {
		if (s.substring(0,3).equalsIgnoreCase("GET")) return true;
	   }
	   return false;
	}

	/* 获取要访问的文件名 */
	String getfilename(String s)
	{
		String f=s.substring(s.indexOf(' ')+1);
		f=f.substring(0,f.indexOf(' '));
		try
		{
			if (f.charAt(0)=='/')
			f=f.substring(1);
		}
		catch (StringIndexOutOfBoundsException e)
		{
			System.out.println("Exception:"+e);
		}
		if (f.equals("")) f="index.html";
		return f;
	}

	/*把指定文件发送给Web浏览器 */
	void sendfile(PrintStream outs,File file)
	{
	    try
	    {
		DataInputStream in=new DataInputStream(new FileInputStream(file));
		int len=(int)file.length();
		byte buf[]=new byte[len];
		in.readFully(buf);
		outs.write(buf,0,len);
/*
		DataOutputStream ou=new DataOutputStream(System.out);
		ou.write(buf,0,len);
*/
		outs.flush();
		in.close();
	    }
	    catch (Exception e)
	    {
		System.out.println("Error retrieving file.");
		System.exit(1);
	    }
	}


}

⌨️ 快捷键说明

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