下面的知识主要就是Servlet,JSP,EL这个顺序去总结,把基础打扎实
Servlet
首先咱们肯定一直听说Servlet,经常说servlet容器,但是具体Servlet是个啥呢。咱们今天就去深入探讨一下。
咱们看一下菜鸟权威教程的解释
Java Servlet是运行在Web服务器或应用服务器上的"程序",这里用引号突出重点,它是作为来自web浏览器或其他HTTP客户端的请求和HTTP服务器上的数据库或应用程序之间的中间层。
使用Servlet,可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。Java Servlet通常情况下与使用CGI(公共网关接口)实现的程序可以达到异曲同工的效果,
servlet的优势
性能明显要好、
Servlet 在 Web 服务器的地址空间内执行。这样它就没有必要再创建一个单独的进程来处理每个客户端请求。
Servlet 是独立于平台的,因为它们是用 Java 编写的、
服务器上的 Java 安全管理器执行了一系列限制,以保护服务器计算机上的资源。因此,Servlet 是可信的。
Java 类库的全部功能对 Servlet 来说都是可用的。它可以通过 sockets 和 RMI 机制与 applets、数据库或其他软件进行交互。
这是servlet在web应用程序中的位置
ok 过了一遍,咱们概述一下
servlet是个啥捏
1、它是运行在服务器端的程序,是客户端请求和HTTP服务器响应之间的中间层
2、Servlet是Java编写的,是独立于平台的。
3、Servlet就是一个接口,定义了Java类被浏览器访问到的规则(Tomcat的识别过程)。
4、程序员只需要定义一个类,实现Servlet接口,重写方法。
Servlet运行原理
1、当服务器接受到客户端浏览器的请求后,会解析请求URL路径,获取访问的Servlet的资源路径
2、查找web.xml文件,是否有对应的<url-pattern>
标签体内容
3、如果有的话,再找到对应的<servlet-class>
全类名。
4、tomcat会将字节码文件加载进内存,并且创建其对象
5、调用其方法
Servlet生命周期
Serlvet是有生命周期的,而Servlet的执行过程。也就是Servlet的生命周期。
1、Servlet初始化后调用init()方法。
2、Servlet调用service()方法来处理客户端的请求。
3、Servlet销毁前调用destroy()方法。
4、Servlet是由JVM的垃圾回收器进行垃圾回收的。
咱们进行详细探讨一下
init()方法:第一次访问时,Servlet被创建,执行init方法,只执行一次。它在第一次创建 Servlet 时被调用,在后续每次用户请求时不再调用。因此,它是用于一次性初始化
public void init() throws ServletException {
// 初始化代码...
}
可以配置Servlet的创建时机:
<load-on-startup>的值为负数:第一次被访问时,创建。默认值为-1
<load-on-startup>的值为0或正整数:在服务器启动时创建
service()方法:每次访问Servlet时,service都会被调用一次,可以执行多次。service()方法是执行实际任务的主要方法,Servlet容器(Web容器)调用service()方法用来处理来自客户端(浏览器)的请求,并把格式化的响应写回给客户端。
每次服务器接收到一个 Servlet 请求时,服务器会产生一个新的线程并调用服务。service() 方法检查 HTTP 请求类型(GET、POST、PUT、DELETE 等),并在适当的时候调用 doGet、doPost、doPut,doDelete 等方法。
public void service(ServletRequest request,
ServletResponse response)
throws ServletException, IOException{
}
service() 方法由容器调用,service 方法在适当的时候调用 doGet、doPost、doPut、doDelete 等方法。所以,您不用对 service() 方法做任何动作,您只需要根据来自客户端的请求类型来重写 doGet() 或 doPost() 即可。
destroy()方法:servlet被销毁时,执行destroy方法,只执行一次。destroy() 方法可以让您的 Servlet 关闭数据库连接、停止后台线程、把 Cookie 列表或点击计数器写入到磁盘,并执行其他类似的清理活动。
public void destroy() {
// 终止化代码...
}
下图显示了一个典型的 Servlet 生命周期方案。
第一个到达服务器的 HTTP 请求被委派到 Servlet 容器。
Servlet 容器在调用 service() 方法之前加载 Servlet。
然后 Servlet 容器处理由多个线程产生的多个请求,每个线程执行一个单一的 Servlet 实例的 service() 方法。
Servlet读取表单数据
Servlet处理表单数据,这些数据会根据不同的情况使用不同的方法自动解析:
getParameter():您可以调用 request.getParameter() 方法来获取表单参数的值。
getParameterValues():如果参数出现一次以上,则调用该方法,并返回多个值,例如复选框。
getParameterNames():如果您想要得到当前请求中的所有参数的完整列表,则调用该方法。
Servlet客户端HTTP请求
首先咱们了解一下Java web是怎么进行request和response的
Request对象和Response对象是由服务器(Tomcat)创建
Request对象是用来获取请求信息
Response对象是来设置响应消息
Request的体系结构
Servlet 体系结构
HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象提供的方法,可以获得客户端请求的所有信息
具体看:
https://www.runoob.com/servlet/servlet-client-request.html
Servlet服务器HTTP响应
servlet的最主要作用就是处理客户端的请求,并对客户端进行响应
对于每次的请求,web服务器在调用service方法之前,都会创建两个对象,一个是HttpServletRequest对象,一个是HttpServletResponse对象
Web服务器运行过程中,每个Servlet都会只创建一个实例对象,不过每次请求都会调用Servlet实例的service(ServletRequest request, ServletResponse response)方法,这里HttpServletRequest是ServletRequest的子类,HttpServletResponse是ServletResponse的子类
一个典型的响应 响应行 响应头 响应体
HTTP/1.1 200 OK
Content-Type: text/html
Header2: ...
...
HeaderN: ...
(Blank Line)
<!doctype ...>
<html>
<head>...</head>
<body>
...
</body>
</html>