【 <一> 炼丹初探:JavaWeb 的起源与基础】之 Servlet 与 JSP 的协作:MVC 模式的雏形

发布于:2025-03-06 ⋅ 阅读:(9) ⋅ 点赞:(0)

<前文回顾>

点击此处查看 合集 https://blog.csdn.net/foyodesigner/category_12907601.html?fromshare=blogcolumn&sharetype=blogcolumn&sharerId=12907601&sharerefer=PC&sharesource=FoyoDesigner&sharefrom=from_link

<今日更新>

一、Servlet 和 JSP:一对“老搭档”

Servlet 和 JSP 这俩玩意儿,就像“老搭档”,一个负责“干活”,一个负责“展示”。Servlet 是“幕后英雄”,处理业务逻辑;JSP 是“台前明星”,负责生成动态页面。这俩配合起来,简直就是“天衣无缝”。

1. Servlet 的“苦力活”

Servlet 是 Java 写的服务器端程序,专门处理 HTTP 请求。它从浏览器那儿接活儿,处理完了再把结果扔回去。Servlet 的活儿虽然“苦”,但它是“核心”,没它 JSP 也“玩不转”。

Java Code

public class MyServlet extends HttpServlet {

    protected void doGet(HttpServletRequest req, HttpServletResponse resp)

        throws ServletException, IOException {

        String name = req.getParameter("name");

        req.setAttribute("greeting", "你好," + name);

        req.getRequestDispatcher("/greeting.jsp").forward(req, resp);

    }

}

2. JSP 的“面子工程”

JSP 是“披着 HTML 外衣的 Java”,专门用来生成动态页面。它从 Servlet 那儿拿数据,再把数据“打扮”成 HTML,扔给浏览器。JSP 的活儿虽然“轻松”,但它是“门面”,没它 Servlet 也“没面子”。

Jsp Code

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<html>

<head>

    <title>问候页面,咱没骂人~</title>

</head>

<body>

    <h1>${greeting}</h1>

</body>

</html>

二、Servlet 和 JSP 的“协作模式”

Servlet 和 JSP 的协作模式,说白了就是“分工合作”。Servlet 负责“干活”,JSP 负责“展示”,这俩配合起来,简直就是“珠联璧合”。

1. 请求处理流程

  1. 浏览器发请求:浏览器发个 HTTP 请求,Servlet 容器一收到,就开始“忙活”了。
  2. Servlet 处理请求:Servlet 从请求里拿数据,处理业务逻辑,再把结果放到请求对象里。
  3. Servlet 转发请求:Servlet 把请求转发给 JSP,让 JSP 生成动态页面。
  4. JSP 生成页面:JSP 从请求对象里拿数据,生成 HTML 页面,扔给浏览器。

Jsp Code

req.getRequestDispatcher("/greeting.jsp").forward(req, resp);

2. 数据传递

Servlet 和 JSP 之间的数据传递,主要靠 HttpServletRequest 对象。Servlet 把数据放到请求对象里,JSP 再从请求对象里拿数据。这就像“传纸条”,Servlet 写,JSP 读。

Jsp Code

req.setAttribute("greeting", "你好," + name);

<h1>${greeting}</h1>

三、MVC 模式的“雏形”

Servlet 和 JSP 的协作模式,其实就是 MVC 模式[1] 的“雏形”。MVC 模式把应用程序分成三层:ModelViewController。Servlet 是 Controller,JSP 是 View,数据是 Model

1. Controller:Servlet

Servlet 是 Controller,负责处理请求,调用业务逻辑,再把结果交给 View。这就像“指挥”,Servlet 得把每个请求都“安排”得明明白白。

Java Code

public class MyServlet extends HttpServlet {

    protected void doGet(HttpServletRequest req, HttpServletResponse resp)

        throws ServletException, IOException {

        String name = req.getParameter("name");

        String greeting = GreetingService.getGreeting(name);

        req.setAttribute("greeting", greeting);

        req.getRequestDispatcher("/greeting.jsp").forward(req, resp);

    }

}

2. View:JSP

JSP 是 View,负责生成动态页面,展示数据。这就像“演员”,JSP 得把数据“表演”得漂漂亮亮。

3. Model:数据

数据是 Model,负责存储业务数据。这就像“剧本”,数据得把业务逻辑“写”得清清楚楚。

四、Servlet 和 JSP 的“历史”:从 JSP 1.0 到 Servlet 4.0

Servlet 和 JSP 从 1999 年诞生到现在,已经走过了 20 多个年头。虽然现在它们已经有点“过气”了,但它们的“历史”还是挺“辉煌”的。

1. JSP 1.0:初出茅庐

JSP 1.0 在 1999 年发布,是 JSP 的“初代版本”。JSP 1.0 虽然功能简单,但已经能用来生成动态网页了。

2. Servlet 2.3:引入过滤器

Servlet 2.3 在 2001 年发布,引入了过滤器[2],让开发人员能在请求处理前后做一些“额外操作”。过滤器的引入,让 Servlet 的“玩法”更加丰富。

Java Code

public class MyFilter implements Filter {

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)

        throws IOException, ServletException {

        // 请求处理前的操作

        chain.doFilter(req, resp);

        // 请求处理后的操作

    }

}

3. JSP 2.0:引入 EL 表达式

JSP 2.0 在 2003 年发布,引入了 EL 表达式[3],让开发人员能更方便地访问数据。EL 表达式的引入,让 JSP 的“玩法”更加丰富。

4. Servlet 3.0:引入注解

Servlet 3.0 在 2009 年发布,引入了注解[4],让开发人员能用注解配置 Servlet,不用再写 web.xml 了。注解的引入,让 Servlet 的“玩法”更加方便。

Java Code

@WebServlet("/myServlet")

public class MyServlet extends HttpServlet {

    // Servlet 代码

}

5. Servlet 4.0:支持 HTTP/2

Servlet 4.0 在 2017 年发布,支持 HTTP/2[5],让 Web 应用的性能更上一层楼。HTTP/2 的引入,让 Servlet 的“玩法”更加高效。


专有名词解释

  1. MVC 模式:Model-View-Controller,一种设计模式,用于将应用程序分为模型、视图和控制器三层。
  2. 过滤器:Filter,一种用于在请求处理前后执行额外操作的组件。
  3. EL 表达式:Expression Language,一种用于在 JSP 页面中访问数据的表达式语言。
  4. 注解:Annotation,一种用于配置 Servlet 的元数据。
  5. HTTP/2:HTTP 协议的第二个主要版本,支持多路复用、头部压缩等特性。