Java框架知识补充

This commit is contained in:
法然
2022-10-26 19:34:45 +08:00
parent b2216ef815
commit ab828a4314
16 changed files with 349 additions and 70 deletions

0
JBoss/01 简介.md Normal file
View File

View File

@@ -0,0 +1,54 @@
## 1 简介
### 概述
JBoss Resteasy是一个遵守JAX-RS 标准的REST的开源项目
RESTEasy是JBoss的一个开源项目提供各类框架帮助你构建RESTful Web Services和RESTful Java应用程序。做为一个JBOSS的项目它固然能和**JBOSS应用服务器**很好地集成在一块儿。可是它也能在任何运行JDK5或以上版本的Servlet容器中运行。
## 2 使用
```java
package com.liao;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.core.Response;
@Path("/message")
public class MessageRestService {
@GET
@Path("/{param}")
public Response printMessage(@PathParam("param") String msg) {
String result = "Restful example : " + msg;
return Response.status(200).entity(result).build();
}
}
```
## Resteasy Client
JAX-RS 2.0介绍了一种新的client API涉及主要3个类Client , WebTarget 和Response。有两种方式来创建一个Client标准的方式和使用ResteasyClientBuilder类后一种方式配置client的方法更少。
```
Client client = ClientBuilder.newClient();
... or...
Client client = ClientBuilder.newBuilder().build();
WebTarget target = client.target("http://foo.com/resource");
Response response = target.request().get();
String value = response.readEntity(String.class);
response.close(); // You should close connections!
ResteasyClient client = new ResteasyClientBuilder().build();
ResteasyWebTarget target = client.target("http://foo.com/resource");
```

View File

@@ -1,8 +1,15 @@
## 1 概述
### 基本概念
JSR(Java Specification Request)-Java规范提案
jax-rs对应JSR370。jax-rs全称Java API for RESTful Services。
java.ws.rs是jax-rs规范中定义的包名。
java.ws.rs是jax-rs规范中定义的包名。jax-rs全称Java API for RESTful Services。jax-rs规范目前版本是2.0规范文档
jax-rs中定义了
* 一组启动方式 (以jee作为http容器 还是配合servlet作为http容器)
@@ -16,6 +23,7 @@ jax-rs中定义了
* Restlet 由Jerome Louvel和Dave Pawson开发 是最早的REST框架 先于JAX-RS出现
* Apache Wink 一个Apache软件基金会孵化器中的项目 其服务模块实现JAX-RS规范
### JSR
## 2 注解
### @Path
注解位置 类注解 方法注解

View File

Before

Width:  |  Height:  |  Size: 101 KiB

After

Width:  |  Height:  |  Size: 101 KiB

View File

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

View File

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 20 KiB

View File

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

View File

