一、初探Java Web开发

初探Web开发

目前Web开发所用的工具五花八门,让初学者眼花缭乱。但是,如果掌握了技巧,学习起来也会非常快。即使是新手,也能在短时间内快速建站。

我们不是在解说如何成为Web开发的大牛,不是解说那些元祖们为了构建Babel而创造的生僻词语;我们只是介绍在只剩下一个开放人员,没有太多Web开发经验的情况下,如何让我们的Web项目尽快运行起来。

说到Web开发,我们自然会联想到,服务器和客户端。对于初学Java Web开发的人,能够知道这两个词的含义就已经足够开始开发了。因为,手工解析HTTP协议的时代已经过去了,先驱们已经为我们准备了很多用于Web开发的工具。

在这个场景中,我们的客户端和服务端是使用HTTP 1.0协议进行数据传输的。那么,我们需要使用一个HTTP服务器,以及一个浏览器。我们选择使用的IDE是Eclipse IDE for Java EE Developers 。选择的原因是Eclipse本身作为一个跨开发语言,免费的IDE。它仍然被很多开发人员所喜爱,而且作者懒得再去配置InteliJ的环境了。对于初学者来说,Eclipse IDE for Java EE Developers也已经足够了。当然,我们推荐,大家在熟悉Web开发了以后,尝试使用InteliJ去进行开发,毕竟后者的逼格比较高。

安装好IDE就可以开始创建工程了,我们可以跟着IDE来了解J2EE应用的开发。

首先,依次选择File->New->Dynamic Web Project。打开一个新项目属性页:


新项目

  在填好Project Name之后,【Finish】和【Next】按钮亮起,心急的开发人员必然就直接点击

【Finish】。为了少惹麻烦,我们也点击【Finish】。点击Finish之后,项目也就创建完成了。

这个时候,是个了解我们项目的文件分类的好机会。我们会看到IDE中,是这样的景象。


IDE中文件结构


右边的导航栏中,列出了几个我们需要关注的文件目录。[src],[WEB-INF]以及[lib]路径。[src]路径是用于存放我们的Java文件以及各种需要打包到Jar包中的文件的。假设我们不修改IDE的默认配置(一般没有必要修改,不过还是要小心,有些版本会把编译输出路径设置在[build]文件夹下)[WEB-INF]实际是我们最后发布应用时的根目录。在编译完成后,在[WEB-INF]文件夹下,还会产生[classes]文件,也就是我们的Java文件编译后的产物。[lib]主要存放我们的运行时依赖库。当Tomcat运行起来后,在加载项目时,会加载[classes]和[lib]内的类和库文件。其他在[WEB-INF]这个文件夹下的文件,对于Tomcat来说,是属于静态资源,在使用时,会动态的去读取。

在导航栏中还有几个其他的列表项,是IDE插件认为开发者无法理解Web的开发文件结构而集中做了优化,并且还提供了方便理解和编辑特殊组件的编辑器,实际上是过度设计了。以下是项目文件夹的正体:


文件物理结构

文件结构了解完了,就该开始写代码了。写之前,我们差不多应该先了解一下Web应用和Web应用容器的关系了。

大概用以下这张图可以完整解释这种关系。


Web应用和Web容器的关系

这张图说明什么!Web容器应用完全是在唱独角戏。它加载了我们Web应用的类库,然后处理了浏览器的的请求。是的,其实我们的Web应用,只起到了处理类库以及资源库的功能。我们的Web应用实际上不是一个程序,而是对于整个服务程序理解业务逻辑的一个参考。大家可以很容易联想到,在Web开发中,可以运用AOP模式;当然AOP不是本文讨论的重点。了解了这些以后,我们就可以开始写代码了。

Java用于Web开发的扩展是J2EE。J2EE是一个可以用于高效的开发商业应用的技术框架,除了Web开发以外,它还提供了很多企业级通讯及服务开发的技术组件。这里我们只要使用到它用于Web开发的基础组件Servlet 就可以了。

于是,我们在项目的[src]文件夹下,创建一个Servlet类(点击左上角的+号,选择Servlet)。


选择创建Servlet


创建一个Servlet

HttpServlet,也就是我们继承的类,J2EE的一个基础Http处理Servlet。还有其他不同用途的Servlet,大家有时间可以去研究一下。但是因为是初学者,我们急于让程序运行起来,现在我们最想做得事情是,写代码。

可是,当我们创建了这个Servlet,我们可看到在代码上,通过语法的校验机制,所呈现给我们的景象是:


缺少依赖库的代码

