Servlet 应用体系结构

本贴最后更新于 1605 天前,其中的信息可能已经事过景迁

容器

Servlet 没有 main()方法。它们受控于另一个 Java 应用,这个 Java 应用称为容器。

Tomcat 就是一个容器。如果向服务器请求一个 Servlet,此时服务器会把请求交给部署该 Servlet 的容器,容器向 Servlet 提供 HTTP 请求和响应,且由容器调用 Servlet 方法,如 doGet()或 doPost()。

容器能作甚?

1.通信支持。容器知道自己与 web 服务器之间的协议,让 Servlet 与服务器轻松对话。我们不必再担心 web 服务器和我们的 web 代码之间的 API。
2.生命周期管理。容器负责加载类、实例化和初始化 Servlet、调用 Servlet 方法,并使 Servlet 能够被垃圾回收。
3.多线程支持。容器会自动为它接收的每个 Servlet 请求创建一个新的 Java 线程。
4.声明方式实现安全。利用容器,可以使用 xml 部署描述文件来配置和修改安全性。
5.JSP 支持。容器负责把 JSP 代码翻译成真正的 Java。

容器如何处理请求

1.用户点击一个链接,其 URL 指向一个 Servlet 而不是静态页面。
2.容器“看出来”这个请求指向一个 Servlet,所以容器会创建两个对象:HttpServletResponse 和 HttpServletRequest。
3.容器根据请求中的 URL 找到正确的 Servlet,为这个请求创建或分配一个线程,并把请求和响应对象传递给这个 Servlet 线程。
4.容器调用 Servlet 的 service()方法(在这之前还要加载类、实例化和初始化 Servlet)。根据请求的不同类型,service()方法会调用 doGet()或 doPost()方法。此处假设调用的 doGet()。
5.doGet()方法生成动态页面,并把页面填入响应对象。
6.线程结束,容器把响应对象转换为一个 HTTP 响应,把他发给客户,然后删除请求和响应对象。

映射

Servlet 的三个名字

<servlet>
        <servlet-name>ListenerTester</servlet-name>
        <servlet-class>com.shangxiaoying.ListenerTesterServlet</servlet-class>
</servlet>
<servlet-mapping>
        <servlet-name>ListenerTester</servlet-name>
        <url-pattern>/ListenTest.do</url-pattern>
</servlet-mapping>

说明:
<servlet-name> 元素用于把一个 <servlet> 元素绑定到一个特定的 <servlet-mapping> 元素。这个名只在这个部署文件中使用。
<servlet-class> 元素内放完全限定类名(但是不要加.class 扩展名)。
<url-pattern> 元素内是用户看到并使用的 Servlet 名,这是虚构的,并不是具体 Servlet 类的名字。

当请求到来时,容器会根据 <servlet-mapping> 里的 <url-pattern> 找到与请求的 URL 对应的 <servlet-mapping> 元素,然后根据 <servlet-mapping> 里的 <servlet-name> 元素找到对应的 <servlet>,然后根据 <servlet> 里的 <servlet-class> 找到具体的 Servlet 类。

MVC

MVC 的关键是业务逻辑与表示分离,而且要在二者之间放上别的东西,这样业务逻辑本身就能作为一个可重用的 Java 类存在,它根本不用对视图有任何了解。

MVC 就是把业务逻辑从 Servlet 中抽出来放在一个“模型”中,
模型(Model)就是可重用的普通 Java 类,是业务数据和处理该数据的方法的组合。系统中只有这部分与数据库通信。

视图(View)负责表示,从控制器获取模型状态,还要获得用户输入,并交给控制器。

控制器(Controller),从请求获得用户输入,并明确这些输入对模型有什么影响;告诉模型自行更新,并让视图得到新的模型状态。

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...