Java Web是指中间层基于Java的Web应用,说起Web应用就不得不简单提一下两类应用的架构:C/S 与 B/S
C/S 就是 Client / Server 架构,大多数桌面应用都是基于这种架构,一般是特定语言实现,有着各种各样的交互界面,特点是用户体验较好,但升级维护需要客户端不断的更新,部署较麻烦,且不同平台需要开发不同的客户端,这类应用的代表就是QQ。
B/S 就是 Browser / Server架构,是以通用的浏览器作为应用接口,最常见的就是网页版的各种邮箱之类的,因为基于浏览器,与系统平台的交互隔了一层,虽然现在各种富客户端应用(比如Flex 各种JS框架的发展)有了长足的进步,但通常用户体验较桌面级要差,但是正因为基于浏览器,可以说不需要客户端,部署极其方便,而且升级维护只需要服务器端进行,而且易于跨平台,多平台只需要各自平台下的浏览器即可使用。
Web应用的跨平台与中国信息化步伐的前进,让各种IT支撑、信息管理系统如雨后春笋般出现在IT市场上,而Java作为一种跨平台的语言也在Web应用上大放光彩。
Java Web的开发学习需要多方面的知识,从Java基础、HTML到框架数据库等等都要有所涉猎,下面慢慢进行梳理。
Java Web简介
一、 什么是Web应用?
应用可以粗略分为两种:桌面应用、Web应用,分别对应C/S架构与B/S架构:
C/S就是Client/Server架构,大多数桌面应用都是基于这种架构,一般是基于特定语言来实现,有着各种各样的交互界面,特点是用户体验较好,还可以通过系统底层提供非常丰富的功能。但升级维护需要客户端不断的更新,部署较麻烦,且不同平台需要开发不同的客户端,这类应用的典型代表就是QQ。
B/S就是Browser/Server架构,是以通用的浏览器作为应用接口,典型的就是我们学校的选课系统这种,因为基于浏览器,与系统平台的交互隔了一层,虽然现在各种“富客户端应用”(比如Flash各种JS框架)有了长足的进步,但通常用户体验较桌面型要差(WebQQ明显没有QQ好用……),但是正因为基于浏览器,可以说不需要客户端,部署极其方便,而且升级维护只需要在服务器端进行,而且易于跨平台,多平台只需要各自平台下的浏览器即可使用。
二、 桌面or Web?
正如之前所说,两者优缺点明显:桌面体验好,但部署麻烦;Web体验差,但易于升级部署。
那么开发难度呢?
个人感觉Web应用远远易于桌面应用,关键一点就是:通常不需要学习特定系统的底层知识。
Web基于浏览器,根本不需要关心浏览器是怎么实现的、与特定系统底层如何交互,只要服务器端编好启动了,就可以用浏览器访问;而对应的桌面应用通常要有特定系统底层的知识,甚至还要学习网络编程等各方面的知识。
三、 Web基本知识
1、静态页面与动态页面
在互联网发展初期WWW出来了,但当时还都是各种静态页面,基本不具备任何交互功能,都只是简单的页面浏览,本质就是通过浏览器从远程服务器上获取Html文件到本地,再通过浏览器来进行展示。
但是随着交互需求的不断增加,人们不满足于简单的页面浏览,于是出现了有着复杂逻辑等功能的“动态页面”,动态页面可以用来实现一些复杂业务逻辑,比如一个论坛的注册时可以用JavaScript技术来对用户输入进行校验,检测用户名是否合法等;同时动态页面也可以通过后台代码与系统底层交互,比如浏览器端文件的上传下载等。
动态页面催生大量Web技术 ASP PHP JSP .NET等等,让服务器端能提供强大功能,典型的Web服务器都是 前台+后台+数据库的形式。
2、Web容器/服务器
这是个很重要的概念,从物理上来讲,远程的一台主机就是所谓的“Web服务器”;但从服务提供上来讲,真正的Web服务器是运行在远程主机上的一个程序,这个程序对外发布服务,一个Web服务器是可以装载多个Web应用,形象来说就是,你登陆的“教务系统”与“一卡通管理系统”虽然不是同一个Web应用,但是还可以部署在同一台Web服务器(主机)上,通过不同的网址来访问。而这个Web服务器就是一个“容器”,里面放了多个“Web应用”。
典型Web容器有IIS、apache、tomcat、JBoss、WebSphere、weblogic等等,他们有各自的特点,视不同场合使用。其中tomcat是个很轻量级的服务器,广大程序员入门最爱,就是这只Apache养的看起来很丑的猫:
四、 常见Web技术对比
我感觉这篇博客写的很好,转一下,原文地址:
“Perl、PHP、ASP、JSP技术比较”
http://www.williamlong.info/archives/460.html
说实话,我只做过JSP,感觉也确实有一定学习成本,但做这个屌项目总要选一种实现技术,如果大家有好的想法可以一起讨论讨论。(C/S or B/S?PHP可能更好用?等等)
五、 Java Web部署方案
我的想法是:
开发模式MVC
底层数据库使用MySQL(轻量好用)
后台整体用Java的SSH框架即Spring+Struts2+Hibernate(三个J2EE很主流的开源框架,大致介绍见下面)
Web服务器Tomcat(也是由于轻量好用)
部署听起来高大上,简单说就是,让项目跑起来
先装好Java
再装个MySQL,刷刷SQL脚本(用来建一些必备的表等等)
改改项目配置文件(比如数据库密码啥的)
把项目包扔到tomcat里面,启动tomcat项目就能跑了。
六、 Java Web学习过程
1、Java基本语法、OOP、HTML JavaScript基本知识
包含Java怎么用,简单页面怎么画,简单的JS怎么写(比如怎么取到页面文本输入框的信息并验证等)
2、JSP+Servlet+JDBC
JSP可以理解为可以写Java代码的HTML页面,只不过改了文件后缀,可以使用JSP所谓的“内置对象”等。
Servlet是Web后台服务入口,页面发出请求进入后台的入口。
JDBC=JavaDatabase Connection,即通过java来连接以及访问数据库,实现数据的增删改查。
这三个组合就可以实现典型的Web应用流程:从前台到后台再到数据库(将数据存入数据库,或是从数据库读取数据在页面展示或用于业务逻辑)。
3、Spring+Struts2+Hibernate
Hibernate是个J2EE的开源框架,用来实现ORM(Object-RelationshipMapping对象关系映射),其实就是将现实中的实体类(比如用户)映射到数据库中的表,从而在后台直接获取实体对象。
典型场景:用户登录系统,我们可以根据其用户名密码直接用HQL(类似SQL,但基本不用重新再学…..只要改一点而已)语句,来获取满足用户名密码配对的“用户实体类”的一个List,如果List为空则没查到,即用户名/密码错误;如果不为空则有那个用户,可以简单将这个用户对象取出来使用。
Struts2是可以理解为对Servlet的封装,它可以拦截页面请求,在struts2配置文件中很方便的管理MVC中的Controller,形象来说就是这个请求由哪个类的哪个方法处理,并且根据处理结果来跳转到不同的页面。免去大量Servlet的配置以及后台大量重复的代码。
最后集成Spring框架,Spring其实是个很牛逼的框架,功能丰富一笔,但是学起来太复杂,什么IoC(控制反转)还涉及AOP(面向切面编程)等等各种东西。
这里我们只需要学最简单的东西:控制对象实例化。
编程时往往有些对象构造起来很麻烦,典型的就是控制数据库连接的对象,比如我们要存一条数据,我们先要构建“会话工厂”对象,再从会话工厂获取一个“连接”,再通过连接创建一个“事务”对象,并执行语句,才能将数据存入。但是如果使用Spring,稍微配置一下配置文件,它可以帮我们实例化一个数据库连接池,我们可以随意从里面获取“事务”对象实现我们的操作。
以上各个环节回来我可以整理一份详细的文档,配上简单示例,帮助大家快速入门。
七、 代码管理
整体挂gitlab,通过Ant来自动化编译代码部分。
包含: 文档:软件工程文档(作业需求中提到的那些,可以先分角色分别写对应部分,最后再合成一篇)、演示ppt文档、开发环境搭建文档、工具使用文档、用户手册(看情况)
源码:项目源码
第三方工具:比如第三方包等等
典型开发流程:
Checkout项目->根据文档搭建开发环境->编码开发->功能验证->代码提交->代码合并->完成
PS:记得不时更新代码,合并时注意处理冲突。