1. 程式人生 > >Java與PHPweb開發比較

Java與PHPweb開發比較

一直很想寫一篇這樣的文章。Java和PHP作為web開發的2個主流語言,他們之間有什麼不同呢?在專案開發時,我們應該怎麼去做選擇。

1.執行方式

1.1 PHP的執行方式

客戶端傳送http請求到nginx,nginx通過fastcgi與php-fpm程序通訊。php-fpm執行完成後把結果返回給nginx,最終輸出到客戶端瀏覽器。

參考fastcgi:https://baike.baidu.com/item/fastcgi/10880685?fr=aladdin

1.2 Java的執行方式

Servlet容器,比如Tomcat和Jetty等。一個Servlet容器可以執行多個Servlet例項。

當客戶端第一次請求某個Servlet時,Servlet容器將會根據web.xml配置檔案例項化這個Servlet類,此時它貯存於記憶體中。當有新的客戶端請求該Servlet時,一般不會再例項化該Servlet類,也就是有多個執行緒在使用這個例項。每一個請求都是一個執行緒,而不是程序,因此,Servlet對請求的處理的效能非常高。

參考:https://www.ibm.com/developerworks/cn/java/j-lo-servlet/

總結:PHP是以多程序的方式執行,並且使用fastcgi與web通訊;Java需要依賴Tomcat等Servlet容器,以多執行緒的方式執行。

2.接受請求,GET/POST引數處理

  JAVA PHP
GET

均是通過HttpServletRequest.getParameter方法獲取

GET/POST根據方法名定義doGet/doPost,如果是spring,使用RequestMapping定義

使用$_GET全域性變數獲取
POST 使用$_POST全域性變數獲取
原始請求體 BufferedReader reader = new BufferedReader(new InputStreamReader(request.getInputStream()));
String body = reader.readLine();
file_get_contents("php://input");
請求來源IP HttpServletRequest.getRemoteAddr方法 $_SERVER["REMOTE_ADDR"]

3.響應請求

  JAVA PHP
自定義狀態碼 HttpServletResponse.setStatus(404); header("HTTP/1.1 404 Not Found"); 
重定向 response.sendRedirect("/hello"); header("location: [url]"); 

4.Cookies & Session

  JAVA PHP
Session儲存

預設儲存在heap中,建立的cookies預設名稱是JSESSIOINID。servlet.destory()方法會導致session丟失。

預設使用檔案方式,儲存在/tmp目錄下,建立的cookies預設名稱是PHPSESSID。

重啟php-fpm並不會丟失資料。

呼叫方式

讀取:HttpServletRequest.getSession().getValue(name);

寫入:

HttpServletRequest.getSession().setAttribute(name, value);

讀取:$_SESSION['key']

寫入:$_SESSION['key'] = mixed