手记
下载APP

毛哥的快乐生活 十八章 第一个servlet的前世今生

本章源码:Github

准备工作都已就绪

毛哥开始盘算,从工具上讲JDK有了,开发环境eclipse有了,没毛病。

开发完成之后,代码放到服务器软件上运行,java开发网站部署到tomcat上运行,这个毛哥的网站已经在上面跑了,妥妥的没毛病。

技术储备上,毛哥对java语言,嗯嗯,还算有一番了解…没毛病。

整理下思路

做事之前,先想清楚思路,这是毛哥一贯的高水准作风。

实际上很简单,就是使用java语言在eclipse工具里面写一个动态的网站,然后将网站部署到tomcat上,用户通过浏览器请求这个网站时,动态网站会生成动态的html页面返回给浏览器,然后浏览器按照html规则解析成对应界面显示即可。

嗯,思路相当清晰。

开始使用eclipse

所谓项目,其实就是个文件夹,网站所有的内容,不管是静态的css、html,还是动态java语言部分,都放在一个文件夹管理。

然后还得有个工作空间(wrokspace)的概念,啥是工作空间呢,其实也就是个文件夹,咱们用eclipse可能会开发很多个项目,这些项目放到一个文件夹管理,这个文件夹就是工作空间。

第一次打开eclipse时,就得先选一个默认的工作空间,如下图中毛哥使用了D:\work\MaogeSpace作为自己的工作空间。

图片描述

第一次进入之后会显示一个欢迎页面:Eclipse Java EE IDE for Web Developers,其中Java EE是指的企业级Java应用(主要用来开发网站),想当年还有Java SE表示桌面级Java应用(其实就是PC应用程序),Java ME移动端Java应用(想当年诺基亚和国产手机上的Java图片小游戏还记得么)。目前来说Java SE发展势头一般般,Java ME发展较为惨淡(现在手机开发主流是苹果的iOS和安卓,虽然安卓可以用Java开发,但是不是Java ME那一套技术)。

图片描述

然后后面的for Web Developers表示该Eclipse版本是为web网站开发者使用的,这也是为何咱们下载的eclipse文件全称eclipse-jee-2018-12-R-win32-x86_64.zip,其中jee就是企业级Java应用的意思,也就用来开发网站的eclipse版本。

那么eclipse-jee版本和其他版本有何区别呢,简单理解就是集成的模板不一样。比如jee版本可以创建动态网站项目,把动态网站需要的项目结构和一些初始化工作通过eclipse内置的向导帮我们自动生成,减少了这种类型的项目的重复工作量。OK,这个略微了解就可以了。

创建第一个动态网站项目

在eclipse中依次点击File-New-Project…,这就打开了新建项目的向导,这里面内置了很多向导,按照不同的向导可以生成不同的项目种类,当然eclise也会为每种不同的项目生成不同的基本结构。

只需要选择Dynamic Web Project(动态网站项目)即可,此处毛哥的英文水平(通过了英语四级),相当有作用啊。

图片描述

然后就是输入项目的基本信息了,需要注意的请参考图片:

图片描述

分析下项目基本结构

如果英文水平够好的话,基本靠猜也差不多。先看结构图:

图片描述

src:存放java源代码
JRE System Library:这个是系统库,也就是Java语言运行环境,自动生成好了不用管
build:生成的意思,是不是生成的东西在这里面
WebContent:Web网站内容,应该是把网页相关的内容放在这里,比如css、图片什么的。

新建一个包

要写Java类,首先得有包,就像要在电脑上创建文件,首先得有一个文件夹。包就是类的组织结构,实际上包还真是按文件夹组织的,毛哥本着求真务实刨根问底精神就得去深究下。

在src上右键-New-Packge,表示新建包,如下图:

图片描述

为了刨根问底,毛哥打开了真实的文件路径,发现还真生成了D:\work\MaogeSpace\FistWebProject\src\com\maoge\firstwebproject

新建一个Servlet

在Java中一切皆为类,如果说包是类的组织结构,那么类就是Java代码的组织结构,新建类也非常简单,右键com.maoge.firstwebproject包-New-Class,表示新建类,具体说明见下图:

图片描述

生成的类结构如下:

package com.maoge.firstwebproject;
public class HelloServlet {

}

注意啊!注意!这么多向导界面,只不过是为了简化操作,此处创建类我们完全可以不用New-Class,而是直接New-File,然后File name设置为HelloServlet2.java,这样生成的代码自然是空的(因为没用向导啊,所以都是自己手动输入)。

图片描述

无所谓,我们手工输入代码如下:

package com.maoge.firstwebproject;
public class HelloServlet2 {

}

然后这个类除了名字和HelloServlet不一样,其他都是一样的。

可见向导的作用就是根据咱们输入的内容自动生成一些东西而已,在New-Class向导里咱们在类名称位置输入了HelloServlet,所以就自动给咱生成了一个HelloServelt类的基本结构。

前生今世

OK,我们有了一个HelloServlet了,只是一个简单的Java类,它怎么就能承担动态网站的职责了?

哪来的这么大本事?何德何能啊!为何如此优秀?

要知道一个动态网站,必须的能接受浏览器的请求,然后返回html数据。

要接受浏览器的请求,就得实现Http网络协议,要返回html数据,就得通过网络协议把数据发送回去。

耶嗨,有没有发现,所有的动态网站都得实现Http协议,并返回html数据?

那不就可以封装了么?

Servlet是啥,就是封装好的,已经实现了Http协议接收返回数据的基类。

我们的类只要继承它,然后按照它的用法,就能实现接收浏览器请求,并给浏览器返回数据了。

好简单啊,站在巨人的肩膀上办事,就是so easy。

还等啥,去看下Servlet咋回事吧。

打开App,阅读手记
1人推荐
随时随地看视频慕课网APP