目录

​​远古时代:纯Servlet​​

​​背景​​

​​servlet初体验​​

​​纯Servlet的缺点​​

​​源码下载​​


作为一个Java程序员,我们更多耕耘的是JavaWeb项目,简单来说就是做网站或者业务系统。随着互联网时代的到来,早期CS架构的项目架构逐渐淡出人们的视野,互联网的气息弥漫在每一个开发者周围,我们习惯于用浏览器来做业务,而java作为这个时代的宠儿,是一门及其重要的编程技术。

今天,我们就来聊一聊JavaWeb的一个简明发展历程。

JavaWeb的发展历程,就是一个web程序不断解耦的过程,在之后的文章中我会逐渐说明这一点,我参考了大量资料,总结出JavaWeb发展的若干个时代。

首先是远古时代。

远古时代:纯Servlet

抛开最早期的静态页面不谈,我们来聊一聊Java最早带给程序员的惊喜,那就是用Java可以开发动态网页!

什么是动态网页呢,就好比说一个新闻网站,首页的各种新闻数据是动态的,程序员可以通过修改数据库里面的表记录,从而使得页面的新闻动态发生变化,这就是动态网站。

简而言之,动态网页就是一个系统展现给用户的活的页面,而非写死的静态html。

而早期的web程序是用​​servlet​​完成这一功能的,servlet是服务器程序,它的作用是接受客户端传过来的参数,然后返回构造好的数据。

这个返回数据可能是一个数字,一个json对象,也可能是一个网页。

没错,在早期没有ajax的年代,那种特别古老的网站都是靠servlet返回一整个网页代码。

背景

上世纪90年代,随着Internet和浏览器的飞速发展,基于浏览器的B/S模式随之火爆发展起来。 最初,用户使用浏览器向WEB服务器发送的请求都是请求静态的资源,比如html、css等。 但是可以想象:根据用户请求的不同,动态地处理并返回资源是理所当然必须的要求。

所以就有了Servlet。

servlet初体验

Servlet到底是什么,我们用项目代码来阐述。

打开idea,创建一个最简单的web项目。

JavaWeb编年史(远古时期)_ide

jdk我们采用1.8,采用maven搭建项目。

JavaWeb编年史(远古时期)_html_02

JavaWeb编年史(远古时期)_ide_03

直接Finish结束。

JavaWeb编年史(远古时期)_前端_04

maven会下载一些依赖,不用管,等待就是了。

加载完毕后,目录结构如下:

JavaWeb编年史(远古时期)_前端_05

通过右键+new的方式,在main目录下新建java源文件夹和resources资源文件夹,这两个都是classpath路径。

JavaWeb编年史(远古时期)_前端_06

好了,要开始写代码了,我们直接在java源文件夹下新建一个Servlet。

如果你右键new发现没有servlet选项,尝试以下操作:

JavaWeb编年史(远古时期)_html_07

JavaWeb编年史(远古时期)_ide_08

勾选这个,确定。

然后打开pom.xml,添加servlet依赖。

<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>

以上两步缺一不可,因为我们的maven项目默认是没有servlet依赖的,所以要导入。

然后就可以创建servlet啦。

JavaWeb编年史(远古时期)_ide_09

创建一个书本服务器类:

JavaWeb编年史(远古时期)_servlet_10

JavaWeb编年史(远古时期)_前端_11

代码:

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;

@WebServlet(name = "BookServlet", value = "/BookServlet")
public class BookServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

}

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

}
}

​/BookServlet​​是我们的访问地址,就是说,可以通过这个地址访问到该Servlet。

上面说了,在这个时代,客户端直接跟Servlet交互,而Servlet是直接返回一整个网页的。由此,让聪明的我们简单编写如下的代码。

重写doGet方法:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//模拟书本列表信息
List<String> books = new ArrayList<String>(){{
add("五年高考三年模拟");
add("王后雄教案");
}};

//通过拼接的形式返回一整个网页
response.setContentType("text/html;charset=utf-8"); //设置编码
PrintWriter out = response.getWriter(); //获取输出流
out.println("<h1>欢迎来到网上书城!</h1>");
out.println("<ul>");
for (String book : books) {
out.println("<li>"+book+"</li>");
}
out.println("</ul>");
out.flush();
out.close();
}

项目写好了,然后是发布到tomcat服务器。

点这个

JavaWeb编年史(远古时期)_servlet_12

进行简单的配置(注意,要选Tomcat Server,不是TomEE Server)

JavaWeb编年史(远古时期)_html_13

设置发布目录

JavaWeb编年史(远古时期)_html_14

OK,启动。

启动完成后默认打开这个页面:

JavaWeb编年史(远古时期)_前端_15

对应项目自动生成的jsp:

JavaWeb编年史(远古时期)_java_16

<html>
<body>
<h2>Hello World!</h2>
</body>
</html>

这不是刚才的Servlet,重新输入:http://localhost:8080/web1_war/BookServlet

得到:

JavaWeb编年史(远古时期)_ide_17

演示完毕,总结一下,我们通过编写了BookServlet,完成整个网页的返回。早期的JavaWeb项目都是采用这种古老的纯Servlet技术。

纯Servlet的缺点

开发servlet必须精通网页前端和美工,你得非常不直观地在Servlet中写前端代码,这使得实现各种页面效果和风格非常困难。

对于后端来说,所有的业务逻辑、页面跳转、样式表现全部混杂在同一个类中,并且一项业务一般只有一个Servlet类与其对应,实在是….太麻烦了。

源码下载

​https://gitee.com/skyblue0678/java-web-chronicle​