新Java运动Nava:师PHP技术以开发Web应用
来源:互联网 发布:pycharm mac 编辑:程序博客网 时间:2024/04/30 03:41
当前开发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方法。代码如下所示:
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代码的情况,所以直接在页面中嵌入代码是可以的。同时这也使开发人员少学一种模板语言,减轻了开发人员的负担。
- 新Java运动Nava:师PHP技术以开发Web应用
- java web 开发技术应用-过滤器
- Java Web 应用开发技术概述
- Java Web应用开发技术简介
- Java和PHP的web开发技术比较
- 浅谈PHP与Java之Web开发整合技术
- Java和PHP的web开发技术比较
- Java和PHP的web开发技术比较
- 基于JAVA技术的Web应用开发认证题
- OpenJWeb(1.6) Java Web应用快速开发平台技术白皮书
- OSGi技术在Java Web开发中的应用
- OpenJWeb2.61 Java Web应用快速开发平台技术白皮书
- Java Web开发技术应用——过滤器
- Java Web开发技术应用——过滤器
- JAVA Web开发技术应用——监听器
- OSGi技术在Java Web开发中的应用
- Java Web开发技术
- Java Web开发技术
- 关于IOS的视频录制
- 正确理解ThreadLocal .
- structs2中重定向和转发的区别
- 关于 for循环和Iterator遍历
- python 装饰器 分析
- 新Java运动Nava:师PHP技术以开发Web应用
- Asp.net -Repeater用法
- hdu 3791 浙大机试复试2010年
- VC++ 多线程几个例子
- linux_c++静态库与动态库的使用
- word2007文件转为pdf
- 生成圖片的縮略圖
- jquery焦点图,带左右切换 有一个,带圆点非IE下面[带演示]
- Windows Mobile远程控制软件Pocket Controller Pro简介