新Java運動Nava:師PHP技術以開發Web應用

來源:互聯網
上載者:User

當前開發Web應用中,尤其是互連網及移動互連網網站,PHP是絕對的主流。另外,Python也以小清新的姿態,越來越在技術為導向的項目中採用。而一些敢於嘗新者,也有應用node.js來開Web網站的例子。而前些年風光無限的Java,如今在Web開發領域,逐漸處於邊緣化狀態。然而,單就語言本身而言,無論從表現能力、效能、可擴充性方面來看,Java語言無疑是很優秀的,造成Java在Web領域困境的根本原因,不在於Java語言本身,而在於Java業者的思維定式。Java業者過分重視架構,這直接導致了諸如Struts+Spring+Hibernate這種重量級SSH架構的流行,是敏捷Team Dev不能承受之重。另外,Java一直崇尚JEE企業級應用開發,由此EJB、JCA等技術大行其道,而這些是典型的屠龍術,具有諷刺意味的是,當前大容量、高並發的系統,基本沒有JEE開發出來的。

綜上所述,Java語言本身很優秀,但是受架構和規範的拖累,在敏捷開發領域逐漸勢微。但是如果我們可以轉變思路,採用目前主流PHP的開發模式,相信Java以語言的完備性和效能上的優勢,在Web開發方面還是大有可為的。

首先我們來分析一下一個典型的PHP應用的處理流程,使用者首先請求一個index.php頁面,在該頁面中完成各種初始化工作,同時將其路由到對應的Controller,執行商務邏輯,產生需要供頁面顯示的Model,然後調用頁面模板,將Model內容顯示到頁面中去。

將上棕思路直接映射到Java中,可以得到一個超簡單的Web架構。

首先,一個Web應用有一個Servlet,所有使用者請求都經過這個Servlet來處理。如下所示:

/** * 無論POST還是GET請求,均通過本函數進行處理 * @param request * @param response * @throws IOException * @throws ServletException */public void doProcess(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {request. setCharacterEncoding("UTF-8");response.setCharacterEncoding("UTF-8");response.addHeader("Content-Type", "text/html; charset=utf-8");PrintWriter out = response.getWriter();// 求出請求命令String cmd = "none";if (request.getParameter("cmd") != null) {cmd = request.getParameter("cmd");}// 根據請求命令調用不同方法switch (cmd) {case "dispApplyCapital":dispApplyCapital(request, response);break;}}

如上所示,系統根據請求中不同的cmd參數,轉到不同的處理方法。比如上例中,對dispApplyCapital命令就將調用dispApplyCapital方法。代碼如下所示:

private void dispApplyCapital(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {String json = "{\"name\":\"yt閆濤\", \"userId\":200}";request.setAttribute("json", json);Map<String, String> model = new HashMap<String, String>();model.put("page_title", "股票交易");model.put("header_title", "交易v1");JSONArray capOpts = new JSONArray();JSONObject capOptsItem = null;try {capOptsItem = new JSONObject();capOptsItem.put("amount", 1);capOpts.put(capOptsItem);capOptsItem = new JSONObject();capOptsItem.put("amount", 10);capOpts.put(capOptsItem);capOptsItem = new JSONObject();capOptsItem.put("amount", 100);capOpts.put(capOptsItem);} catch (JSONException e) {// TODO Auto-generated catch blocke.printStackTrace();}model.put("capOpts", capOpts.toString());model.put("procFeeRatio", "0.00399");model.put("marginRatio", "0.08");request.setAttribute("model", model);this.getServletContext().getRequestDispatcher("/caporder/apply_capital.jsp").forward(request, response);}

在上述代碼中,對Controller的調用以及產生Model內容都在這個方法中完成了,主要是為了示範目的,在實際應用中需要調用獨立的Controller類,產生Model內容。同時,需要注意的是,在上面代碼中,並沒有定義值對象,而是直接使用Map介面類,因為在Java中傳遞任何內容都需要定義一個值對象,非常麻煩,反觀PHP,所有參數傳遞,基本都是通過數組來實現的,PHP中的數組,大致等價於Java中的Map,所以這裡通過Map對象向頁面傳遞Model內容。最後,將請求轉到對應的頁面。

在頁面中實現模板技術,Java的主流方法是採用Tag,通過加入Tag來實現在模板不同位置添加不同內容。但是PHP是直接採用require_once來實現包含其他頁面的功能,因此我們也直接採用JSP中的<%@ page include="" %>來實現,具體代碼如下所示:

<%@page contentType="text/html;charset=UTF-8"%><%@ include file="/header.jsp" %><script>var g_mjson = null;$(document).ready(function(){ g_mjson = <%=model.get("capOpts")%>;var opts = "";var i = 0;for (i=0; i<g_mjson.length; i++) {opts += "<input type='radio' name='applyAmount' value='" + g_mjson[i].amount + "'>" + g_mjson[i].amount + "萬  ";}$("#capOpts").html(opts);var procFeeRatio = <%=model.get("procFeeRatio")%>;$("#procFeeTxt").val("0.0");$("input[name='applyAmount']").click(function(eve) {alert("click me! v1 v=" + $("[name='applyAmount']:checked").val() + "!");$("#procFeeTxt").val(procFeeRatio*10000.0);});}); </script>實盤申請<%=model.get("capOpts")%><br />申請金額:<span id="capOpts"></span><input type="text" id="amount" /><br />手續約:<input type="text" id="procFeeTxt" readonly /> 金幣賬戶:<a href="#">立即儲值</a><br />保證金:錢包賬戶:<a href="#">立即儲值</a><br /><input type="button" value="確認申請" /> <input type="button" value="取消申請" /><br /><%@ include file="/footer.jsp" %>

在上面代碼中,通過包含header.jsp檔案,加入了jQuery這個javascript庫的支援。在頁面顯示中,直接將JSP作為模板技術,直接將Model中的內容列印到頁面中。PHP中也有採用專門模板技術的風格,但是通常以犧牲效能為代價。只是為了避免在頁面中出現Java或PHP代碼而採用模板技術得不償失,現在頁面設計工具大多可能完美解決頁面中嵌入Java或PHP代碼的情況,所以直接在頁面中內嵌程式碼是可以的。同時這也使開發人員少學一種範本語言,減輕了開發人員的負擔。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.