JavaWeb编年史(远古时期)

简介: JavaWeb编年史(远古时期)

作为一个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项目。


1.png


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


2.png


3.png


直接Finish结束。


4.png


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


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


5.png


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


6.png


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


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


7.png


8.png


勾选这个,确定。


然后打开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啦。


9.png


创建一个书本服务器类:


10.png


11.png


代码:

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服务器。


点这个


12.png


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


13.png


设置发布目录


14.png


OK,启动。


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


15.png


对应项目自动生成的jsp:


16.png


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


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


得到:


17.png


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


纯Servlet的缺点


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


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


源码下载


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

相关文章
|
2月前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
432 37
|
1月前
|
前端开发 Java 应用服务中间件
Javaweb学习
【10月更文挑战第1天】Javaweb学习
33 2
|
1月前
|
安全 Java Android开发
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
54 5
|
2月前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
|
2月前
|
安全 Java Android开发
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
112 2
|
2月前
|
SQL JSON JavaScript
JavaWeb基础9——VUE,Element&整合Javaweb的商品管理系统
Vue 指令、生命周期、this和$、vue脚手架进行模块化开发/ElementUI框架、综合案例,element商品列表展示增删改查
JavaWeb基础9——VUE,Element&整合Javaweb的商品管理系统
|
4月前
|
存储 程序员
JavaWeb之Listener监听器
JavaWeb之Listener监听器
82 0
|
5月前
|
前端开发 JavaScript 算法
javaweb(四)——过滤器与监听器
javaweb(四)——过滤器与监听器
|
5月前
|
存储 JSON 前端开发
JavaWeb中用来定义统一的响应结果的result类
JavaWeb中用来定义统一的响应结果的result类
179 0
|
5月前
分享JavaWeb中filter过滤器的案例妙用 - 脏话过滤/编码过滤/代码过滤
分享JavaWeb中filter过滤器的案例妙用 - 脏话过滤/编码过滤/代码过滤
39 0
下一篇
无影云桌面