新Java运动Nava:师PHP技术以开发Web应用
當前開發Web應用中,尤其是互聯網及移動互聯網網站,PHP是絕對的主流。另外,Python也以小清新的姿態,越來越在技術為導向的項目中采用。而一些敢于嘗新者,也有應用node.js來開Web網站的例子。而前些年風光無限的Java,如今在Web開發領域,逐漸處于邊緣化狀態。然而,單就語言本身而言,無論從表現能力、性能、可擴展性方面來看,Java語言無疑是很優秀的,造成Java在Web領域困境的根本原因,不在于Java語言本身,而在于Java業者的思維定式。Java業者過分重視框架,這直接導致了諸如Struts+Spring+Hibernate這種重量級SSH框架的流行,是敏捷開發團隊不能承受之重。另外,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方法。代碼如下所示:
在上述代碼中,對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代碼的情況,所以直接在頁面中嵌入代碼是可以的。同時這也使開發人員少學一種模板語言,減輕了開發人員的負擔。
總結
以上是生活随笔為你收集整理的新Java运动Nava:师PHP技术以开发Web应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 发明 实新 外观 三个专利有什么不同?
- 下一篇: sqlalchemy批量删除数据、全量删