Java Web开发的基石:深入理解Servlet与JSP​

Java Web开发的基石:深入理解Servlet与JSP​


​​引言​

还记得早期充满活力的互联网吗?那时的网站虽然简单,但却奠定了现代Web应用的基础。在Java的世界里,Servlet和JSP正是这段历史的见证者和奠基者。即使今天已被Spring等框架笼罩,但理解它们,就如同习武之人修习内功心法,是成为JavaWeb高手不可或缺的一环。今天,就让我们一起揭开它们的神秘面纱。

第一部分:为什么我们需要Servlet和JSP?—— 历史的背景​​

在早期Web开发中,存在一个核心问题:​​如何让静态的HTML页面变得动态​​,能够根据用户请求、时间或数据库中的数据发生变化?

  • ​​CGI(通用网关接口)​​:早期解决方案,但每个请求都需启动新进程,性能低下。

  • ​​ASP, PHP​​:微软和开源社区的解决方案,将代码直接嵌入HTML。

  • ​​Java的答案​​:Java需要一种既能利用其强大的企业级能力(多线程、安全、跨平台),又能高效生成动态内容的技术。于是,​​Servlet​​ 和 ​​JSP​​ 应运而生,成为了Java EE(现Jakarta EE)Web规范的核心。


第二部分:Servlet —— 背后的指挥官​​

​​1. 什么是Servlet?​​

Servlet是一个​​运行在服务器端的Java程序​​,它接收和响应客户端的请求(通常是HTTP)。你可以把它想象成一个​​后台指挥官​​,它负责处理业务逻辑,但自己不直接生产HTML页面。

​​2. 它的工作原理​​

  1. 用户在浏览器点击链接或提交表单(发送一个HTTP请求)。

  2. Web服务器(如Tomcat)接收到请求。

  3. 服务器根据URL映射找到对应的Servlet

  4. 服务器调用Servlet的 service(), doGet()doPost()方法。

  5. Servlet执行逻辑:查询数据库、计算、调用其他服务等。

  6. Servlet将结果(通常通过PrintWriter对象)以HTML格式输出给客户端。

  7. 浏览器渲染HTML,用户看到动态生成的页面。

3. 一个简单的Servlet示例​

@WebServlet("/hello") // 注解配置访问路径
public class HelloServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            out.println("<!DOCTYPE html>");
            out.println("<html><head><title>Hello World</title></head>");
            out.println("<body>");
            out.println("<h1>你好," + request.getParameter("name") + "!</h1>");
            out.println("</body></html>");
        } finally {
            out.close();
        }
    }
}

痛点​​:在Java代码中拼接HTML字符串非常​​繁琐且容易出错​​,不利于前端和后台的协作开发。这就引出了JSP。


第三部分:JSP —— 前台的视图渲染师​​

​​1. 什么是JSP?​​

JSP(JavaServer Pages)的本质就是一个​​Servlet​​。它允许你将Java代码直接嵌入到HTML页面中。它的设计目的是为了​​更方便地编写动态页面​​,让前端开发者能更轻松地参与。

​​核心思想​​:​​“在HTML中写Java”​​ 而不是 ​​“在Java中写HTML”​​。

​​2. 它的工作原理​​

用户请求一个.jsp页面。

Web容器(如Tomcat)会​​先将JSP文件翻译成一个Servlet类​​(.java文件)。

然后​​编译​​这个Servlet类(.class文件)。

最后像执行普通Servlet一样执行它,输出最终的HTML。

​​所以,JSP只是编写Servlet的一种更便捷的方式​​,最终都会变成Servlet。

​​3. 一个简单的JSP示例​

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Hello JSP</title>
</head>
<body>
    <%
        String name = request.getParameter("name");
        if (name == null) name = "Visitor";
    %>
    <h1>你好,<%= name %>!</h1>
    <p>当前时间是:<%= new java.util.Date() %></p>
</body>
</html>

可以看到,HTML结构非常清晰,Java代码只是作为脚本片段 (<% … %>) 和表达式 (<%= … %>) 插入其中。


第四部分:Servlet + JSP 的完美协作 —— MVC模式的雏形​​

很快,开发者发现将全部逻辑(Controller和Model)和视图(View)都写在JSP里会导致代码混乱(被称为“Spaghetti Code”,面条代码)。于是,最佳实践出现了:

​​结合使用Servlet和JSP,形成早期的MVC模式:​​

1. ​​Servlet作为控制器 (Controller)​​:

  • 接收用户请求。

  • 处理业务逻辑(调用ServiceDAO层,操作Model)。

  • 将处理结果(数据对象)放入请求域(request.setAttribute())。

  • 转发请求(request.getRequestDispatcher().forward())给JSP页面。

2. ​​JSP作为视图 (View)​​:

  • 专注于显示和渲染。

  • 使用JSTL/EL表达式从请求域中获取Servlet传来的数据。

  • 生成最终的HTML页面。

​​示例流程:​​

  • 用户访问 /userinfo

  • UserInfoServlet处理,从数据库查询用户数据 User user = userDao.findById(1);。

  • request.setAttribute("user", user);// 将用户数据放入请求

  • request.getRequestDispatcher("/userInfo.jsp").forward(request, response);// 转发

  • userInfo.jsp使用 ${user.name}EL表达式显示用户信息。

这种职责分离的设计,为后来Spring MVC等框架的流行奠定了理念基础。

​​第五部分:演进与总结​​

1. ​​现代发展​​

如今,纯Servlet和JSP的直接使用已大幅减少,取而代之的是更强大的MVC框架(如Spring MVC)、模板引擎(如Thymeleaf, FreeMarker)以及前后端分离架构(React/Vue + Spring Boot API)。

2. ​​为什么还要学?​​

  • ​​理解根基​​:所有Java Web框架都是对Servlet和JSP的封装和扩展。懂了它们,才能深刻理解框架的原理。

  • ​​排查问题​​:遇到深层问题(如过滤器、会话管理)时,Servlet知识至关重要。

  • ​​维护老系统​​:很多传统企业系统仍基于这些技术。

总结

​​Servlet是藏在幕后的业务处理大师,而JSP是站在台前的页面渲染师。它们一前一后,紧密配合,共同构成了Java Web开发的原始基石。​​ 虽然时代在变,新技术层出不穷,但了解历史才能更好地驾驭未来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值