作为一个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项目。
jdk我们采用1.8,采用maven搭建项目。
直接Finish结束。
maven会下载一些依赖,不用管,等待就是了。
加载完毕后,目录结构如下:
通过右键+new的方式,在main目录下新建java源文件夹和resources资源文件夹,这两个都是classpath路径。
好了,要开始写代码了,我们直接在java源文件夹下新建一个Servlet。
如果你右键new发现没有servlet选项,尝试以下操作:
勾选这个,确定。
然后打开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啦。
创建一个书本服务器类:
代码:
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服务器。
点这个
进行简单的配置(注意,要选Tomcat Server,不是TomEE Server)
设置发布目录
OK,启动。
启动完成后默认打开这个页面:
对应项目自动生成的jsp:
<html> <body> <h2>Hello World!</h2> </body> </html>
这不是刚才的Servlet,重新输入:http://localhost:8080/web1_war/BookServlet
得到:
演示完毕,总结一下,我们通过编写了BookServlet,完成整个网页的返回。早期的JavaWeb项目都是采用这种古老的纯Servlet技术。
纯Servlet的缺点
开发servlet必须精通网页前端和美工,你得非常不直观地在Servlet中写前端代码,这使得实现各种页面效果和风格非常困难。
对于后端来说,所有的业务逻辑、页面跳转、样式表现全部混杂在同一个类中,并且一项业务一般只有一个Servlet类与其对应,实在是….太麻烦了。
源码下载
https://gitee.com/skyblue0678/java-web-chronicle