@@ -0,0 +1,136 @@
http://www.wjhsh.net/zhangminghui-p-4889761.html
### POJO
POJOPlain Ordinary Java Object简单的Java对象实际就是普通JavaBeans是为了避免和EJB混淆所创造的简称。
使用POJO名称是为了避免和EJB混淆起来, 而且简称比较直接. 其中有一些属性及其getter setter方法的类,没有业务逻辑有时可以作为VO(value -object)或dto(Data Transform Object)来使用.当然,如果你有一个简单的运算属性也是可以的,但不允许有业务方法,也不能携带有connection之类的方法。
### JPA
JPA是Java Persistence API的简称中文名Java持久层API是JDK 5.0注解或XML描述对象关系表的映射关系并将运行期的实体对象持久化到数据库中。 [1]
Sun引入新的JPA ORM规范出于两个原因其一简化现有Java EE和Java SE应用开发工作其二Sun希望整合ORM技术实现天下归一。
容器级特性的支持JPA框架中支持大数据集、事务、并发等容器级事务这使得 JPA 超越了简单持久化框架的局限,在企业应用发挥更大的作用。
### Spring
Spring + Hibernate 常常被称为 Java Web 应用人气最旺的框架组合。而在 JCP 通过的 Web Beans JSR 却欲将JSF + EJB + JPA 、来自 JBoss SeamSpring 除外的一些组件和EJB 3能够提供有基本拦截和依赖注入功能的简化 Session Bean框架的一个 Web 组合进行标准化。Spring 2.0 为 JPA 提供了完整的 EJB容器契约允许 JPA在任何环境内可以在 Spring 管理的服务层使用(包括 Spring 的所有DI 和 AOP增强。同时关于下一个Web应用组合会是 EJB、Spring + Hibernate 还是 Spring + JPA 的论战,早已充斥于耳。
### JavaEE
JavaEE:Java Platform Enterprise Edition
JavaEE是一个分层架构分布式的体系结构。
分层架构: JavaEE由四个层次构成分别是客户层Web层业务层持久层
* 客户层页面展示层运行在客户机上可以访问Web层和业务层。Applet、客户应用程序
* 表示层JSP和Servlet构成的Web页面。Web容器
* 业务层处理程序的业务逻辑主要是一些业务方法的集合。主要框架有SpringSpringMVCStrutsEJB框架等。EJB 构件 EJB容器
* 持久层数据库层JDBCJNDIDataSource等主要一流框架有Mybatis,Hibernate框架等
### EJB
EJB:Enterprise Java Bean,一个重量级的业务层框架,重量级的意思在于其启动时开销大。
Enterprise Java Beans(EJB)称为Java 企业Bean是Java的核心代码分别是会话BeanSession Bean实体BeanEntity Bean和消息驱动BeanMessageDriven Bean
1.JavaBean
  JavaBean(官方解释)是可复用的Java组件严格遵循Sun定义的规范要求JavaBean是一个标准开发者可以直接复用别人写好软件组件而不必理解它内部的工作机制。简单来说一个JavaBean应该有下面几个特点
  >类应该是public的
  >属性应该private的对于属性值的访问应该是要通过getXX,setXX,isXXX方法isXXX是用于检查元素的值是否是Boolean的。
  >该类应该有一个无参的构造函数元素值的初始化要通过setXXX方法。
  >这个类应该是实现了Serializable 接口(java.io.Externalizable),这个是为了持久化存储的需要。
 例如:
package com.example;
import java.io.Serializable;
public class Bar implements Serializable {
private String name = null;
private boolean flag = false;
public Bar() {
}
public String getName() {
return this.name;
}
public void setName(final String name) {
this.name = name;
}
public boolean isFlag() {
return this.flag;
}
public void setFlag(final boolean flag) {
this.flag = flag;
}
}
 2.EJB(Enterprise Java Bean)
  EJB是运行在一个J2EE服务器上的Java类它用于处理业务逻辑的应该是这样的
   >有状态Stateful
   >无状态的(Stateless)
   >实体(Entity)
   >消息驱动BeanMessage Driven Beans
举例无状态Bean
 
@Stateless
public class EmployeeServiceBean {
@PersistenceContext
EntityManager em;
public void addEmployee(Employee emp) {
em.persist(emp);
}
}
Read more: http://www.javaexperience.com/difference-between-pojo-javabean-ejb/#ixzz3otv2sKDE
  说明因为EJB2.0和EJB被要求是实现EJBobject 接口和指明EJB的部署类型所以在EJB3.0中引入了注解来简化开发步骤。
3.POJO(Plain Old Java Object)
  一个POJO没有要求去实现了一个接口或者继承一个类也没有任何的指导信息。POJO最大的不同之处就是它和EJB无关。Java是一个简化的JavaBean我们之所以叫它是是简化的bean是因为它只用于装载数据而不用业务逻辑的处理。一个持久化的POJO就是PO如果用于展示层那么它就是VO .
4.1.PO(persistant object ):持久化对象
  持久对象,可以看成是与数据库中的表相映射的java对象。最简单的PO就是对应数据库中某个表中的一条记录多个记录可以用PO的集合。PO中应该不包含任何对数据库的操作。
4.2.VO(Value Object)
  一个值对象就是一个含有值的对象比如java.lang.Integer.VO:通常用于业务层之间的数据传递和PO一样也是仅仅包含数据而已。但应是抽象出的业务对象,可以和表对应,也可以不,这根据业务的需要.个人觉得同DTO(数据传输对象),在web上传递。
4.3.DAO:data access object
  数据访问对象是一个sun的一个标准j2ee设计模式 此对象用于访问数据库。通常和PO结合使用DAO中包含了各种数据库的操作方法。通过它的方法,结合PO对数据库进行相关的操作。夹在业务逻辑与数据 库资源中间。配合VO, 提供数据库的CRUD操作。
4.4.DODomain Object
  领域对象,就是从现实世界中抽象出来的有形或无形的业务实体。
4.5.VOView Object
  视图对象,用于展示层,它的作用是把某个指定页面(或组件)的所有数据封装起来。
4.6. BO( Business object)
  用于调用DAO的业务逻辑类并且将PO和VO联合起来进行业务操作。
4.7.DTO(Data Transfer Object)
  主要用于远程调用中的传输对象。比如说一个100个字段的表就对应于PO中的100个属性但是我们的接口只需要10个字段。那么我们就可以将只含有十个字段的DTO传递给客户端使用。这不会向客户端暴露表结构一旦它和接口关联起来那么它就是VO了。

View File

@@ -0,0 +1,75 @@
# 网络技术栈
> [参考文档](http://c.biancheng.net/servlet2/container.html)
> [参考文档](https://blog.csdn.net/weixin_47975351/article/details/124655111)
![](image/2022-10-12-19-01-07.png)
### web服务器
部署动态网站一般需要 Web 服务器的支持,例如:
* 运行 PHP 网站一般选择 Apache 或者 Nginx
* 运行 ASP/ASP.NET 网站一般选择 IIS
* 运行 Python 网站一般选择内置的 WSGI 服务器模块——wsgiref。
Web 服务器是一种对外提供 Web 服务的软件,它可以接收浏览器的 HTTP 请求,并将处理结果返回给浏览器。
在部署 Servlet 网站时,同样需要一种类似的软件,例如 Tomcat、Jboss、Jetty、WebLogic 等但是它们通常被称为“容器”而不是“服务器”这究竟是为什么呢Servlet 容器和传统意义上的服务器有什么不同呢?
我们通常所说的 Web 服务器,比如 Apache、Nginx、IIS 等,它们的功能往往都比较单一,只能提供 http(s) 服务让用户访问静态资源HTML 文档、图片、CSS 文件、JavaScript 文件等),它们不能执行任何编程语言,也不能访问数据库,更不能让用户注册和登录。
也就是说,如果只有 Web 服务器那您只能部署静态网站不能部署动态网站。要想部署动态网站必须要有编程语言运行环境运行时Runtime的和数据库管理系统的支持。
部署动态网站一般至少需要三个组件,分别是 Web 服务器、脚本语言运行时和数据库,例如,部署 PHP 网站一般选择「Apache + PHP 运行时 + MySQL」的组合。
![](image/2022-10-12-19-07-25.png)
### Web容器
> 简单来说Web容器就是让java能够像脚本语言一样响应用户请求的工具。
Servlet 是基于 Java 语言的,运行 Servlet 必然少不了 JRE 的支持,它负责解析和执行字节码文件(.class文件。然而 JRE 只包含了 Java 虚拟机JVM、Java 核心类库和一些辅助性性文件,它并不支持 Servlet 规范。要想运行 Servlet 代码,还需要一种额外的部件,该部件必须支持 Servlet 规范,实现了 Servlet 接口和一些基础类,这种部件就是 Servlet 容器。
Servlet 容器就是 Servlet 代码的运行环境(运行时),它除了实现 Servlet 规范定义的各种接口和类,为 Servlet 的运行提供底层支持,还需要管理由用户编写的 Servlet 类,比如实例化类(创建对象)、调用方法、销毁类等。
Servlet 中的容器和生活中的容器是类似的概念生活中容器用来装水、装粮食Servlet 中的容器用来装类,装对象。
读者可能会提出疑问,我们自己编写的 Servlet 类为什么需要 Servlet 容器来管理呢?这是因为我们编写的 Servlet 类没有 main() 函数,不能独立运行,只能作为一个模块被载入到 Servlet 容器,然后由 Servlet 容器来实例化,并调用其中的方法。
一个动态页面对应一个 Servlet 类,开发一个动态页面就是编写一个 Servlet 类当用户请求到达时Servlet 容器会根据配置文件web.xml来决定调用哪个类。
![](image/2022-10-12-19-11-25.png)
1. 您看Web 服务器是整个动态网站的“大门”,用户的 HTTP 请求首先到达 Web 服务器Web 服务器判断该请求是静态资源还是动态资源:如果是静态资源就直接返回,此时相当于用户下载了一个服务器上的文件;如果是动态资源将无法处理,必须将该请求转发给 Servlet 容器。
2. Servlet 容器接收到请求以后会根据配置文件web.xml找到对应的 Servlet 类将它加载并实例化然后调用其中的方法来处理用户请求处理结束后Servlet 容器将处理结果再转交给 Web 服务器,由 Web 服务器将处理结果进行封装,以 HTTP 响应的形式发送给最终的用户。
常用的 Web 容器有 Tomcat、Jboss、Jetty、WebLogic 等,其中 Tomcat 由 Java 官方提供,是初学者最常使用的。
为了简化部署流程Web 容器往往也会自带 Web 服务器模块,提供基本的 HTTP 服务,所以您可以不用再安装 Apache、IIS、Nginx 等传统意义上的服务器,只需要安装一款 Web 容器,就能部署 Servlet 网站了。正是由于这个原因,有的教材将 Tomcat 称为 Web 容器,有的教材又将 Tomcat 称为 Web 服务器,两者的概念已经非常模糊了。
将 Web 容器当做服务器使用后,上面的流程图就变成了下面的样子:
![](image/2022-10-12-19-13-49.png)
> 注意Servlet 容器自带的 Web 服务器模块虽然没有传统的 Web 服务器强大,但是也足以应付大部分开发场景,对初学者来说是足够的。当然,您也可以将传统的 Web 服务器和 Servlet 容器组合起来,两者分工协作,各司其职,共同完成 HTTP 请求。
总结,Servlet 容器就是 Servlet 程序的运行环境,它主要包含以下几个功能:
* 实现 Servlet 规范定义的各种接口和类,为 Servlet 的运行提供底层支持;
* 管理用户编写的 Servlet 类,以及实例化以后的对象;
* 提供 HTTP 服务,相当于一个简化的服务器。
容器提供什么
* 通讯支持利用容器提供的方法可以轻松的让servlet与web服务器对话无需自己建立ServerSocket、监听端口、创建流等。容器知道自己与Web服务器之间的协议。
* 生命周期的管理控制着Servlet的生与死。
* 多线程支持容器会自动的为其接收的每个Servlet请求创建一个新的Java线程。
* 声明方式实现安全利用容器可以使用XML部署描述文件来配置和修改安全性而不必将其硬编码写入到Servlet(或其他)类代码中。
* JSP支持将JSP翻译成Java。
## 常见的Java web容器和服务器

View File

@@ -0,0 +1,51 @@
> [参考文献](https://www.zhihu.com/question/37962386)
# 概念介绍
> 想起我们Java老师经典的话jsp就是在html里面写java代码servlet就是在java里面写html代码…其实jsp经过容器解释之后就是servlet.
> 当前后端分离以后就不需要再Servlet里写html代码了。只需要完成业务逻辑返回序列化的原始数据由前端自行渲染。所以现在的所有前后端分离技术像Spring这种后端框架本质上也是创建servlet的。
## Servlet
Servlet其实就是一个遵循Servlet开发的java类。Servlet是由服务器调用的运行在服务器端。
* Java基本程序依赖jdk和jre就能在虚拟机上运行
* servlet是一种特殊的Java类遵循新的标准和规范需要web容器才能提供web服务没有主类根据映射选择性执行的Java程序例如tomcat。相当于为了扩展java无法作为动态语言提供web服务的建立了新的java技术标准但是需要额外的运行环境支撑。web容器就是servlet的运行环境。
ervlet是使用Java Servlet 应用程序设计接口API及相关类和方法的 Java 程序。除了 Java Servlet APIServlet 还可以使用用以扩展和添加到 API 的 Java 类软件包。Servlet 在启用 Java 的 Web 服务器上或应用服务器上运行并扩展了该服务器的能力。Java servlet对于Web服务器就好象Java applet对于Web浏览器。Servlet装入Web服务器并在Web服务器内执行而applet装入Web浏览器并在Web浏览器内执行。Java Servlet API 定义了一个servlet 和Java使能的服务器之间的一个标准接口这使得Servlets具有跨服务器平台的特性。
Servlet 通过创建一个框架来扩展服务器的能力,以提供在 Web 上进行请求和响应服务。当客户机发送请求至服务器时,服务器可以将请求信息发送给 Servlet并让 Servlet 建立起服务器返回给客户机的响应。 当启动 Web 服务器或客户机第一次请求服务时,可以自动装入 Servlet。装入后 Servlet 继续运行直到其它客户机发出请求。Servlet 的功能涉及范围很广。例如Servlet 可完成如下功能:
(1) 创建并返回一个包含基于客户请求性质的动态内容的完整的 HTML页面。
(2) 创建可嵌入到现有 HTML 页面中的一部分 HTML 页面HTML 片段)。
(3) 与其它服务器资源(包括数据库和基于 Java 的应用程序)进行通信。
(4) 用多个客户机处理连接接收多个客户机的输入并将结果广播到多个客户机上。例如Servlet 可
以是多参与者的游戏服务器。
(5) 当允许在单连接方式下传送数据的情况下在浏览器上打开服务器至applet的新连接并将该连
接保持在打开状态。当允许客户机和服务器简单、高效地执行会话的情况下applet也可以启动客户浏览器和服务器之间的连接。可以通过定制协议或标准如 IIOP进行通信。
(6) 对特殊的处理采用 MIME 类型过滤数据例如图像转换和服务器端包括SSI
(7) 将定制的处理提供给所有服务器的标准例行程序。例如Servlet 可以修改如何认证用户。
## JSP
JSP全名为Java Server Pagesjava服务器页面。JSP是一种基于文本的程序其特点就是HTML和Java代码共同存在
JSP是为了简化Servlet的工作出现的替代品Servlet输出HTML非常困难JSP就是替代Servlet输出HTML的。
在Tomcat博客中我提到过Tomcat访问任何的资源都是在访问Servlet当然了JSP也不例外JSP本身就是一种Servlet。为什么我说JSP本身就是一种Servlet呢其实JSP在第一次被访问的时候会被编译为HttpJspPage类该类是HttpServlet的一个子类
编译过程是这样子的:
1. 浏览器第一次请求1.jsp时Tomcat会将1.jsp转化成1_jsp.java这么一个类并将该文件编译成class文件。
2. 编译完毕后再运行class文件来响应浏览器的请求。以后访问1.jsp就不再重新编译jsp文件了直接调用class文件来响应浏览器。当然了如果Tomcat检测到JSP页面改动了的话会重新编译的。
3. 既然JSP是一个Servlet那JSP页面中的HTML排版标签是用write()出去的罢了。说到底JSP就是封装了Servlet的java程序罢了。

BIN
Linux/Linux工具命令/.DS_Store vendored Normal file

Binary file not shown.

View File

@@ -32,74 +32,7 @@ Spring5添加的新模块。用于web开发的功能与SpringMVC类似。Webf
### 使用场景:网关
* 需要处理大量的请求。所有客户调用网关,网关负责调用其他的组件。可以使用异步的方式。
## 2 网络技术栈
> [参考文档](http://c.biancheng.net/servlet2/container.html)
![](image/2022-10-12-19-01-07.png)
### web服务器
部署动态网站一般需要 Web 服务器的支持,例如:
* 运行 PHP 网站一般选择 Apache 或者 Nginx
* 运行 ASP/ASP.NET 网站一般选择 IIS
* 运行 Python 网站一般选择内置的 WSGI 服务器模块——wsgiref。
Web 服务器是一种对外提供 Web 服务的软件,它可以接收浏览器的 HTTP 请求,并将处理结果返回给浏览器。
在部署 Servlet 网站时,同样需要一种类似的软件,例如 Tomcat、Jboss、Jetty、WebLogic 等但是它们通常被称为“容器”而不是“服务器”这究竟是为什么呢Servlet 容器和传统意义上的服务器有什么不同呢?
我们通常所说的 Web 服务器,比如 Apache、Nginx、IIS 等,它们的功能往往都比较单一,只能提供 http(s) 服务让用户访问静态资源HTML 文档、图片、CSS 文件、JavaScript 文件等),它们不能执行任何编程语言,也不能访问数据库,更不能让用户注册和登录。
也就是说,如果只有 Web 服务器那您只能部署静态网站不能部署动态网站。要想部署动态网站必须要有编程语言运行环境运行时Runtime的和数据库管理系统的支持。
部署动态网站一般至少需要三个组件,分别是 Web 服务器、脚本语言运行时和数据库,例如,部署 PHP 网站一般选择「Apache + PHP 运行时 + MySQL」的组合。
![](image/2022-10-12-19-07-25.png)
### Web容器
> 简单来说Web容器就是让java能够像脚本语言一样响应用户请求的工具。
Servlet 是基于 Java 语言的,运行 Servlet 必然少不了 JRE 的支持,它负责解析和执行字节码文件(.class文件。然而 JRE 只包含了 Java 虚拟机JVM、Java 核心类库和一些辅助性性文件,它并不支持 Servlet 规范。要想运行 Servlet 代码,还需要一种额外的部件,该部件必须支持 Servlet 规范,实现了 Servlet 接口和一些基础类,这种部件就是 Servlet 容器。
Servlet 容器就是 Servlet 代码的运行环境(运行时),它除了实现 Servlet 规范定义的各种接口和类,为 Servlet 的运行提供底层支持,还需要管理由用户编写的 Servlet 类,比如实例化类(创建对象)、调用方法、销毁类等。
Servlet 中的容器和生活中的容器是类似的概念生活中容器用来装水、装粮食Servlet 中的容器用来装类,装对象。
读者可能会提出疑问,我们自己编写的 Servlet 类为什么需要 Servlet 容器来管理呢?这是因为我们编写的 Servlet 类没有 main() 函数,不能独立运行,只能作为一个模块被载入到 Servlet 容器,然后由 Servlet 容器来实例化,并调用其中的方法。
一个动态页面对应一个 Servlet 类,开发一个动态页面就是编写一个 Servlet 类当用户请求到达时Servlet 容器会根据配置文件web.xml来决定调用哪个类。
![](image/2022-10-12-19-11-25.png)
1. 您看Web 服务器是整个动态网站的“大门”,用户的 HTTP 请求首先到达 Web 服务器Web 服务器判断该请求是静态资源还是动态资源:如果是静态资源就直接返回,此时相当于用户下载了一个服务器上的文件;如果是动态资源将无法处理,必须将该请求转发给 Servlet 容器。
2. Servlet 容器接收到请求以后会根据配置文件web.xml找到对应的 Servlet 类将它加载并实例化然后调用其中的方法来处理用户请求处理结束后Servlet 容器将处理结果再转交给 Web 服务器,由 Web 服务器将处理结果进行封装,以 HTTP 响应的形式发送给最终的用户。
常用的 Web 容器有 Tomcat、Jboss、Jetty、WebLogic 等,其中 Tomcat 由 Java 官方提供,是初学者最常使用的。
为了简化部署流程Web 容器往往也会自带 Web 服务器模块,提供基本的 HTTP 服务,所以您可以不用再安装 Apache、IIS、Nginx 等传统意义上的服务器,只需要安装一款 Web 容器,就能部署 Servlet 网站了。正是由于这个原因,有的教材将 Tomcat 称为 Web 容器,有的教材又将 Tomcat 称为 Web 服务器,两者的概念已经非常模糊了。
将 Web 容器当做服务器使用后,上面的流程图就变成了下面的样子:
![](image/2022-10-12-19-13-49.png)
> 注意Servlet 容器自带的 Web 服务器模块虽然没有传统的 Web 服务器强大,但是也足以应付大部分开发场景,对初学者来说是足够的。当然,您也可以将传统的 Web 服务器和 Servlet 容器组合起来,两者分工协作,各司其职,共同完成 HTTP 请求。
总结,Servlet 容器就是 Servlet 程序的运行环境,它主要包含以下几个功能:
* 实现 Servlet 规范定义的各种接口和类,为 Servlet 的运行提供底层支持;
* 管理用户编写的 Servlet 类,以及实例化以后的对象;
* 提供 HTTP 服务,相当于一个简化的服务器。
容器提供什么
* 通讯支持利用容器提供的方法可以轻松的让servlet与web服务器对话无需自己建立ServerSocket、监听端口、创建流等。容器知道自己与Web服务器之间的协议。
* 生命周期的管理控制着Servlet的生与死。
* 多线程支持容器会自动的为其接收的每个Servlet请求创建一个新的Java线程。
* 声明方式实现安全利用容器可以使用XML部署描述文件来配置和修改安全性而不必将其硬编码写入到Servlet(或其他)类代码中。
* JSP支持将JSP翻译成Java。
## 3 响应式编程
## 2 响应式编程
### 响应式编程定义
响应式编程是一种面向数据流和变化产波的编程范式。

18
hello.txt Normal file
View File

@@ -0,0 +1,18 @@
hhhhhello
world
world
world
world
this is my first vim command;
pppp
hello
"hello"hello
new line insert
world
pppp
pppp
hello
ihello i am vim command;
pppp
hello

View File

@@ -1,4 +1,5 @@
git push -f git@github.com:Estom/notes.git
# 将笔记推送到不同的仓库中
git push git@github.com:Estom/notes.git
git push git@github.com:Estom/notes.git
@@ -6,3 +7,6 @@ git push git@github.com:Estom/notes.git
find . -name "*.java" -exec wc -l {} \;#利用exec参数
find . -name "*.java" |xargs wc -l # 利用xargs参数
find . -name "*.java" -exec wc -l {} \; | awk 'BEGIN{num=0} {num+=$1;print $1;}END{print num}'
# 查看今天的日志
find . -name "*.log" | xargs grep "wrod"