serverjava
① 我想用java寫一個簡單的web server,應該怎麼寫呀
我原來寫過一個很簡單的,可以指定你存放網頁的文件夾,可以指定允許訪問的IP,給你源碼看看吧。public class WebServer {
static Button btReloadIP=new Button("更新合法IP列表");
static Button btAllow=new Button("允許此IP");
static Button btRepel=new Button("拒絕此IP");
static JTextField tfNewIP=new JTextField(20);
static JPanel pane=new JPanel();
static JTextField tfState=new JTextField(25);
static TextField tfURL=new TextField("G:\\webServer2\\",28);
static TextField tfPort=new TextField("10288",3);
static Button btStart=new Button("啟動伺服器");
static Button btStop=new Button("停止伺服器");
private static int IPnum=0;
public static boolean IPadmin=false;
static boolean click=false;
private static String url;
private static String[] checkIP=new String[255];
private static Thread serverThread=null;
private static Socket connectionSocket=null;
private static ServerSocket listenSocket=null;
public WebServer() throws IOException{
serverThread=new Thread(new Runnable(){
public void run(){
try {
listenSocket = new ServerSocket(Integer.parseInt(tfPort.getText()));
} catch (IOException e) { }
while(true){
try {
connectionSocket=listenSocket.accept();
@SuppressWarnings("unused")
webClient client=new webClient(connectionSocket);
} catch (IOException e) {
}
}
}
});
}
public static void main(String args[])throws Exception{
GUI();
}
public static void GUI(){
JFrame f=new JFrame("小白兔Web伺服器(BY 丁尋)");
f.setSize(300,200);
f.setLocation(500, 300);
f.getContentPane().add(pane,BorderLayout.CENTER);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
//不可以變大變小
f.setResizable(false);
pane.add(new JLabel("埠號:"));
pane.add(tfPort);
pane.add(btStart);
pane.add(btStop);
pane.add(new JLabel("配置路徑"));
pane.add(tfURL);
pane.add(tfState);
pane.add(new JLabel("新IP請求"));
pane.add(tfNewIP);
pane.add(btAllow);
pane.add(btRepel);
pane.add(btReloadIP); btStart.addActionListener(new Listener());
btStop.addActionListener(new Listener());
btAllow.addActionListener(new Listener());
btRepel.addActionListener(new Listener());
btReloadIP.addActionListener(new Listener());
}
static class Listener implements ActionListener {
@SuppressWarnings("deprecation")
public void actionPerformed(ActionEvent event) {
if(event.getActionCommand()=="啟動伺服器"){
try {
url=tfURL.getText();
readIP();
tfState.setText("伺服器已經啟動......地址:"
+InetAddress.getLocalHost().toString());
} catch (Exception e) {
e.printStackTrace();
} try {
new WebServer();
} catch (IOException e) {
e.printStackTrace();
} serverThread.start(); btStart.setEnabled(false);
tfPort.setEditable(false);
btStop.setEnabled(true);
tfURL.setEditable(false);
btReloadIP.setEnabled(true);
}
if(event.getActionCommand()=="停止伺服器"){
serverThread.stop();
tfState.setText("伺服器已經停止");
btStart.setEnabled(true);
tfPort.setEditable(true);
btStop.setEnabled(false);
tfURL.setEditable(true);
btReloadIP.setEnabled(false);
}
if(event.getActionCommand()=="允許此IP"){
IPadmin=true;
//serverThread.start();
click=true;
btAllow.setEnabled(false);
btRepel.setEnabled(false);
tfNewIP.setText(null);
}
if(event.getActionCommand()=="拒絕此IP"){
click=true;
IPadmin=false;
//serverThread.start();
btAllow.setEnabled(false);
btRepel.setEnabled(false);
tfNewIP.setText(null);
}
if(event.getActionCommand()=="更新合法IP列表"){
try {
readIP();
} catch (IOException e) {
// e.printStackTrace();
}
}
}
}
public static void readIP() throws IOException{
int i=0;
byte[] ips = new byte[65535];
File IPfile=new File(url+"checkIP.txt");
FileInputStream fileReader=new FileInputStream(IPfile);
fileReader.read(ips);
fileReader.close();
String strip=new String(ips);
StringTokenizer getIP=new StringTokenizer(strip,System.getProperty("line.separator"));
for(;;){
if(getIP.hasMoreTokens()){
checkIP[i]=getIP.nextToken();
System.out.println(checkIP[i]);
i++;
}
else{break;}
}
IPnum=i;
}
public static void disconnect(webClient c){
try {
//c.stop();
c.socket.close();
c.socket=null;
c=null; } catch (IOException e) {
e.printStackTrace();
}
//
}
class webClient extends Thread{
boolean check=true;
boolean send=false;
Socket socket;
BufferedReader inFromClient=null;
DataOutputStream outToClient=null;
String fileName;
String requestMessageLine;
StringTokenizer tokenizedLine=null;
FileInputStream inFile=null;
byte[] fileInBytes=null;
int numOfBytes=0;
File afile=new File(url+"log.html");
byte[] b;
public webClient(Socket s) throws IOException{
FileOutputStream out=new FileOutputStream(afile,true);
StringBuffer str=new StringBuffer();
SimpleDateFormat formatter=new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
String time=formatter.format(new Date());
socket=s;
str.append(time+" Client_IP:"+socket.getInetAddress().toString()+
" Client_Port:"+socket.getPort()+"<br>"+
System.getProperty("line.separator")
);
b=(new String(str)).getBytes();
System.err.println(new String(str));
out.write(b);
out.close();
inFromClient=new BufferedReader(new
InputStreamReader(socket.getInputStream()));
outToClient=new DataOutputStream(socket.getOutputStream());
if(!checkIP(socket)){
String strWait="<html>" +
"<title>等待驗證</title>" +
"<body>正在等待管理員驗證您的IP是否合法,請稍候......<br><br>" +
"(如果頁面沒有自動跳轉,請每5秒鍾刷新一次," +
"以判斷管理員是否已經允許您進入)</body>" +
"</html>";
byte[] waiting=strWait.getBytes();
outToClient.writeBytes("HTTP/1.1 200 Document Follows\r\n");
outToClient.writeBytes("Content-Type: text/html\r\n");
outToClient.writeBytes("Content-Length: "+waiting.length+"\r\n");
outToClient.writeBytes("\r\n");
outToClient.write(waiting,0,waiting.length);
if(!admin()){
return;
}
WebServer.IPadmin=false;
}
this.start(); }
public void receive() throws IOException{
while(socket!=null){
requestMessageLine=inFromClient.readLine();
if(requestMessageLine.length()==0){break;}
System.out.println(requestMessageLine);
tokenizedLine=new StringTokenizer(requestMessageLine);
if(tokenizedLine.hasMoreTokens()){
String strhead=tokenizedLine.nextToken();
if(strhead.equals("GET")){
send=true;
fileName=tokenizedLine.nextToken();
if(fileName.equals("/")){
fileName="index.html";
}
else if(fileName.startsWith("/")){
fileName=fileName.substring(1);
fileName=fileName.replace("%5C", "/");
fileName=fileName.replace("%20", " ");
//如果是文件 ,不要check
check=false;
}
}//endnexttoken
if(check){
if(strhead.equals("User-Agent:")){
if(requestMessageLine.contains("Firefox/3")){
System.err.println("true");
}
else{
System.err.println("false");
fileName="ERROR.html";
send=true;
}
}
}
//....
}//endhastoken
}//endwhile
if(send){
readFile();
send(fileInBytes, numOfBytes);
} }
public void send(byte[] fileInBytes,int numOfBytes) throws IOException{
outToClient.writeBytes("HTTP/1.1 200 Document Follows\r\n"); if(fileName.endsWith(".jpg")){
outToClient.writeBytes("Content-Type: image/jpg\r\n");
}
else if(fileName.endsWith(".gif")){
outToClient.writeBytes("Content-Type: image/gif\r\n");
}
else if(fileName.endsWith(".wmv")){
outToClient.writeBytes("Content-Type: video/x-ms-wmv\r\n");
}
else if(fileName.endsWith(".avi")){
outToClient.writeBytes("Content-Type: video/avi\r\n");
}
else if(fileName.endsWith(".html")||fileName.endsWith(".htm")){
outToClient.writeBytes("Content-Type: text/html\r\n");
}
outToClient.writeBytes("Content-Length: "+numOfBytes+"\r\n"); outToClient.writeBytes("\r\n");
outToClient.write(fileInBytes,0,numOfBytes);
}
//得到文件
public void readFile() throws IOException{
File file=new File(url+fileName);
b=(" Client_Request:"+fileName+"<br>"+
System.getProperty("line.separator")).getBytes();
FileOutputStream out=new FileOutputStream(afile,true);
out.write(b);
out.close();
numOfBytes=(int)file.length();
inFile=new FileInputStream(url+fileName);
fileInBytes=new byte[numOfBytes];
inFile.read(fileInBytes);
inFile.close(); }
public boolean checkIP(Socket skt){
for(int i=0;i<WebServer.IPnum;i++){
if(skt.getInetAddress().toString().equals(checkIP[i])){
return true;
}
}
return false;
}
public boolean admin() throws IOException{
WebServer.tfNewIP.setText("IP:"+socket.getInetAddress().toString()+
" PORT:"+socket.getPort());
WebServer.btAllow.setEnabled(true);
WebServer.btRepel.setEnabled(true);
while(!click){}
click=false;
if(WebServer.IPadmin){
File IPFile=new File(url+"checkIP.txt");
FileOutputStream appIP=new FileOutputStream(IPFile,true);
byte[] ips=(socket.getInetAddress().toString()+
System.getProperty("line.separator")).getBytes();
appIP.write(ips);
appIP.close();
//WebServer.readIP();
WebServer.checkIP[IPnum]=socket.getInetAddress().toString();
WebServer.IPnum++;
return true;
}
else{
WebServer.disconnect(this);
return false;
}
}
public void run(){
try {
receive();
} catch (IOException e) {
}
WebServer.disconnect(this);
}
}}
② 什麼是java serverlet
都是來用java語言編寫的小程序。自
servlet可以被認為是伺服器端的applet。servlet被Web伺服器載入和執行,就如同applet被瀏覽器載入和執行一樣。
beans可以被其他的java程序調用完成特定功能或者信息存儲。
③ 學java能用sql server嗎它跟java聯系緊密嗎
java是編程語言,可以調用資料庫。
sql server是資料庫。和java不沾邊的。
資料庫應該都了解oracle ,sqlServer,mySql,db2等
其中 oracle 和 mysql 在中國用得相對較多
因為mysql 不要錢。oracle 和 sqlServer 都是要錢的。。所以大多數會選oracle雖然比sqlServer貴。。但用錢了 當然用更好的 也不在乎那點了
學習 階段 sqlServer 和 mysql 應該會用得比較多。
反正都得學,都會用到 。。就這樣
④ 怎麼在SystemServer.java裡面去掉一些server
右鍵擊點項目名,彈出菜單選擇Properties,彈出窗口左側選擇"Java Build Path",右側選擇"Libraries"標簽頁,
添加J2EE5 libraries:點擊"Add Library.."按鈕,彈出窗口選擇"MyEclipse Libraries",點擊"next"按鈕,選擇J2EE5 libraries,點"finish"按鈕。
添加JRE System Library:點擊"Add Library.."按鈕,彈出窗口選擇"JRE System Library",點擊"next"按鈕,選擇第一個為默認的JRE,點"finish"按鈕。最後點擊"ok",添加完成。
⑤ 用java編寫Client和Server程序,實現Client和Server的數據通信。
服務端代碼:
importjava.io.IOException;
importjava.io.InputStream;
importjava.net.InetAddress;
importjava.net.ServerSocket;
importjava.net.Socket;
importjava.net.UnknownHostException;
publicclassServer{
publicstaticvoidmain(String[]args)throwsUnknownHostException,IOException{
ServerSocketserver=newServerSocket(2408,5,InetAddress.getByName("localhost"));
while(true){
//等待客戶端的連接
SocketclientSocket=server.accept();
//為每個連接的客戶端分配一個線程,與客戶端通信
newThread(newClientThread(clientSocket)).start();
}
}
}
{
privateSocketclientSocket;
publicClientThread(Socketsocket){
this.clientSocket=socket;
}
@Override
publicvoidrun(){
try{
InputStreaminput=clientSocket.getInputStream();
byte[]buffer=newbyte[1024];
booleanexit=false;
while(!exit){
intlen=input.read(buffer);
Stringmessage=newString(buffer,0,len);
if("bye".equals(message)){
exit=true;
}
System.out.println(clientSocket.getRemoteSocketAddress()+":"+message);
}
clientSocket.close();
}catch(IOExceptione){
e.printStackTrace();
}
}
}
客戶端代碼:
importjava.io.IOException;
importjava.io.OutputStream;
importjava.net.InetAddress;
importjava.net.Socket;
importjava.net.UnknownHostException;
importjava.util.Scanner;
publicclassClient{
publicstaticvoidmain(String[]args)throwsUnknownHostException,IOException{
Scannerscanner=newScanner(System.in);
Socketsocket=newSocket(InetAddress.getByName("localhost"),2408);
OutputStreamoutput=socket.getOutputStream();
booleanexit=false;
while(!exit){
Stringmessage=scanner.nextLine();
if("bye".equals(message)){
exit=true;
}
byte[]data=message.getBytes();
output.write(data);
output.flush();
}
socket.close();
}
}
⑥ 編寫代碼,使用java ServerSocket創建伺服器端ServerSocket的過程。
伺服器端代碼:
importjava.io.IOException;
importjava.io.InputStream;
importjava.net.ServerSocket;
importjava.net.Socket;
publicclassServer{
publicvoidserver(){
try{
ServerSocketserverSocket=newServerSocket(8888);//建立伺服器端的套接字,並監聽8888埠
Socketsocket=serverSocket.accept();//如果有請求到達,則接受請求,並建立一個新的套接字
InputStreamis=socket.getInputStream();//獲取此套接字上的輸入流,用於接收消息
//接下來就是獲取套接字里的位元組流,並轉化為字元串
byte[]bytes=newbyte[1024];
intcount;
StringBuildersb=newStringBuilder();
while((count=is.read(bytes))!=-1){
sb.append(newString(bytes,0,count));
}
is.close();
System.out.println(sb.toString());
}catch(IOExceptione){
e.printStackTrace();
}
}
publicstaticvoidmain(String[]args){
Servers=newServer();
s.server();
}
}
另附客戶端:
importjava.io.IOException;
importjava.io.OutputStream;
importjava.net.InetSocketAddress;
importjava.net.Socket;
publicclassClient{
publicvoidclient(){
try{
Socketsocket=newSocket();//建立套接字
socket.connect(newInetSocketAddress("127.0.0.1",8888));//連接到指定IP地址的主機,並指定埠號接收消息
OutputStreamos=socket.getOutputStream();//獲取此連接上的輸出流,用於發送數據
os.write(newString("Hello,world!").getBytes());//將字元串轉化為位元組數組寫入輸出流
os.flush();//刷新此輸出流,將位元組流寫入它們預期的目標
os.close();//關閉連接,否則會報連接重置異常
}catch(IOExceptione){
e.printStackTrace();
}
}
publicstaticvoidmain(String[]args){
Clientc=newClient();
c.client();
}
}
⑦ java:如何讓server.java在學校伺服器上運行
學校的伺服器=====> 它也是台電腦!!!!!!
和你的電腦沒什麼區別,你本機怎麼做,就在伺服器上怎麼做,只要你能有許可權去操作伺服器。
⑧ 怎樣用java寫server端
1.了解一下什麼是HTTP協議,什麼是GET請求,什麼是POST請求。
學會使用一些工具查看HTTP請求:
Firefox的firebug
Chrome的F12
使用curl命令發請求和調試
2.Java相關
學習一下Java的ServletAPI
war工程的結構,比如WEB-INF是干什麼用的,如何寫web.xml
如何在tomcat上部署war
如何使用Maven或eclipse管理war工程
⑨ 命令java -server什麼意思
JVM的參數配置
分別是 伺服器模式 和客戶端模式
因為JVM裡面很多機制,在這兩種模式下是不同的,
比如垃圾回收機制,客戶端模式下,要求的是用戶體驗流程,無明顯滯留感(就是沒有卡的現象)
而服務端,要求的是吞吐量,就是單位時間內執行的代碼要求越多越好,
來個例子:
執行1萬次代碼,一種垃圾回收策略是每隔1000行停頓一次用來做垃圾回收,回收時間10毫秒,那麼總共耗停頓時間是100毫秒(10*10)
而另一種是,每隔2000行停頓一次用作垃圾回收,回收時間15毫秒,總共停頓時間耗時是75毫秒(15*5)
這個例子中,後一種方案的吞吐量高,而前一種法案的停頓時間短。
當然,server 和 client 還有其他地方的區別,比如,代碼優化策略,等等
⑩ 請問下Java中什麼Dao層,Server層.....,有大神能給我講一下互相之間的聯系還有作用嗎,詳細點吧,我新手
bean層:封裝所有的類;
層:對資料庫操作;
service層:業務處理並調用層方法;
action層:與頁面交互並調用service層方法