0. 前言
上一章[从你的WEB世界路过之--0.初识]中我们对WEB开发中的基本概念进行了说明, 其中提到的服务器端的B/S程序(也叫WEB应用), 作为一个WEB开发人员, 其工作内容就是编写服务器端的WEB应用. 本文就带领大家使用JAVA编写一个简单的WEB应用.
1. Hello J2EE
JAVA可以做很多事情, 根据不同的功能将整个JAVA体系分为3大平台
- J2SE: JAVA基础类库
- J2ME: 安卓开发等
- J2EE: B/S程序开发
其中: J2EE是JAVA为了B/S程序开发而提供的解决方案, 也是我们重点要讲的内容. 下面我们来完成第一个WEB应用.
1.1 JAVA环境
你需要在电脑上安装JAVA环境, 网上资料太多, 这里简单说一下: 下载JDK并解压, 配置环境变量中的JAVA_HOME
和PATH
, 在命令行输入java -version
, 如果出现版本说明JAVA环境安装成功. 这里说一下JAVA_HOME
和PATH
的作用:
-
JAVA_HOME
: 很多依赖于JAVA的软件并不知道你的电脑中JAVA被安装在了哪个目录, 因此他们会从环境变量中读取JAVA_HOME
的值, 并将其作为JAVA所在目录, 因此如果你的JAVA_HOME
配置错了, 这些依赖于JAVA的软件也将无法使用. -
PATH
: 在Windows的命令行中执行javac.exe
, 需要输入D:/java/bin/javac.exe
, 如果只输入javac.exe
, 系统是找不到该EXE的. 每次都输入目录显然太麻烦了. 环境变量PATH
很好的解决了这个问题, 如果我们在PATH
中配置了D:/java/bin/
, 输入javac.exe
执行时系统会从D:/java/bin/
中查找, 如果有EXE就会执行. JDK下的bin目录存放的是JAVA各种EXE, 将其配置到PATH
, 就可以在命令行中随意执行下面的EXE了, 再也不用输入目录了.
1.2 开发工具
目前比较流行IDea和Eclipse, 本文是基于Eclipse开发, Eclipse去官网下载解压即可.
1.3 创建项目
按照下面菜单顺序创建一个动态WEB工程:
File
>> New
>> Other
>> Web
>> Dynamic Web Project
Eclipse会创建一个Web工程 , 工程结构如下:
src
: Java源代码目录, 所有Java相关的源文件都放在src下.build
: 编译后的Class文件目录, 不需要开发人员处理, 暂时不需要考虑WebContent
: Java以外的文件可以放在此目录下, 如CSS, JS, HTML等WebContent/META-INF
: 存放工程的一些信息, 不需要开发人员处理, 暂时不需要考虑WebContent/WEB-INF
: 此目录下的文件客户端无法直接访问, 只有通过程序才能访问, 可放置配置文件等重要文件.WebContent/WEB-INF/lib
: 放置工程所有依赖的第三方类库(Jar文件)
1.4 Tomcat
当用户访问http://a.com:8080
, 由服务器8080端口的WEB应用进行处理. 那如何让WEB应用处理访问8080端口请求呢?
我们想这样一个场景:
一个公司有好多部门, 每个部门处理各自不同的业务. 当有客户来的时候并不知道自己要办理的业务该由哪个部门处理. 每个部门需要派出一个人在公司前台负责接待自己相应的客户, 这样每个部门都会浪费一个人. 后来公司换了一种方案, 招聘了一个前台, 所有部门把他们能做的事情写到一些纸上交由前台, 当有客户来时, 由前台负责接待并在纸上找到对应处理的部门. 当部门增加或减少时只需要在前台的纸上进行修改即可. 随着发展公司部门越来越多, 于是在隔壁的办公楼租了一个办公区, 有些部门在新的办公区, 这时候新办公区也会设立一个独立的前台.
每个部门都属于一个办公区, 每个办公区都必须有一个前台, 客户只能通过前台才能进入指定部门办事. 不在办公区的部门是无效的.
1.4.1 WEB容器
在J2EE体系中: 办公区叫做WEB容器, 前台相当于WEB容器所监听的端口. 用户去前台的过程相当于访问服务器的某个端口. 我们创建的项目相当于一个部门(只负责业务处理). 项目如果想被用户访问到需要添加到WEB容器中(相当于在前台的纸上登记自己能做什么).
项目添加到WEB容器中的过程称为部署.
公司相当于一台服务器, 一台服务器下可以有多个WEB容器(每个容器监听一个端口), 每个WEB容器中可以部署多个项目.
我们介绍一个最常见的WEB容器: Tomcat. 它的作用主要是监听8080端口, 当有用户访问8080端口时, 由Tomcat根据请求的URL找到对应的项目进行处理. 你可以在一台服务器中启动多个Tomcat(每个Tomcat监听端口不能重复).
明白了上面的机制后, 我们访问服务器的WEB程序时网址中应该加上要访问的项目名称才可以, URL变为: http://a.com:8080/projectName/category
1.4.2 安装Tomcat
Tomcat是依赖于JAVA, 要确保你的JAVA环境已经安装, Tomcat的安装非常简单. 下载后解压即可.
Tomcat解压后内容如上图所示:
bin
: 执行文件目录, 所有Tomcat的可执行文件都在此目录, 包括启动关闭Tomcat的EXEconf
: 配置文件目录, 所有Tomcat的配置文件都在此目录, 暂时不需要对配置进行修改logs
: 日志目录, 访问记录/错误日志都输出到此目录中webapps
: 部署目录, 保存所有部署至Tomcat的项目, 将WEB应用打包后放入此目录即可.
1.4.3 启动Tomcat
进入Tomcat下的bin
目录, 双击执行startup.bat
即可启动. Tomcat启动后会监听8080端口(默认端口), 当客户端请求访问8080端口时由Tomcat进行处理.
在浏览器中访问http://localhost:8080
, 出现如下页面代表Tomcat启动成功.
注: localhost
代表本机.
上图页面是Tomcat的欢迎页, 由于访问的网址中没有指定项目名称, 因此Tomcat返回欢迎页.
1.4.4 Eclipse配置Tomcat
项目必须部署至Tomcat后才能被用户访问. 如果每次修改后都打包部署至Tomcat才能查看效果会使得开发效率变得非常低下, 因此我们需要在Eclipse配置Tomcat, 这样修改完代码后就可以直接在Eclipse中使用Tomcat运行了.
1) 在Eclipse中配置Tomcat
Window
>> Preferences
>> Server
>> Runtime Environments
>> Add
>> Apache
>> Apache Tomcat v8.5
2) 在Eclipse中创建Tomcat服务器
- 创建完成后, 在Server视图中可以看到新创建的Tomcat服务器
Server runtime environment
中选择1)中配置的Tomcat- 如果没有Server视图, 通过
Windows
>>Show View
>>Other
>>Server
>>Servers
可以显示视图
1.5 Servlet
上一篇我们说到了, 当用户访问http://a.com:8080/category
, 由在服务器8080端口的WEB应用进行处理, WEB应用中有处理/category
的程序. 结合上面讲到的我们可以得出结论: 8080端口是由Tomcat监听的, 和WEB应用程序无关. 我们只需要写一个能够处理/category
请求的程序即可.
在JAVA中, 能够在服务器端处理请求的程序叫做Servlet(Server Applet): 服务器端应用程序. Servlet负责处理客户端的请求并将结果返回至客户端.
1.5.1 创建Servlet
在项目src目录下创建存放Servlet的目录. 在目录中新建一个Servlet. 在创建Servlet窗口中的填写Servlet的名称并点击完成, 一个Servlet就创建好了.
创建方式: New
>> Other
>> Web
>> Servlet
1.5.2 导入Tomcat环境
打开创建好的Servlet, 会发现Servlet中报错. 这是因为Servlet是J2EE提供的, Servlet需要依赖J2EE下的类库, 但我们的项目中并没有J2EE相关的类库, 因此会报错, 我们可以将Tomcat环境导入项目中就可以解决. 创建步骤:
Properties
>> Java Build Path
>> Libraries
>> Add Library
>> Server Runtime
- Tomcat是按照J2EE标准实现的并依赖于J2EE的, 导入Tomcat环境相当于导入了J2EE类库
- 如果在项目中我们单独引入J2EE类库, 部署至Tomcat时会和Tomcat自带的J2EE类库冲突
1.5.3 Servlet详解
// @WebServlet注解声明了当前类是Servlet
// /category声明了当前Servlet只处理/category请求
@WebServlet("/category")
public class CategoryServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public CategoryServlet() {
super();
}
// GET请求执行
// HttpServletRequest: 请求对象, Tomcat将本地请求的内容封装至该对象
// HttpServletResponse: 响应对象, Tomcat将本次请求的响应封装至该对象
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 将你想要返回客户端的内容写入response.getWriter()中即可
response.getWriter().append("hello j2ee, hello servlet");
}
// POST请求执行
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
复制代码
@WebServlet("/category")
: 声明类为Servlet, 并设置Servlet负责处理的请求/category
doGet&doPost
: 客户端以GET方式请求将会执行doGet
方法, POST请求执行doPost
方法.HttpServletRequest
: J2EE提供的请求对象, Tomcat在收到用户的请求时将请求的内容封装至该对象中, 通过该对象可以获取客户端IP, 请求方式, 请求URL, 请求参数等客户端提交的信息.HttpServletResponse
: J2EE提供的响应对象, Tomcat创建请求对象时会同步创建一个响应对象, 将需要返回客户端的内容写入响应对象中即可.
1.5.4 启动Tomcat
运行项目时, 需要在Eclipse中启动Tomcat. 第一次启动前需要在Tomcat中添加要运行的项目. 添加完成后点击Server视图右侧的启动(或调试)按钮即可. 添加项目步骤:
选中Server视图中的Tomcat
>> 右键Add and Remove
>> 将要运行的项目添加至右侧窗口内
1.5.5 访问Servlet
访问http://localhost:8080/atd681-web-servet/category
, 可以看到Servlet的返回结果.
2. J2EE总结
我们已经创建了J2EE项目并编写了第一个Servlet. 项目启动后可以使用浏览器访问. 我们来总结一下项目的创建及运行流程.
- 创建项目, 需要创建动态WEB工程
- 引入Tomcat环境, 项目依赖于J2EE类库, 为了避免部署时和Tomcat环境冲突, 项目引入Tomcat环境
- 创建Servlet, 配置Servlet可处理的请求URL, 并将返回内容写入
HttpServletResponse
中 - 将项目添加至Tomcat中, Tomcat启动时只会加载已添加的项目
- 启动Tomcat, Tomcat会解析项目中带有
@WebServlet
的Servlet, 并将其处理的请求URL对应保存. - 通过URL访问时: 根据localhost找到本机, 根据8080端口找到对应的Tomcat, Tomcat根据访问URL(
/category
)找到处理该URL的Servlet并调用Servlet的方法处理本地请求, Servlet根据请求的方式(GET或POST)执行相应的方法(doGet
或doPost
)后将响应内容返回客户端.
只有在Servlet中声明了处理的URL, 用户访问该URL时才能被Servlet处理, 本例中的Servlet定义了处理/category
, 因此只有访问/category
才会被Servlet处理(没有其他Servlet定义处理其他URL), 如果访问其他的请求需要添加对应的Servlet.
根据以往经验, 新同学刚接触J2EE时容易出现404错误, 大概有以下几个原因:
- 启动Tomcat时没有将项目添加至Tomcat
- Servlet中没有添加@WebServlet
- 访问的URL没有添加项目名称或者URL拼写错误
3. 结语
本文主要是带领刚入门的同学完成J2EE项目的环境搭建及第一个J2EE项目. 虽然现在的框架越来越高级, 但万变不离其宗, 基础非常重要, 学好基础以后会少走很多弯路, 下一篇中会对数据库进行讲解, 欢迎大家关注.