当前位置: 首页 > news >正文

JavaWeb编年史(远古时期)

目录

远古时代:纯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项目。

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

相关文章:

  • 【Spring】面向切面编程详解(AOP)
  • 第四课 ceph基础学习-RGW高可用集群和集群测试
  • 幼儿园小程序实战开发教程
  • JavaScript基础总结---重点
  • HashMap和Hashtable(全网最详细)
  • 【趣学算法】Day1 算法简介+斐波那契数列
  • JDK 9-17 新特性介绍
  • 力扣 每日一题 902. 最大为 N 的数字组合【难度:困难,rating: 1989】(数学 / 数位dp)
  • 【微信小程序】电商移动前端API文档
  • 基于FPGA的远程升级系统概述
  • 适用于非科班的深度学习/机器学习快速上手路线
  • 【Python 之 Bluebridge Cup】day_007(涉VIP题,目前没有权限提交,需再提交):阶乘计算(高精度) || 高精度加法
  • 3、初识MySQL
  • Spring事务及分布式事务专题
  • Uniapp零基础开发学习笔记(1) - 项目初步创建
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • CentOS7 安装JDK
  • DOM的那些事
  • JS笔记四:作用域、变量(函数)提升
  • k8s如何管理Pod
  • Material Design
  • quasar-framework cnodejs社区
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • spring cloud gateway 源码解析(4)跨域问题处理
  • Vim 折腾记
  • 翻译--Thinking in React
  • 分布式熔断降级平台aegis
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 机器学习学习笔记一
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 前端之Sass/Scss实战笔记
  • 在Docker Swarm上部署Apache Storm:第1部分
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • raise 与 raise ... from 的区别
  • ​io --- 处理流的核心工具​
  • ​MySQL主从复制一致性检测
  • ​批处理文件中的errorlevel用法
  • #NOIP 2014# day.1 T2 联合权值
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (Forward) Music Player: From UI Proposal to Code
  • (Python) SOAP Web Service (HTTP POST)
  • (SpringBoot)第七章:SpringBoot日志文件
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (规划)24届春招和25届暑假实习路线准备规划
  • (九十四)函数和二维数组
  • (数据结构)顺序表的定义
  • (转)EOS中账户、钱包和密钥的关系
  • (转)人的集合论——移山之道
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器
  • .NET单元测试
  • .ui文件相关
  • @Repository 注解
  • @取消转义