—— Feellmoose

视频链接: 无

Contents

  • JavaEE
    • applet
    • servlet
    • Jsp
    • EJB
  • framework
    • Struts
    • spring
    • springMVC
    • springboot
    • ssm

Java EE

Applet

上世纪90年代,随着Internet和浏览器的飞速发展,基于浏览器的B/S模式随之火爆发展起来。最初,用户使用浏览器向web服务器发送的请求都是请求静态的资源。

为了满足简单的动态需求,当时开发个人浏览器的Netscape公司与sun公司合作开发了可以在网页中嵌套的小程序,sun公司为其起名为Java Applet,此时还处于Java1.0阶段,但是由于Java语言企业级的抽象不适合于这个种小程序的开发,Netscape公司最终选择重新开发一门语言更加灵活的语言,这就是大家所熟悉的Java script。

Servlet

但是1993年出现的CGI技术使得后端生成动态页面成为可能,后端不再直接返回静态资源,而是可以动态的处理数据,并返回动态资源。在1997年,Java推出一种技术以支持CGI技术,这就是Servlet。它是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。

CGI:通用网关接口(Common Gateway Interface)是一个Web服务器主机提供信息服务的标准接口。通过CGI接口,Web服务器就能够获取客户端提交的信息,转交给服务器端的CGI程序进行处理,最后返回结果给客户端。

使用Servlet技术,页面中的所有信息需要通过输出语句来生成。

  1. servlet代码有大量冗余代码,out输出就得写上百遍;
  2. 开发servlet必须精通网页前端和美工,你得非常不直观的在servlet中写前端代码,这使得实现各种页面效果和风格非常困难。
1
2
3
4
5
6
7
8
9
10
11
public void doGet(HttpServletRequest request,HttpServletResponse response)
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>");
}

Jsp

在1999年sun公司推出了Jsp(Java server pages),采用HTML语言直接生成界面。

此时Jsp+Javabean+Servlet已经首次应用到了MVC思想。

JSP:V,JSP完成输入和输出,主要使用HTML标签和JSP标签

Servlet:C,主要完成控制,接收请求,调用业务处理(JavaBean),根据调用的结果找到一个JSP页面对用户进行响应

JavaBean:M,完成所有的处理过程

JavaBeans是Java中一种特殊的类,可以将多个对象封装到一个对象bean中。特点是可序列化,提供无参构造器无参构造器,提供getter方法和setter方法访问对象的属性。名称中的bean是用于Java的可重用软件组件的惯用叫法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<% // 在JSP中使用PersonBean %>
<jsp:useBean id="person" class="player.PersonBean" scope="page"/>
<jsp:setProperty name="person" property="*"/>

<html>
<body>
姓名:<jsp:getProperty name="person" property="name"/><br/>
<br/>
<form name="beanTest" method="POST" action="testPersonBean.jsp">
输入姓名:<input type="text" name="name" size="50"><br/>
<input type="submit" value="测试此JavaBean">
</form>
</body>
</html>

EJB

EJB是一种特殊的Javabean,其最大的特点是可序列化。其发展带来的优点:

  1. 容器化管理组件
  2. 定义了标准规则

EJB是一个封装有某个应用程序之业务逻辑服务器端组件。EJB以一个标准方式自动处理了诸如数据持久化,事务集成,安全对策等不同应用的共有问题,使得软件开发人员可以专注于程序的特定需求而不再饱受那些非业务元素的困扰。

Java EE

上述技术逐渐发展完善,形成了如下图的开发模式:

Framework

在实际使用过程中,JavaEE遇到了以下问题:

  1. Jsp页面中嵌入了很多Java代码,使得结构很乱
  2. 对于大型项目,容器中Servlet过多,转向频繁,流程,配置等不易集中管理
  3. Java EE逻辑复杂,重量级高 ,难以开发,耦合严重,效率低下

此时开发者们决定自发开发web框架来简化开发,提高效率。

Struts

2001年6月,struts1.0出现,struts针对jsp推出了一套struts标签,从而使得jsp中没有了Java代码,结构清晰,功能强大。

针对servlet,它提供了Action类来代替了servlet,这个Action类具有servlet的功能,并且能够进行一些请求过滤和自动转码的功能。

但是它依旧没有解决开发过程中遇到的耦合严重问题,当程序需要增加新功能或者需要取消某些功能时,无疑是非常困难的。

Spring

EJB重量级大复杂度高,这时诞生的轻量级的Spring诞生替代了EJB。

Spring有两大功能:IOC(控制反转)和AOP(面向切面的编程)

IOC的思想就是所有的对象由Spring框架来负责创建,分配和管理,从而降低了程序中的耦合性。

Spring MVC

SpringMVC重新整合了Servlet和Jsp,通过DispatchServlet解析分发请求给Controller层,控制层处理分发到Service层,最后由Repository层负责与数据库通信,一切完成后再由DispatchServlet解析视图结果并返回,后端服务逻辑和前端控制器进一步解耦

这时Spring需要使用xml进行bean的注册和配置,这一过程依旧非常的繁琐,在Spring2.5支持注解注册和配置。

  1. DispatchServlet通过Handlermapping获取HandlerExecutionChain负责转发和拦截请求

  2. Controller负责调用服务,最后组合视图返回ModelAndView

  3. DispatchServlet通过ViewResolver解析Controller返回的ModelAndView

Spring Boot

解决开发效率问题,将配置减到最少,SpringBoot加入了绝大部分的自动配置。开箱即用,极大增强了开发效率。

SSM

SpringMVC,SpringBoot,Mybatis

SpringMVC为Web框架,Springboot负责简化配置,Mybatis则代替了Spring-Data-JPA与数据库交互。

Whats Next?

微服务Microservices,容器化Container,运维Dev-Ops,

事件驱动Event-driving,协程Coroutine,响应式开发Reactive..

总结

  1. applet效率低,开发难度大,逐渐退出历史的舞台
  2. Servlet+Jsp+JavaBean首次出现了MVC思想
  3. EJB企业级JavaBean被Spring和POJO取代
  4. Struts用来优化Jsp
  5. SpringMVC逐渐一统天下
  6. 更快捷的开发SpringBoot
  7. 新的技术依旧在诞生…

参考资料

JavaScript 的发展史 - 知乎 (zhihu.com)

轻量级框架与重量级框架 | 忆桐之家的博客 (hongyitong.github.io)

spring mvc(四):请求执行流程(一)之获取Handler - 掘金 (juejin.cn)