从你的WEB世界路过之--1.J2EE初体验

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去官网下载解压即可. 点击进入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根据网址找到对应的项目进行处理. 你可以在一个服务器中启动多个Tomcat(监听端口不能重复). 

当你访问服务器的WEB程序时你的网址中应该加上要访问的项目名称才可以, http://a.com:8080/项目1/category.

1.4.2 安装Tomcat

Tomcat是依赖于JAVA, 要确保你的JAVA环境已经安装, Tomcat的安装非常简单. 下载后解压即可. 点击进入官网下载

Tomcat解压后内容如上图所示: 

  • bin: 执行文件目录, 所有Tomcat的可执行文件都在此目录, 包括启动关闭Tomcat的EXE
  • conf: 配置文件目录, 所有Tomcat的配置文件都在此目录, 暂时不需要对配置进行修改
  • logs: 日志目录, 访问记录/错误日志都输出到此目录中
  • webapps: 项目部署目录, 保存所有需要被Tomcat管理的项目, 将WEB应用打包后放入此目录即可.

1.4.3 启动Tomcat

进入Tomcat下的bin目录, 双击执行startup.bat即可启动. Tomcat启动后会监听8080端口(默认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. 创建方式: New >> Other >> Web >> Servlet. 在创建Servlet窗口中的填写Servlet的名称即可, 一个Servlet就创建好了.

1.5.2 导入Tomcat环境

打开创建好的Servlet, 会发现Servlet中报错. 这是因为Servlet是J2EE提供的, Servlet需要依赖J2EE下的类库, 但我们的项目中并没有J2EE相关的类库, 因此会报错, 我们可以将Tomcat环境导入项目中就可以解决.

Properties >> Java Build Path >> Libraries >> Add Library >> Server Runtime >> 选中1.4.4配置的Tomcat

  • 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. 项目启动后使用浏览器可以访问. 我们来总结一下项目的创建及运行流程.

  1. 创建项目, 需要创建动态WEB工程
  2. 引入Tomcat环境, 项目依赖于J2EE类库, 为了在部署时不和Tomcat环境冲突, 项目引入Tomcat环境
  3. 创建Servlet, 配置Servlet可处理的请求URL, 并将返回内容写入Response中
  4. 将项目添加至Tomcat中, Tomcat启动时只会加载已添加的项目
  5. 启动Tomcat, 启动时Tomcat会解析项目中带有@WebServlet注解的Servlet, 并将其处理的请求URL对应保存. 
  6. 通过URL访问时: 根据localhost找到本机, 根据8080端口找到对应的Tomcat, Tomcat根据访问URL"/category"找到处理该URL的Servlet并调用Servlet的方法处理本地请求, Servlet根据请求的方式(GET或POST)执行相应的方法(doGet或doPost)后将响应内容返回客户端

只有在Servlet中声明了处理的请求后, 请求才能被Servlet执行, 本例中只有请求/category才会被Servlet处理, 如果访问其他的请求需要添加对应的Servlet. 根据以往经验, 新同学刚接触J2EE时容易出现404错误, 大概有以下几个原因: 

  • 启动Tomcat时没有将项目添加至Tomcat
  • Servlet中没有添加@WebServlet
  • 访问的URL没有添加项目名称或者URL拼写错误

3. 结语

本文主要是带领刚入门的同学完成J2EE项目的环境搭建及第一个J2EE项目. 虽然现在的框架越来越高级, 但万变不离其宗, 基础非常重要, 学好基础以后会少走很多弯路, 下一篇中会对数据库进行讲解, 欢迎大家关注.

猜你喜欢

转载自blog.csdn.net/weixin_42500670/article/details/81749209
今日推荐