㈠ Java Web伺服器
我現寫了一個,可以訪問到靜態資源。你看情況多給點分吧
另外eclipse還沒有5.5,5.5的貌似是myEclipse吧
其中port指埠,默認是地址是http://127.0.0.1:8088/
其中basePath指資源根路徑,默認是d:
可以通過命令行參數對其進行賦值
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.URLDecoder;
public class SimpleHttpServer {
private static int port = 8088;
private static String basePath = "D:/";
public static void main(String[] args) {
if (args.length >= 1) {
basePath = args[0];
}
if (args.length >= 2) {
port = Integer.parseInt(args[1]);
}
System.out.println("server starting:");
System.out.println("base path:" + basePath);
System.out.println("Listening at:" + port);
startServer();
System.out.println("server started succesfully");
}
private static void startServer() {
new Thread() {
public void run() {
try {
ServerSocket ss = new ServerSocket(port);
while (true) {
final Socket s = ss.accept();
new Thread() {
public void run() {
try {
OutputStream socketOs = s.getOutputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
String line;
String headerLine = null;
while ((line = br.readLine()) != null) {
if (headerLine == null) {
headerLine = line;
}
if ("".equals(line)) {
break;
}
}
String target = headerLine.replaceAll("^.+ (.+) HTTP/.+$", "$1");
String queryString;
String[] tmp = target.split("\\?");
target = URLDecoder.decode(tmp[0], "utf-8");
target = target.endsWith("/") ? target.substring(0, target.length() - 1) : target;
if (tmp.length > 1) {
queryString = tmp[1];
} else {
queryString = "";
}
String filePath = basePath + target;
File f = new File(filePath);
if (!f.exists()) {
StringBuffer content = new StringBuffer();
content.append("<html><head><title>Resource Not Found</title></head><body><h1>The requested resource ")
.append(target).append(" is not found.</h1></body></html>");
StringBuffer toWrite = new StringBuffer();
toWrite.append("HTTP/1.1 404 Not Found\r\nContent-Length:").append("" + content.length()).append("\r\n\r\n")
.append(content);
socketOs.write(toWrite.toString().getBytes());
} else if (f.isDirectory()) {
StringBuffer content = new StringBuffer();
content.append("<html><head><title>").append(target).append(
"</title></head><body><table border='1' width='100%'>");
content.append("<tr><th align='left' width='40px'>").append("Path").append("</th><td>").append(target.length()>0?target:"/")
.append("</td></tr>");
content.append("<tr><th align='left'>Type</th><th align='left'>Name</th></tr>");
if (!basePath.equals(filePath)) {
content.append("<tr><td>Directory</td><td>").append("<a href='").append(
target.substring(0, target.lastIndexOf("/") + 1)).append("'>..</a>").append("</td></tr>");
}
File[] files = f.listFiles();
for (File file : files) {
content.append("<tr><td>");
if (file.isFile()) {
content.append("File</td><td>");
} else if (file.isDirectory()) {
content.append("Directory</td><td>");
}
content.append("<a href=\"").append(target);
if (!(target.endsWith("/") || target.endsWith("\\"))) {
content.append("/");
}
content.append(file.getName()).append("\">").append(file.getName()).append("</a></td></tr>");
}
content.append("</table></body></html>");
StringBuffer sb = new StringBuffer();
sb.append("HTTP/1.1 200 OK\r\nCache-Control: max-age-0\r\n");
sb.append("Content-Length:").append("" + content.length()).append("\r\n\r\n");
sb.append(content);
socketOs.write(sb.toString().getBytes());
} else if (f.isFile()) {
socketOs.write(("HTTP/1.1 200 OK\r\nCache-Control: max-age-0\r\nContent-Length:" + f.length() + "\r\n\r\n")
.getBytes());
byte[] buffer = new byte[1024];
FileInputStream fis = new FileInputStream(f);
int cnt = 0;
while ((cnt = fis.read(buffer)) >= 0) {
socketOs.write(buffer, 0, cnt);
}
fis.close();
}
socketOs.close();
} catch (Exception e) {
try {
s.getOutputStream().write("HTTP/1.1 500 Error\r\n".getBytes());
ByteArrayOutputStream byteos = new ByteArrayOutputStream();
PrintStream printStream = new PrintStream(byteos);
printStream
.write("<html><head><title>Error 500</title></head><body><h1>Error 500</h1><pre style='font-size:15'>"
.getBytes());
e.printStackTrace(printStream);
printStream.write("</pre><body></html>".getBytes());
byteos.close();
byte[] byteArray = byteos.toByteArray();
s.getOutputStream().write(("Content-Length:" + byteArray.length + "\r\n\r\n").getBytes());
s.getOutputStream().write(byteArray);
s.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
}.start();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}.start();
}
}
㈡ 如何用Java實現Web伺服器
如何用Java實現Web伺服器 一、HTTP協議的作用原理
WWW是以Internet作為傳輸媒介的一個應用系統,WWW網上最基本的傳輸單位是Web網頁。WWW的工作基於客戶機/伺服器計算模型,由Web 瀏覽器(客戶機)和Web伺服器(伺服器)構成,兩者之間採用超文本傳送協議(HTTP)進行通信。HTTP協議是基於TCP/IP協議之上的協議,是Web瀏覽器和Web伺服器之間的應用層協議,是通用的、無狀態的、面向對象的協議。HTTP協議的作用原理包括四個步驟:
(1) 連接:Web瀏覽器與Web伺服器建立連接,打開一個稱為socket(套接字)的虛擬文件,此文件的建立標志著連接建立成功。
(2) 請求:Web瀏覽器通過socket向Web伺服器提交請求。HTTP的請求一般是GET或POST命令(POST用於FORM參數的傳遞)。GET命令的格式為:
GET 路徑/文件名 HTTP/1.0
文件名指出所訪問的文件,HTTP/1.0指出Web瀏覽器使用的HTTP版本。
(3) 應答:Web瀏覽器提交請求後,通過HTTP協議傳送給Web伺服器。Web伺服器接到後,進行事務處理,處理結果又通過HTTP傳回給Web瀏覽器,從而在Web瀏覽器上顯示出所請求的頁面。
㈢ 如何搭建java web伺服器
1.由於伺服器配置比較低綜合考慮,選擇ubuntu系統進行搭建
並通過XFTP或上述的上傳文件方法,上傳至apache-tomcat-7.0.69/webapps中
㈣ Java:除了tomcat以外,還有哪些常用的Web伺服器呢
1、襪讓或weblogic
WebLogic是美國bea公司出品的一個application server確切的說是一個基於j2ee架構的中間件。BEA WebLogic是用於開發、集成、部署和管理大型分布式Web應用、網路應用和資料庫應用的Java應用伺服器。將Java的動態功能和Java Enterprise標準的安全性引入大型網路應用的開發、集成、部署和管理之中。
2、webSphere
WebSphere是 IBM 的集成軟體平台。它包含了編寫、運行和監視全天候的工業強度的隨需應變 Web 應用程序和跨平台、跨產品解決方案所需要的整個中間件基礎設施。
如伺服器、服務和工具。WebSphere 提供了可靠、靈活和健壯的集成軟體。
3、JBoss
JBoss是一個管理EJB的容器和伺服器,支持EJB 1.1、EJB 2.0和EJB3.0的規范。但JBoss核心服務不包括支持servlet/JSP的WEB容器,一般與Tomcat或Jetty綁定使用。2006年,Jboss公司被Redhat公司收購。
4、 Apache
Apache源於NCSAhttpd伺服器,經過多次修改,成為世界上最流行的Web伺服器軟體之一。
Apache是自由軟體,所以不斷有人來為它開發新的功能、新的特性、修改原來的缺陷。Apache的特點是簡單、速度快、性能穩定,並可做代理伺服器來使用。
本來它只用於小型或試驗Internet網路,後來逐步擴充到各種Unix系統中,尤其對Linux的支持相當完美。
Apache是以進程為基礎的結構,進程要比線程消耗更多的系統開支,不太適合於多滑拆處理器環境,因此,在一個Apache Web站點擴容時,通常是增加伺服器或擴充群集節點而不是增加處理器。
到目前為止Apache仍然是世界上用的最多的Web伺服器,世界上很多著名的網站都是Apache的產物,它的成功之處主要在於它的源代碼開放、有一支開放的開發隊伍、支持跨平台的應用(可以運行在幾乎所有的Unix、Windows、Linux系統平台上)以及它的可移植性等方面。
5、 IIS
Microsoft的Web伺服器產品為InternetInformation Server (IIS), IIS 是允許在公告伍共Intranet或Internet上發布信息的Web伺服器。
IIS是目前最流行的Web伺服器產品之一,很多著名的網站都是建立在IIS的平台上。IIS提供了一個圖形界面的管理工具,稱為 Internet服務管理器,可用於監視配置和控制Internet服務。
IIS是一種Web服務組件,其中包括Web伺服器、FTP伺服器、NNTP伺服器和SMTP伺服器,分別用於網頁瀏覽、文件傳輸、新聞服務和郵件發送等方面,它使得在網路(包括互聯網和區域網)上發布信息成了一件很容易的事。
它提供ISAPI(IntranetServer API)作為擴展Web伺服器功能的編程介面;同時它還提供一個Internet資料庫連接器,可以實現對資料庫的查詢和更新。
㈤ Java Web 伺服器的消息推送 幾種方案
Java Web 伺服器的消息推送有以下幾種方案:1. 輪詢:前端使用ajax不停的發起請求獲取想要的數據(最簡單也是最容易耗盡伺服器資源)。
2. 長連接:HTTP長連接,客戶端向服務端發起請求,服務端等有數據了才response,否則一直持有該連接Cometgithub: comet4j 項目,可以直接下載配置jar到tomcat下使用。
3、使用xmpp協議的一種技術,能夠做到js中調用伺服器的Java方法。
消息推送建議用專業的推送平台,例如:極光。深圳市和訊華谷信息技術有限公司創立於2011年,其團隊核心成員來自騰訊、摩根士丹利、豆瓣、Teradata和中國移動等公司。公司總部位於深圳,在北京、上海、廣州、成都均設有辦公室。
㈥ java Socket編程實現的最簡單的多線程Web伺服器
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class Test {
public static void main(String[] args) throws Exception {
ServerSocket server = new ServerSocket(888);
while(true) {
Socket s = server.accept();
Processer p = new Processer(s);
Thread t = new Thread(p);
t.start();
}
}
}
class Processer implements Runnable {
private Socket socket;
public Processer(Socket s) {
// TODO Auto-generated constructor stub
this.socket = s;
}
@Override
public void run() {
try {
PrintWriter out=new PrintWriter(socket.getOutputStream(),true);
out.println("HTTP/1.0 200 OK");
out.println("Content-Type:text/html;charset=utf-8");
out.println();
out.println("<h1> Web伺服器測試成功!</h1>");
out.close();
} catch(Exception ex) {
ex.printStackTrace();
} finally {
try {
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
㈦ 北大青鳥java培訓:web伺服器類型介紹
web應用的運營都是基於web伺服器的存在才能實現的。
今天我們就一起來了解一下,目前比較常見的一些web伺服器都有哪些類型。
1、Tomcat伺服器目前非常流行的Tomcat伺服器是Apache-Jarkarta開源項目中的一個子項目,是一個小型、輕量級的支持JSP和Servlet技術的Web伺服器,也是初學者學習開發JSP應用的選。
2、Resin伺服器Resin是Caucho公司的產品,是一個非常流行的支持Servlet和JSP的伺服器,速度非常快。
Resin本身包含了一個支持HTML的Web伺服器,這使它不僅可以顯示動態內容,而且顯示靜態內容的能力也毫不遜色,因此許多網站都是使用Resin伺服器構建3、JBoss伺服器基塵JBoss是一個種遵從JavaEE規范的、開放源代碼的、純Java的EJB伺服器,對於J2EE有很好的支持。
JBoss採用JMLAPI實現軟體模塊的集成與管理,其核心服務又是提供EJB伺服器,不包含Servlet和JSP的Web容器,不過它可以和Tomcat完美結合4、WebSphere服褲慧務器WebSphere是IBM公司的產品,可進一步細分為WebSpherePerformancePack、CacheManager和WebSphereApplicationServer等系列,其中WebSphereApplicationServer是基於Java的應用環境,可以運行於SunSolaris、WindowsNT等多種操作系統平台,用於建立、部署和管理Internet和IntranetWeb應用程序。
5、WebLogic伺服器WebLogic是BEA公司的產品(現在已經被Oracle收購),可進一步細分為WebLogicServer、WebLogicEnterprise和WebLogicPortal等系列,其中WebLogicServer的功能特別強大。
WebLogic支持企業級的、多層次的和完全分布式的Web應用,並且伺服器的配置簡單、界面友好。
IT培訓http://www.kmbdqn.cn/認為對於那些正在尋求能夠提供Java平台所擁有搏純禪的一切應用伺服器的用戶來說,WebLogic是一個十分理想的選擇。
㈧ 了解Web伺服器的種類有哪些嗎各自有哪些優缺點
現在的Web伺服器種類繁多,大家在做項目的時候可以根據自己的需求靈活選擇。下面和大家分享一下有哪些Web伺服器,以及它們的優缺點。
操作方法
01街頭流氓
Apache又稱httpd server,是目前應用最廣泛的web伺服器,應用於各種平台。當Apache首次推出時,它有許多缺陷。現在已經修復完善了。如果你是一名web伺服器研究人員,邊肖建議你必須學會使用Apache。
優點:緊湊、靈活、可擴展、穩定。
缺點:軟體是開源的,所以很多漏洞可能很容易被發現。
08碼頭
Jetty是一個專用於Java Web的伺服器。它用於運行Servlet程序,是眾多伺服器中最受限制的。邊肖不建議你掌握這個伺服器。
優點:內容簡單,容易掌握。