新Java运动Nava:师PHP技术以开发Web应用
當(dāng)前開發(fā)Web應(yīng)用中,尤其是互聯(lián)網(wǎng)及移動(dòng)互聯(lián)網(wǎng)網(wǎng)站,PHP是絕對(duì)的主流。另外,Python也以小清新的姿態(tài),越來越在技術(shù)為導(dǎo)向的項(xiàng)目中采用。而一些敢于嘗新者,也有應(yīng)用node.js來開Web網(wǎng)站的例子。而前些年風(fēng)光無限的Java,如今在Web開發(fā)領(lǐng)域,逐漸處于邊緣化狀態(tài)。然而,單就語言本身而言,無論從表現(xiàn)能力、性能、可擴(kuò)展性方面來看,Java語言無疑是很優(yōu)秀的,造成Java在Web領(lǐng)域困境的根本原因,不在于Java語言本身,而在于Java業(yè)者的思維定式。Java業(yè)者過分重視框架,這直接導(dǎo)致了諸如Struts+Spring+Hibernate這種重量級(jí)SSH框架的流行,是敏捷開發(fā)團(tuán)隊(duì)不能承受之重。另外,Java一直崇尚JEE企業(yè)級(jí)應(yīng)用開發(fā),由此EJB、JCA等技術(shù)大行其道,而這些是典型的屠龍術(shù),具有諷刺意味的是,當(dāng)前大容量、高并發(fā)的系統(tǒng),基本沒有JEE開發(fā)出來的。
綜上所述,Java語言本身很優(yōu)秀,但是受框架和規(guī)范的拖累,在敏捷開發(fā)領(lǐng)域逐漸勢微。但是如果我們可以轉(zhuǎn)變思路,采用目前主流PHP的開發(fā)模式,相信Java以語言的完備性和性能上的優(yōu)勢,在Web開發(fā)方面還是大有可為的。
首先我們來分析一下一個(gè)典型的PHP應(yīng)用的處理流程,用戶首先請(qǐng)求一個(gè)index.php頁面,在該頁面中完成各種初始化工作,同時(shí)將其路由到對(duì)應(yīng)的Controller,執(zhí)行業(yè)務(wù)邏輯,生成需要供頁面顯示的Model,然后調(diào)用頁面模板,將Model內(nèi)容顯示到頁面中去。
將上棕思路直接映射到Java中,可以得到一個(gè)超簡單的Web框架。
首先,一個(gè)Web應(yīng)用有一個(gè)Servlet,所有用戶請(qǐng)求都經(jīng)過這個(gè)Servlet來處理。如下所示:
/*** 無論P(yáng)OST還是GET請(qǐng)求,均通過本函數(shù)進(jìn)行處理* @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();// 求出請(qǐng)求命令String cmd = "none";if (request.getParameter("cmd") != null) {cmd = request.getParameter("cmd");}// 根據(jù)請(qǐng)求命令調(diào)用不同方法switch (cmd) {case "dispApplyCapital":dispApplyCapital(request, response);break;}}如上所示,系統(tǒng)根據(jù)請(qǐng)求中不同的cmd參數(shù),轉(zhuǎn)到不同的處理方法。比如上例中,對(duì)dispApplyCapital命令就將調(diào)用dispApplyCapital方法。代碼如下所示:
在上述代碼中,對(duì)Controller的調(diào)用以及生成Model內(nèi)容都在這個(gè)方法中完成了,主要是為了演示目的,在實(shí)際應(yīng)用中需要調(diào)用獨(dú)立的Controller類,生成Model內(nèi)容。同時(shí),需要注意的是,在上面代碼中,并沒有定義值對(duì)象,而是直接使用Map接口類,因?yàn)樵贘ava中傳遞任何內(nèi)容都需要定義一個(gè)值對(duì)象,非常麻煩,反觀PHP,所有參數(shù)傳遞,基本都是通過數(shù)組來實(shí)現(xiàn)的,PHP中的數(shù)組,大致等價(jià)于Java中的Map,所以這里通過Map對(duì)象向頁面?zhèn)鬟fModel內(nèi)容。最后,將請(qǐng)求轉(zhuǎn)到對(duì)應(yīng)的頁面。
在頁面中實(shí)現(xiàn)模板技術(shù),Java的主流方法是采用Tag,通過加入Tag來實(shí)現(xiàn)在模板不同位置添加不同內(nèi)容。但是PHP是直接采用require_once來實(shí)現(xiàn)包含其他頁面的功能,因此我們也直接采用JSP中的<%@ page include="" %>來實(shí)現(xiàn),具體代碼如下所示:
<%@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>實(shí)盤申請(qǐng)<%=model.get("capOpts")%><br /> 申請(qǐng)金額:<span id="capOpts"></span><input type="text" id="amount" /><br /> 手續(xù)費(fèi):<input type="text" id="procFeeTxt" readonly />?金幣賬戶:<a href="#">立即充值</a><br /> 保證金:錢包賬戶:<a href="#">立即充值</a><br /> <input type="button" value="確認(rèn)申請(qǐng)" />? <input type="button" value="取消申請(qǐng)" /><br /><%@ include file="/footer.jsp" %>在上面代碼中,通過包含header.jsp文件,加入了jQuery這個(gè)javascript庫的支持。在頁面顯示中,直接將JSP作為模板技術(shù),直接將Model中的內(nèi)容打印到頁面中。PHP中也有采用專門模板技術(shù)的風(fēng)格,但是通常以犧牲性能為代價(jià)。只是為了避免在頁面中出現(xiàn)Java或PHP代碼而采用模板技術(shù)得不償失,現(xiàn)在頁面設(shè)計(jì)工具大多可能完美解決頁面中嵌入Java或PHP代碼的情況,所以直接在頁面中嵌入代碼是可以的。同時(shí)這也使開發(fā)人員少學(xué)一種模板語言,減輕了開發(fā)人員的負(fù)擔(dān)。
總結(jié)
以上是生活随笔為你收集整理的新Java运动Nava:师PHP技术以开发Web应用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 发明 实新 外观 三个专利有什么不同?
- 下一篇: PHP 批量删除功能