这个是由于缺少依赖库导致的。原来Eclipse的J2EE Plugin虽然能够通过模板创建代码,但是生成的代码中对于包的引入是IDE开发人员根据自己对项目导入JAR包的预期来填入的,也就是说,在创建项目的时候根本没有导入开发包。我们的项目配置可能一开始就是错的,那么到底问题在哪呢?答案就是,HttpServlet的实现其实是和Web容器相关的。如果我们在创建应用的时候,能够导入Web容器的运行时JAR包,那么就能解决导入的问题。

这个时候,我们需要配置的是Web应用的运行服务器。先下载解压tomcat服务器,这里用到的是tomcat 7.0, 也就是随便一用。 下然后在Eclipse中配置运行环境。方式是:

1.创建新的服务器运行环境(File->New->Server):


创建Server

Server Name和Host Name大家就可以随便输入了,依旧是点击下一步。


选择创建Apache Tomcat的服务器

然后就是需要配置Tomcat的路径,也就是Tomcat的[bin]文件夹所在的路径。

配置Tomcat的路径

点击完成后,应该可以在侧边栏看到以下内容:



被创建的Server配置


2.创建好Server以后,在Project->properties中配置Java Build Path。其中,选择[Libraries]标签页,选择[Add Library...]。然后按照下面的顺序,添加我们的运行环境依赖库:


选择导入服务器运行时库

然后选择我们刚才创建的服务器配置。



选择创建的服务器配置


配置完成后,所有的代码校验红线也就消失了。这段代码中response和request分别是返回数据和请求数据的对象句柄。

接下来,我们稍微修改一下代码:


修改路径和返回数据


这段代码的含义是基于根路径,使用"/mytest"这个路径可以访问到我们现在Servlet。在浏览器通过Get的请求方式请求服务器时,服务器返回字串“this is result”。我们并没有修改doPost方法,大家有兴趣可以自己尝试一下。

编译完成后在[WEB-INF]->[classes]生成了类文件(小贴士:为了方便我将编译输出直接设置为了WEB-INF->classes路径,实际上有很多版本的Eclipse是默认输出在build文件夹的,需要人工拷贝class文件进去):


生成的类文件


(另一个小贴士,如果设置的输出路径不是[build]文件夹,是无法在Eclipse中看到class文件的,这个也是Eclipse过度设计的结果。)

因为这个例子是最简Web应用,没有引入第三方库文件,所以此时lib文件夹下应该是空的。这样WEB-INF的内容就是一个完整的Web应用了。刚才说到,我们所有的内容要放入WEB-INF文件夹,作为初学者一定觉得很困惑。但是,我们在看过Tomcat中加载的Web应用的路径结构后,应该就可以理解这里的奥秘了,通常Tomcat加载的应用是存放在Tomcat文件夹中,[webapps]文件夹下:


范例应用的文件结构

大家是否已经发现了,Tomcat所支持的Web应用的文件结构就是这样的。因为WEB-INF是J2EE项目的安全路径。

我们在Tomcat的webapps路径下,创建我们的项目路径[firstclass]。然后将我们的[WEB-INF]文件夹整个拷贝过去。拷贝完成后,进入Tomcat的[bin]文件夹,如果是在Windows下,直接启动startup.bat。Unix和Linux环境应该是启动startup.sh。Tomcat启动需要一点时间,大家如果觉得焦急难耐,可以尝试做个瑜伽,眼保健操喝杯茶,和朋友聊聊天再回来。因为Tomcat默认的Http请求端口是8080,所以可以在浏览器中输入"http://localhost:8080/firstclass/mytest"。于是,我们就会看到下面这个画面:


执行结果


如果之前有Tomcat的使用经验会发现,在这个项目中,我们没有使用到web.xml文件。这是因为Tomcat运行时,在加载Web应用时,可以通过web.xml了解需要运行的类,或者通过解析我们代码中”@WebServlet("/mytest")”或者其他标注来了解运行信息。

到这里,我们已经可以顺利的运行一个Web应用了,大家也可以修改doGet和doPost的逻辑尝试处理request中数据。但是,这个只是我们外行窥探Web开发的第一步。

其实大家仔细想一下,是不是在现实场景中,我们的数据不可能会像上面说到的一样做hard-coding。甚至,有的时候,我们还需要保存数据,在下一次的更新中,我们会好好谈一下Java Web开发中的基本持久化手段。

小贴士:如果在Unix环境或者某些Linux环境下,启动Tomcat时,系统提示Permission Denied,可以尝试在Tomcat的bin文件夹下输入"chmod 777 *.sh"加权。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341

推荐阅读更多精彩内容