所以,是的,我总结了我所理解的所有内容并绘制了一个简单的图表。
如果我没记错的话,servlet 就是 CGI(通用网关接口),因为 servlet 是您可以访问服务器上资源的唯一途径。所以,简而言之,它是通用网关。
CONTAINER 和 Apache Tomcat 一样,负责捕获用户发送的请求并将其发送给 servlet。
用户感知到的是一个动态网页,称为 web app。
这是我到目前为止所学到的。
我学对了吗?
你几乎是对的。以下是使用普通 servlet 时可以遵循的典型工作流程:
Servlet 容器查找匹配请求 URL 的 servlet
doGet()
或doPost()
根据请求的 HTTP 方法调用
Servlet 做一些处理
响应(HTML、XML、JSON、图像...)直接在 servlet 中生成并使用getOutputStream()
或发送到客户端getWriter()
PrintWriter out = response.getWriter();
out.println("Hello World");
Servlet 容器找到 JSP 匹配请求。你必须明白,在每个 JSP 之下都被翻译成一些内部 servlet
该 JSP 被解释。直接发送原始文本,执行 scriptlet 中的 Java 代码
JSP结束,请求完成
与第一个场景中的 1-3 相同
Servlet 选择 JSP 文件并转发到该 JSP
然后评估 JSP 文件,它可以访问由 servlet 传递的某些上下文(请求属性、会话)
RequestDispatcher dispatcher = getServletContext()
.getRequestDispatcher("foo.jsp");
dispatcher.forward(request, response);
最后一种方案被认为是最好的方案,因为它没有混合业务逻辑(servlet)和表示(JSP)。
Servlet 处理请求并生成响应。
JSP 被编译成 servlet,因此 JSP 是 servlet 的子集。
寻找正确 JSP 的不是 Servlet,这是容器的工作。