maven打好的jar包,真和普通的class文件目录一样,可以直接运行。
我们使用JavaEE提供的Servlet API编写自己的Servlet来处理HTTP请求,将代码打包成war包,再由web服务器运行。
注意:普通的Java程序是通过启动JVM,然后执行main()方法开始运行。war包不能直接运行,必须由web服务器运行。 我们编写的servlet不能直接运行,需要web服务器创建实例运行,所以类似Tomcat这样的Web服务器也称为Servlet容器。Servlet容器只会给每个Servlet类创建唯一实例。Servlet容器会使用多线程执行实例的doGet()或doPost()方法,要注意线程安全。
Servlet容器为每个Web应用程序自动创建一个唯一的ServletContext实例,这个实例就代表了Web应用程序本身,dataSource连接池等全局变量就是绑定在ServletContext上的对象。
java EE web工程代码目录结构:
数据库的发明是为了通过条件快速定位数据。 对于硬盘文件,只能将数据加载到内存,然后遍历查找数据。
HikariCP是最广泛使用的JDBC连接池。
try (Connection conn = ds.getConnection()) { // 在此获取连接
try (PreparedStatement ps = conn
.prepareStatement("SELECT * FROM students WHERE grade = ? AND score >= ?")) {
ps.setInt(1, 3); // 第一个参数grade=?
ps.setInt(2, 90); // 第二个参数score=?
try (ResultSet rs = ps.executeQuery()) {
while (rs.next()) {
students.add(extractRow(rs));
}
}
}
} // 在此“释放”连接
maven工程添加jackson依赖后,加了@ResponseBody注解类的方法,返回的类都会被序列化为json格式。
要控制序列化和反序列化(比如password显示和不显示),可以使用Jackson提供的@JsonIgnore和@JsonProperty注解。
在Servlet模型中,每个请求都是由某个线程处理,开始处理请求,到写入响应完成,都是在同一个线程中处理的。但是,如果一个请求处理的时间较长,例如几秒钟甚至更长,那么,这种基于线程池的同步模型(tomcat)很快就会把所有线程耗尽,导致服务器无法响应新的请求。如果把长时间处理的请求改为异步处理,那么线程池的利用率就会大大提高。
Spring MVC中有两种方式实现Async:
在Java程序中,我们经常遇到一大堆单方法接口:Comparator、Runnable、Callable。单方法接口被称@FunctionalInterface。在接收FunctionalInterface作为参数的时候,可以把实例化的匿名类改写为Lambda表达式,能大大简化代码。
http协议是请求-响应模型,如果客户端不发送请求,服务器不能向客户端发送消息。如果需要向客户端推送消息,只能通过javascript定时轮询,效率很低且实时性不高。 WebSocket在HTTP协议的基础上做了一个简单的升级,即建立TCP连接后,浏览器发送请求时,附带几个头: " aria-hidden="true">{key:defaultValue}")的形式注入
maven工程添加jackson依赖后,加了@ResponseBody注解类的方法,返回的类都会被序列化为json格式。
要控制序列化和反序列化(比如password显示和不显示),可以使用Jackson提供的@JsonIgnore和@JsonProperty注解。
在Servlet模型中,每个请求都是由某个线程处理,开始处理请求,到写入响应完成,都是在同一个线程中处理的。但是,如果一个请求处理的时间较长,例如几秒钟甚至更长,那么,这种基于线程池的同步模型(tomcat)很快就会把所有线程耗尽,导致服务器无法响应新的请求。如果把长时间处理的请求改为异步处理,那么线程池的利用率就会大大提高。
Spring MVC中有两种方式实现Async:
在Java程序中,我们经常遇到一大堆单方法接口:Comparator、Runnable、Callable。单方法接口被称@FunctionalInterface。在接收FunctionalInterface作为参数的时候,可以把实例化的匿名类改写为Lambda表达式,能大大简化代码。
http协议是请求-响应模型,如果客户端不发送请求,服务器不能向客户端发送消息。如果需要向客户端推送消息,只能通过javascript定时轮询,效率很低且实时性不高。 WebSocket在HTTP协议的基础上做了一个简单的升级,即建立TCP连接后,浏览器发送请求时,附带几个头:
Upgrade: websocket
Connection: Upgrade
收到成功响应后表示WebSocket“握手”成功,这时,TCP连接不会关闭,CS可以双向推送数据。可以是text和二进制数据。
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
本文章使用limfx的vscode插件快速发布