Web开发技术(Java)【转】
Web开创了互联网技术新的篇章,我们使用浏览器软件就可以看到绚丽多彩的页面,使用到功能丰富的网络应用。Web开发技术从最初的静态页面显示单独页面到百家争鸣的动态技术,让时时交互成为可能。而现代Web开发技术正是针对这个交互进行的。
用户使用浏览器访问网络,网络端的服务器接收用户发送的请求并处理,最终给出响应结果返回到客户端来显示。这就是B/S模式下的请求-响应处理过程。最初的Web服务器接收HTML页面请求,并返回这个HTML页面到客户端显示,而现在用户请求JSP/ASP/PHP页面来获取动态生成的内容。好处是显而易见的,原先可能10000个页面只能存储10000条内容,而动态技术可以使得1个页面就处理上亿的内容。
我们访问Web网站,使用的是HTTP协议,这就是网址最前端的部分,它规定了我们使用的网络协议规范。什么是网络协议?网络是如何运转的?那要说的就更多了,但原理也很简单,我们参考一下介绍计算机网络的相关书籍就可以了。HTTP协议是TCP/IP体系中应用层的协议,响应在服务器端也由应用层程序来解析。RFC2616定义了HTTP1.1的规范,这是所有Web开发技术应该遵循的最终规范。HTTP协议是一个无状态的,以文本格式内容的协议,如何能和程序开发语言进行互动?
以Java为背景,我们来说,是SUN公司制定了作用于HTTP协议之上的Servlet标准,它将HTTP请求报文解析成供开发使用的各种对象类型供程序员开发使用。我们都知道的,Java程序分为两大类:应用程序和Java小程序。应用程序由main函数开始执行,而小程序则是嵌入另外的媒介来运行的。Servlet就是运行在服务器端的小程序。
使用Servlet的人都知道,ServletAPI提供的都是各种接口,比如HttpServlet,HttpServletRequest等。接口定义的是规范,也就是我们开发使用的最基本的方法。那么在Servlet中我们使用的HttpServletRequest和HttpServletResponse都是接口类型,那么这些接口的实现都是怎么进行的?这就要说到了Web容器,可以运行Servlet程序的Web容器都已经实现了Servlet规范,比如Tomcat。而SUN只是指定规范而非实现者,这些实现都是第三方来进行的,所以我们使用的Servlet规范中的各种对象,其实是由Tomcat在运行时为我们填充的。
为什么称Tomcat为Web容器,下面我们来了解一下服务器。服务器运行在网络上是可以接受来自客户端的各种请求,前提是它们监听开放的服务端口,这些服务也是以RFC为标准进行的。如果不遵循RFC,那么我们的程序也只有自己能用了,因为RFC是工业的标准。服务器也是独立的计算机,只是监听了服务请求端口,再特定请求到达时可以进行处理。这个和服务器使用何种操作系统没有必然联系,因为运行IIS的服务器使用Windows,其他服务器可以使用Linux等,这都不是固定的。为服务器安装操作系统之后,还需要继续安装可以运行特定程序的组件。根据服务的组件不同,可以分为Web服务器,FTP服务器和数据库服务器等,当然这些服务可以运行在一台计算机上。
比如运行Servlet,就需要Servlet容器,因为Servlet也是Java小程序,需要一个运行的媒介,这就是Servlet容器。Servlet容器需要安装在Web服务器上,Servlet容器只能运行Servlet,而不能运行EJB,EJB需要的是EJB容器。这就解释了为什么Tomcat不能运行EJB程序,因为它就是简单的Servlet容器。
说到这里,需要引入J2EE了,J2EE是什么?是规范!是SUN为Java的企业级平台制定的规范和标准。J2EE规范可以去Java的官网查询,常用的包括Servlet,JSP,JDBC,EJB,XML等。可以运行EJB的容器称为EJB容器,比如JBOSS等。而实现了所有J2EE规范的服务器组件就是J2EE服务器,也就是我们常说的Weblogic等。那么ApacheHTTPServer是什么?它是Web服务器,没有配置的Apache不知道Servlet,也就不能运行Servlet。
现在我们应该很清楚Servlet是Java在服务器程序的最基本的规范了,怎么使用Servlet来编写程序,这里我们不讨论。那么JSP又是什么?JSP是Servlet的另外一种表现形式,编译后的JSP是class文件,是servlet,servlet容器运行的是class文件而不是jsp文件。
能够使用Servlet就能编写JavaWeb应用程序了,随着应用规模的扩大和业务的复杂,显然纯Servlet在复杂开发中显得非常麻烦。Web开发框架就诞生了,Struts/WebWork就是J2EE的Web开发框架,这些框架是Servlet的高层封装物,为开发提供了更加便利的方法,对象包装和简化的配置。不需要写很多代码了,程序也能轻松编写。如果拿盖房子来比喻。Servlet就是地基,框架就是钢筋水泥,而我们所做的就是对房子进行的装修。作品就是这么诞生的。
所谓基础不牢,地动山摇。这里不得不提一下当前Java开发中的一些浮躁现象。很多人过分注重的是如何装修房子而不是怎么来盖房子,更不用提打地基了,可能就直接略过这一步了。而JQuery,JFreeChart这些装修只是一个锦上添花的过程。
刚才说到了Struts和WebWork,那么Spring和Hibernate又是干什么的呢?它们都是J2EE框架中的佼佼者,只是各自的本领不同。既然是框架,那么就是钢筋水泥了。可这些钢筋水泥对房子的户型设计起了关键作用。良好的户型设计,住着也舒服,不是么?
下面来说说数据库吧,房子盖好了,要提供水电,暖气和网络。这好比数据输入和输出,它们靠外部的服务来提供,这就是数据库了,程序员不会数据库是非常可怕的,那就好比是房子盖好了基础设施跟不上,是个空架子。CRUD这些最基本的操作非常熟练之后,那么房子的后勤保障才跟得上。
废话了这么多,来总结一下:Java好比盖房子。Java基础决定了你是不是会从事这项工作;我们这里不讨论J2ME,只拿J2EE来说明。那么Servlet这个最基本的规范决定了你盖房子地基的质量。开发框架的搭配使用,决定了你设计的户型是什么。如果只是在设计好的户型内搞装修,那么你只需了解SSH/S2SH也就可以了。
现在可以盖房子了,但是要盖出什么样的房子?平房,楼房还是别墅?要不要越层设计?这就是我们接到项目的具体业务了。
作为Java开发人员,那么整个盖房子的流程就都得会,我们没有现成的样板(比如.NET开发)。但是我们只要有过硬的本领,工具和一颗火热的心就足够了。
个人的一点心得体会。可能有所跑偏。