?? webserver.java
字號(hào):
//WebServer.java 用JAVA編寫Web服務(wù)器
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={"啟動(dòng)服務(wù)","終止服務(wù)"};
JButton[] button=new JButton[2];
JLabel lb1,lb2,lb3,lb4,lb5;
public WebServer(){
super("WEB服務(wù)器");
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("設(shè)置主目錄:");
lb2=new JLabel("端口號(hào):");
// tf1.setHorizontalAlignment(JTextField.RIGHT); //右對(duì)齊
// lb1.setBorder(BorderFactory.createLoweredBevelBorder());//標(biāo)簽凹陷效果
pu.add(lb1);
pu.add(tf1);
pu.add(lb2);
pu.add(tf2);
pd=new JPanel();
pd.setLayout(new FlowLayout());
lb3=new JLabel("服務(wù)器狀態(tài):");
lb4=new JLabel("未運(yùn)行");
lb4.setBorder(BorderFactory.createLoweredBevelBorder());//標(biāo)簽凹陷效果
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); //添加滾動(dòng)條
// this.setCaretPosition(getDocument().getLength());
setSize(405,350);
setVisible(true);
setResizable(false);
}
/*在textarea里添加信息*/
public static void printString(String s){
ta1.append(" "+s+"\n");
}
/*返回狀態(tài)信息*/
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();
/*當(dāng)用戶按下了'啟動(dòng)服務(wù)'鍵*/
if((JButton)event.getSource()==button[0]){
lb4.setText("運(yùn)行中");
if(!statusFlag)
{
System.out.println("服務(wù)器啟動(dòng)!");
ta1.append(" 服務(wù)器啟動(dòng)!\n");
}
statusFlag=true;
}
/*當(dāng)用戶按下了'終止服務(wù)'鍵*/
if((JButton)event.getSource()==button[1]){
lb4.setText("未運(yùn)行");
if(statusFlag)
{
System.out.println("服務(wù)器停止運(yùn)行");
ta1.append(" 服務(wù)器停止運(yùn)行 !!!!!\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("服務(wù)器正監(jiān)聽(tīng)端口: "+server.getLocalPort());
ta1.append(" 服務(wù)器正監(jiān)聽(tīng)端口:"+server.getLocalPort()+"....................\n\n");
for (;;)
{
if(statusFlag){
client=server.accept(); //接受客戶機(jī)的連接請(qǐng)求
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類完成與一個(gè)Web瀏覽器的通信 */
class ConnectionThread extends Thread
{
Socket client; //連接Web瀏覽器的socket字
int counter; //計(jì)數(shù)器
public ConnectionThread(Socket cl,int c)
{
client=cl;
counter=c;
}
public void run() //線程體
{
if(WebServer.serverStatus())
{
try
{
String destIP=client.getInetAddress().toString(); //客戶機(jī)IP地址
int destport=client.getPort(); //客戶機(jī)端口號(hào)
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瀏覽器提交的請(qǐng)求信息
System.out.println("Received:"+inline);
WebServer.printString("Received:"+inline);
if (WebServer.serverStatus()&&getrequest(inline))
{ //如果是GET請(qǐng)求
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); //發(fā)送文件
outstream.flush();
}
else
{ //文件不存在時(shí)
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; //延時(shí)
while (m1<11100000) {m1++;}
client.close();
}
catch (IOException e)
{
System.out.println("Exception:"+e);
}
}
}
/* 獲取請(qǐng)求類型是否為“GET” */
boolean getrequest(String s)
{
if (s.length()>0)
{
if (s.substring(0,3).equalsIgnoreCase("GET")) return true;
}
return false;
}
/* 獲取要訪問(wèn)的文件名 */
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;
}
/*把指定文件發(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);
}
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -