时隔一年再看 JavaWeb

共 5773字,需浏览 12分钟

 ·

2021-03-26 07:23

公众号关注 “GitHub今日热榜
设为 “星标”,带你挖掘更多开发神器!






一 ,原始时代(Servlet出现之前)


在上世纪90年代,因为nternet和浏览器的飞速发展,使得基于浏览器的B/S模式随之火爆发展起来。最初,用户使用浏览器向WEB服务器发送的请求都是请求静态的资源,比如html、css等。


CGI阶段,有兴趣可以去了解,CGI全称是通用网关接口,是一种Web规范,几乎是所有的语言都能够写CGI,甚至Shell;


这一阶段,服务器比较弱,请求也很简单,就是用户发一个请求,服务器接收后新建进程,然后返回结果;但是动态网站才是趋势,强大的java肯定不要错失良机,Servlet技术诞生了。


二,石器时代(Servlet来了)


来段代码感受一下


import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/demo2")
public class servletdemo2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("dogit");
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("dopost");
    }
}


但是代码编写时,恶心的事情发生了>>>>表现、逻辑、控制、业务全部混在Servlet类中;


public void doGet(HttpServletRequest request,HttpServletResponse)
   throws IOException,ServletException
{
    response.setContentType("text/html;charset=gb2312");
    PrintWriter out = response.getWriter();
    out.println("<html>");
    out.println("<head><title>Hello World!</title></head>");
    out.println("<body>");
    out.println("<p>Hello World!</p>");
    out.println("</body></html>");
}


三,青铜时代(Java Server Page)


老一辈程序猿的快乐来了------JSP


JSP全称Java Server Pages,是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头以%>结束。JSP是一种Java servlet,主要用于实现Java web应用程序的用户界面部分。网页开发者们通过结合HTML代码、XHTML代码、XML元素以及嵌入JSP操作和命令来编写JSP。JSP通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。

JSP程序与CGI程序有着相似的功能,但和CGI程序相比,JSP程序有如下优势:

    

  • JSP标签有多种功能,比如访问数据库、记录用户选择信息、访问JavaBeans组件等,还可以在不同的网页中传递控制信息和共享信息。

  • JSP程序与CGI程序有着相似的功能,但和CGI程序相比,JSP程序有如下优势:

  • JSP性能更加优越,因为JSP可以直接在HTML网页中动态嵌入元素而不需要单独引用CGI文件。

  

服务器调用的是已经编译好的JSP文件,而不像CGI/Perl那样必须先载入解释器和目标脚本。JSP 基于Java Servlet API,因此,JSP拥有各种强大的企业级Java API,包括JDBC,JNDI,EJB,JAXP等等。JSP页面可以与处理业务逻辑的Servlet 一起使用,这种模式被Java servlet 模板引擎所支持。最后,JSP是Java EE不可或缺的一部分,是一个完整的企业级应用平台。这意味着JSP可以用最简单的方式来实现最复杂的应用。


<%@page import="servlet.user" %>
<%@ page import="java.util.Date" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>jspdemo</title>
</head>
<body>
<%
    user user = new user();
    user.setUsername("张三");
    user.setId(1001);
    user.setPassword(new Date().toString());
    request.setAttribute("u", user);
%>

<h1>获取对象中的值</h1>
${requestScope.u}

</body>
</html>


然后问题又来了,虽然JSP可以实现网站快速开发,但是维护不方便,对程序猿极其不友好;


四,铁器时代(Servlet+JSP+JavaBean)


MVC框架模式迎来曙光。


从servlet一直到三层架构的转变,其实都是为了实现高内聚,低耦合。


一个模块最好只实行一个功能。这个是所谓的“内聚”; 模块与模块之间、系统与系统之间的交互,是不可避免的,但是我们要尽量减少由于交互引起的单个模块无法独立使用或者无法移植的情况发生, 尽可能多的单独提供接口用于对外操作, 这个就是所谓的“低耦合”;


V即View视图是指用户看到并与之交互的界面。比如由html元素组成的网页界面,或者软件的客户端界面。MVC的好处之一在于它能为应用程序处理很多不同的视图。在视图中其实没有真正的处理发生,它只是作为一种输出数据并允许用户操纵的方式。

    

M即model模型是指模型表示业务规则。在MVC的三个部件中,模型拥有最多的处理任务。被模型返回的数据是中立的,模型与数据格式无关,这样一个模型能为多个视图提供数据,由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。

    

C即controller控制器是指控制器接受用户的输入并调用模型和视图去完成用户的需求,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后再确定用哪个视图来显示返回的数据。


五,至今(框架来了)


Struts的出现


2001年6月,struts1.0出现,struts针对jsp推出了一套struts标签,从而使得jsp中没有了Java代码,结构清晰,功能强大。针对servlet,它提供了Action类来代替了servlet,这个Action类具有servlet的功能,并且能够进行一些请求过滤和自动转码的功能。


SSH SSM三大框架组合,无论怎么样的框架,万变不离其宗,Servlet才是真正的根基,框架只是个工具,让开发更简单;


Spring家族的出现


  • 前后端分离+SpringMvc(刚需)

  • SpringBoot+SpringCloud 微服务思想兴起

    

以往我们开发应用程序都是单体型,虽然开发和部署比较方便,但后期随着业务的不断增加,开发迭代和性能瓶颈等问题,将会困扰开发团队,微服务就是解决此问题的有效手段,微服务最重要的特点就是服务拆分,各服务之间相互调用;但是这些服务又可能部署在不同服务器上,那服务之间怎么远程调用呢?

    

迎来RPC跟HTTP两者先争,其中最著名的两个 Dubbo(阿里巴巴) 和 Spring Cloud 框架


  • RPC 远端过程调用

    

其调用协议通常包含传输协议和编码协议,Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,以及 SOA 服务治理方案。简单的说,Dubbo 就是个服务框架,说白了就是个远程服务调用的分布式框架。



  • 基于 HTTP 的 REST 方式

    

Spring Cloud 抛弃了 Dubbo 的 RPC 通信,采用的是基于 HTTP 的 REST 方式。严格来说,这两种方式各有优劣。虽然从一定程度上来说,后者牺牲了服务调用的性能,但也避免了上面提到的原生 RPC 带来的问题。而且 REST 相比 RPC 更为灵活,服务提供方和调用方的依赖只依靠一纸契约,不存在代码级别的强依赖,这在强调快速演化的微服务环境下,显得更加合适



Dubbo 专注 RPC 和服务治理,Spring Cloud 则是一个微服务架构生态。


个人认为对于一些中小型企业 Spring Cloud 可能是一个更好的选择,具体区别我们还可以进一步了解。。。。


  • Spring cloud Alibaba


Alibaba牛逼!

    

有了spring cloud这个微服务的框架,为什么又要使用spring cloud alibaba这个框架了?最重要的原因在于spring cloud中的几乎所有的组件都使用Netflix公司的产品,然后在其基础上做了一层封装。然而Netflix的服务发现组件Eureka已经停止更新,Nacos注册中心来了;

    

注册中心Nacos

    

nacos是阿里巴巴研发的一个集注册中心与配置中心于一体的管理平台,使用其他非常的简单。下载地址为:https://github.com/alibaba/nacos/releases

    

  • Service Mesh服务网格

    

另一种趋势,值得我们期待:

    

如果用一句话来解释什么是 Service Mesh,可以将它比作是应用程序或者说微服务间的 TCP/IP,负责服务之间的网络调用、限流、熔断和监控。对于编写应用程序来说一般无须关心 TCP/IP 这一层(比如通过 HTTP 协议的 RESTful 应用),同样使用 Service Mesh 也就无须关系服务之间的那些原来是通过应用程序或者其他框架实现的事情,比如 Spring Cloud、OSS,现在只要交给 Service Mesh 就可以了。



出处:https://blog.csdn.net/weixin_44313584/article/details/110494868








关注GitHub今日热榜,专注挖掘好用的开发工具,致力于分享优质高效的工具、资源、插件等,助力开发者成长!







点个在看 你最好看


浏览 37
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报