Java與PHPweb開發比較
發表時(shí)間:2018-11-1
發布人(rén):融晨科技
浏覽次數:39
一直很想寫一篇這(zhè)樣的(de)文章。Java和(hé / huò)PHP作爲(wéi / wèi)web開發的(de)2個(gè)主流語言,他(tā)們之(zhī)間有什麽不(bù)同呢?在(zài)項目開發時(shí),我們應該怎麽去做選擇。
1.運行方式
1.1 PHP的(de)運行方式
客戶端發送http請求到(dào)nginx,nginx通過fastcgi與php-fpm進程通信。php-fpm執行完成後把結果返回給nginx,最終輸出(chū)到(dào)客戶端浏覽器。
參考fastcgi:https://baike.baidu.com/item/fastcgi/10880685?fr=aladdin
1.2 Java的(de)運行方式
Servlet容器,比如Tomcat和(hé / huò)Jetty等。一個(gè)Servlet容器可以(yǐ)運行多個(gè)Servlet實例。
當客戶端第一次請求某個(gè)Servlet時(shí),Servlet容器将會根據web.xml配置文件實例化這(zhè)個(gè)Servlet類,此時(shí)它貯存于(yú)内存中。當有新的(de)客戶端請求該Servlet時(shí),一般不(bù)會再實例化該Servlet類,也(yě)就(jiù)是(shì)有多個(gè)線程在(zài)使用這(zhè)個(gè)實例。每一個(gè)請求都是(shì)一個(gè)線程,而(ér)不(bù)是(shì)進程,因此,Servlet對請求的(de)處理的(de)性能非常高。
參考:https://www.ibm.com/developerworks/cn/java/j-lo-servlet/
總結:PHP是(shì)以(yǐ)多進程的(de)方式運行,并且使用fastcgi與web通訊;Java需要(yào / yāo)依賴Tomcat等Servlet容器,以(yǐ)多線程的(de)方式運行。
2.接受請求,GET/POST參數處理
JAVAPHPGET均是(shì)通過HttpServletRequest.getParameter方法獲取
GET/POST根據方法名定義doGet/doPost,如果是(shì)spring,使用RequestMapping定義
使用$_GET全局變量獲取POST使用$_POST全局變量獲取原始請求體BufferedReader reader = new BufferedReader(new InputStreamReader(request.getInputStream()));String body = reader.readLine();file_get_contents("php://input");請求來(lái)源IPHttpServletRequest.getRemoteAddr方法$_SERVER["REMOTE_ADDR"]
3.響應請求
JAVAPHP自定義狀态碼HttpServletResponse.setStatus(404);header("HTTP/1.1 404 Not Found"); 重定向response.sendRedirect("/hello");header("location: [url]");4.Cookies & Session
JAVAPHPSession存儲默認存儲在(zài)heap中,創建的(de)cookies默認名稱是(shì)JSESSIOINID。servlet.destory()方法會導緻session丢失。
默認使用文件方式,存儲在(zài)/tmp目錄下,創建的(de)cookies默認名稱是(shì)PHPSESSID。
重啓php-fpm并不(bù)會丢失數據。
調用方式讀取:HttpServletRequest.getSession().getValue(name);
寫入:
HttpServletRequest.getSession().setAttribute(name, value);
讀取:$_SESSION['key']
寫入:$_SESSION['key'] = mixed