代码改变世界

与Java的约会

2011-09-13 21:57  jinze  阅读(464)  评论(0编辑  收藏  举报
Java 是当今最主流的企业级编程语言之一(另外一个是微软公司的C#语言)应用广泛,性能优异,对网络应用的支持尤为突出,通过强大的Servlet,可以构建 非常丰富的Web应用,JSP也使得WEB开发变得非常流利,当然,在面对WEB开发的时候,我们通常有三种选择,通俗的说法,我们可以选择 ASP,PHP,和JSP,三种语言各有千秋,单纯说那种语言好,那种不好,都是不负责任的说法,我的观点是,There are Just Tech,No Good or Bay。WEB应用是否更加出色,更多的,取决于设计者在相应语言上的造诣,以及在编程思想是否更加纯熟,当然,还有精力是否足够充沛,我们要讨论的是 JSP,对其他两张语言讨论就到此为止,传统的应用软件设计风格是两次或者三次的C/S  架构,传统的观点也认为,B/S和CS/是两个截然不同领域,我想说的是,这种说法其实也是可以讨论的,对B/S当中也可以嵌套C/S的概念和内容,比如 可以在服务器端调用其他服务器的方法和数据,好了,言归正传,现在,让我们来讨论一下如何开始我们的Java WEB 编程。
       一个出色的WEB应用,应该是这样的,用Ajax从服务器端得到数据,用JavaScript负责数据的调配,用Html(由Javascript来操 作)负责数据的显示,所以,对一个WEB开发人员(前端工程师)来说,掌握Javascript不仅是一种修养,也是一种能力。
     现在,让我们完成第一个JavaWEB应用,开始之前,我们需要选择一个合适的IDE,目前Java世界中,较为主流的IDE是Eclipse(www.eclipse.org)和NetBeans(www.netbeans.org) 两种IDE设计理念各有不同,我的观点是Eclipse更加个性化,netbeans更加企业话,对于Java编程,两者之中,选择一个,已经可以完全满 足需要了,本文及后续文章都会选择Eclipse作为主要的IDE,中间也有可能用到NetBeans(在介绍Java 桌面应用时),选择好了合适的IDE,还有一个问题需要主要,那就是我们的Web容器,目前可供选择的WEB容器非常多,比如 Jboss,Tomcat(tomcat.apache.org)等,本文及后续文章都会选择Tomcat.
好了,接下来,我们开始第一个Java WEB 应用(Application):hello World 我们将会使用三种技术来完成我们的Hello World,分别是JSP,Servlet和Ajax
首先,完成用JSP编写的Hello World:
在我们的Eclipse中新建一个Dynamic Web Project,取名JavaWeb,在WebContent目录下建立一个JSP页面index.jsp:


需要说明的是Web服务的默认端口是80,而tomcat默认的端口是8080,为了使自己编写的页面更像一个网站,建议修改一下自己的Tomcat配置,方法是,打开Elcipse 中的如下文件:

将server.xml文件中的
       "20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
配置改为:
      "20000" port="80" protocol="HTTP/1.1" redirectPort="8443"/>
这样,我们就可以通过80端口访问我们的应用了,在浏览器地址栏中访问http://localhost/JavaWeb/index.jsp我们就可以看的刚才完成的代码。通过Servlet访问我们的编写hello,world ,也非常容易,单身请读者注意这个应用,这是我们通过Ajax服务器端方法。
步骤是,在我们刚刚建立的Project下,建立一个新的包 com.sivce.lession 然后在这个包下建立一个Servlet,命名为:HelloServlet,我们将会看的一个Servlet的实现框架:

为什么我们框架代码中的HttpServletRequest,HttpServletResponse被以红线标示出来呢?当然不是因为Eclipse 觉得这个参数很重要,所以提醒你一下,原因在于,我们的Eclipse中缺少一个jar包,这个jar包包含了对HttpServletRequest和 HttpServletResponse的具体实现,那么这个jar包在什么地方呢?读者应该已经猜到了,就在我们的容器里面,打开我们的Tomcat目 录下,在其中的lib目录下找到servlet-api.jar文件,然后复制在我们的项目WEB-INF/lib目录下(在Eclipse中,可以直接 使用ctrl+v)复制,之后,红线就会消失,消失后的样子就不截出了,否则出版商会说我故意骗取稿费。
现在,解释一下页面中的这三个方法HelloServlet,doGet,doPost,HelloServlet是IDE为我们生成的构造方法,将其删 除,我们的页面也会正常运行,但是在这个方法中我们可以编写页面初始化需要完成的操作,比如初始化数据库连接,初始化配置的操作,需要注意的是Java Web基于多线程,在编写的时候,我们需要考虑到线程安全,关于线程安全的问题我们以后会讨论。doGet方法用于实现CGI(通用网关接口,不是计算机 图形图像接口)中所规定的Get请求,需要注意的是,在WEB应用中,80%以上的请求都是用Get请求来完成的。DoPost则实现CGI中规定是 Post请求,与Get请求不同,Post请求会隐藏我们的请求URL(统一资源标识符),在进行登录操作是,这个方法更为必要,后续文章将会讨论到这个 问题。
好了,回到我们的初衷,我们是希望在页面中打印出“Hello World”,那么,我们需要一个输出对象来完成这个操作,在我们的doGet方法中,添加如下代码:

可以注意到,页面的输出效果和JSP别无二致,下面,我们来实现用Ajax技术完成Hello  World,继续之前,先给大家介绍一下什么是Ajax,首先,让我们看一下来自维基百科的定义(http://zh.wikipedia.org/wiki/AJAX):
AJAX为“Asynchronous JavaScript and XML”(异步的JavaScriptXML技术),是一种广泛应用在浏览器的网页开发技术。Ajax是多项技术的综合应用,Ajax概念由Jesse James Garrett 所提出[1],AJAX:

类似于DHTMLLAMP,AJAX不是指一种单一的技术,而是有机地利用了一系列相关的技术。事实上,一些基于AJAX的“派生/合成”式(derivative/composite)的技术正在出现,如AFLAX
AJAX的应用使用支持以上技术的Web浏览器作为运行平台。这些浏览器目前包括:Internet ExplorerMozillaFirefoxOperaKonqueror及Mac OS的Safari。但是Opera不支持XSL格式对象,也不支持XSLT[2]
…………………………….
好了,就摘这么多吧,否则出版社…。维基百科的介绍已经非常详细了,那么,我们为什么需要Ajax呢?传统应用,一个JSP页面对应一个Servlet, 功能较为单一,如果将多个功能整合到一个Servlet里面,又会使得Servlet变得很复杂,当然,我们也可以通过在一个JSP页面里面放置多个 iframe来实现多个功能,可是每个Iframe块里面的功能同样也会非常单一,面对这种情况,我们需要一种方式来异步的从不同Servlet得到数 据,碰巧XMLHttprequest得到了几乎所有主流浏览器的支持,而XMLHttprequest恰巧可以实现我们需要的这种功能,种种“巧合”使 得XMLHttprequest成为异步数据交换的首选(更多的情况下也是唯一的选择)。
下面,我们修改我们的index.jsp 文件使他变成这样:
标签中,添加如下代码:

在Body标签中添加如下代码:

然后运行我们的项目,可以从服务器端得到数据,上面的代码非常简单,包括两个javascript function,getXMLHttpRequest用于得到跨浏览器的XMLHttprequest对象,GetHello()方法用于操作这个 getXMLHttpRequest,从服务器端得到数据,并将其显示在页面中,这个例子可能是最简单的java Ajax示例了。

本文版权属马金泽所有,转载须标明原文链接:
http://www.sivce.com/Andrew/archive/2011/09/12/%E4%B8%8EJava%E7%9A%84%E7%BA%A6%E4%BC%9A.html
用电子邮件联系Andy