杰瑞科技汇

深入java web开发内幕 核心基础

第一部分:宏观视角 - Java Web应用的“骨架”

想象一下,一个Java Web应用就像一个餐厅,我们需要理解这个餐厅的运作流程。

深入java web开发内幕 核心基础-图1
(图片来源网络,侵删)
  • 顾客:浏览器,发出请求(“我要一份宫保鸡丁”)。
  • 服务员:Web服务器(如 Nginx, Apache),接收顾客请求,决定交给谁处理。
  • 厨师长:应用服务器(如 Tomcat, Jetty),是真正的业务处理中心,它知道菜谱(代码)和食材(数据)。
  • 厨师:你的Java代码,根据菜谱(业务逻辑)处理食材(数据),做出菜(生成响应)。
  • 传菜员:Servlet/JSP,将做好的菜(响应)交给服务员。
  • 食材库:数据库,存储所有原材料(数据)。

这个流程就是Java Web应用的核心工作模式:请求 -> 处理 -> 响应


第二部分:核心基石 - Servlet & JSP

这是Java Web的“元老”,是理解一切高级框架的基础,几乎所有现代框架(如Spring MVC)都是对它们的封装和增强。

Servlet (Server Applet) - 服务器端小程序

Servlet是运行在服务器端的Java类,它的核心任务是接收客户端请求并生成响应

  • 生命周期:理解Servlet的生命周期是掌握其精髓的关键。

    深入java web开发内幕 核心基础-图2
    (图片来源网络,侵删)
    1. 加载与实例化:当第一个请求到达时,服务器会加载Servlet类并创建一个实例,通常一个应用中一个Servlet只有一个实例(单例模式)。
    2. 初始化:服务器调用init()方法,这个方法只在Servlet生命周期中执行一次,用于完成一些一次性的初始化工作,比如加载配置、建立数据库连接池等。
    3. 请求处理:对于每个到来的请求,服务器会创建一个新的HttpServletRequestHttpServletResponse对象,然后在一个新的线程中调用service()方法。service()方法会根据请求的HTTP方法(GET, POST等)调用相应的doGet(), doPost()等方法,这是Servlet处理业务逻辑的核心。
    4. 销毁:当应用被卸载或服务器关闭时,服务器会调用destroy()方法,释放资源。
  • 核心API

    • HttpServletRequest:代表客户端请求,你可以从中获取请求头、请求参数、Cookie、Session等信息。
    • HttpServletResponse:代表服务器响应,你可以通过它设置响应状态码、响应头、向客户端输出HTML、JSON或文件等。
  • 工作流程

    1. 浏览器发送一个HTTP请求到Tomcat。
    2. Tomcat根据web.xml或注解(如@WebServlet)找到对应的Servlet。
    3. Tomcat调用该Servlet的service()方法,并传入请求和响应对象。
    4. Servlet中的Java代码执行业务逻辑(如查询数据库)。
    5. Servlet通过HttpServletResponse将HTML内容写入输出流。
    6. Tomcat将输出流中的内容封装成HTTP响应,发送回浏览器。

JSP (JavaServer Pages) - 视图层技术

JSP本质上是一个Servlet,它允许我们在HTML页面中嵌入Java代码,从而实现动态内容的生成。

  • JSP如何工作:当Tomcat第一次收到一个对.jsp文件的请求时,它会将这个JSP文件翻译成一个Java Servlet源文件(.java),然后编译成.class文件,后续的请求就直接由这个Servlet处理了。

    深入java web开发内幕 核心基础-图3
    (图片来源网络,侵删)
  • JSP的核心元素

    • 脚本片段<% ... %>:可以写任何Java代码。(不推荐)
    • 表达式<%= ... %>:用于输出一个表达式的结果到页面上,相当于out.print()
    • 声明!<% ... %>:用于在JSP页面中定义变量或方法。
    • 指令<%@ ... %>
      • page:定义页面的全局属性,如编码contentType="text/html; charset=UTF-8"
      • include:静态包含,将另一个文件的内容原样插入到当前JSP中。
      • taglib:引入标签库,如JSTL。
    • 动作<jsp: ...>
      • jsp:include:动态包含,包含的是另一个JSP执行后的结果。
      • jsp:forward:将请求转发给另一个资源。
      • jsp:useBean:创建或使用一个JavaBean。
  • JSP的演变:纯粹的JSP(在页面里写Java代码)被称为“Model 1”架构,很快变得难以维护。MVC(Model-View-Controller)模式应运而生,成为了Java Web开发的黄金标准。


第三部分:设计模式与架构演进 - MVC

Servlet和JSP的分离催生了经典的MVC模式,这是理解现代Java Web框架架构的关键。

  • MVC (Model-View-Controller)

    • Model (模型):负责业务逻辑和数据处理,它可以是JavaBean、EJB,或者与数据库交互的DAO层,模型不关心数据如何展示。
    • View (视图):负责数据显示,在Java Web中,JSP、HTML、XML等都是视图,视图不关心数据从哪里来,只负责展示。
    • Controller (控制器):是模型和视图之间的协调者,它接收用户的HTTP请求,调用模型处理业务逻辑,然后选择一个合适的视图来展示处理结果。Servlet就是最典型的Controller。
  • 工作流程(MVC版)

    1. 浏览器请求一个URL(如 /user/list)。
    2. Controller (Servlet) 接收请求。
    3. Servlet调用 Model 中的方法,获取用户列表数据。
    4. Servlet将数据存入request作用域。
    5. Servlet通过forward将请求转发给 View (如 user_list.jsp)。
    6. View (JSP) 从request中取出数据,并使用JSTL等标签库将其渲染成HTML表格。
    7. Tomcat将最终的HTML响应返回给浏览器。
  • 问题与演进

    • 问题:即使使用了MVC,我们仍然需要为每个功能编写一个Servlet,配置web.xml,处理请求参数、封装对象等,这些工作非常繁琐且重复。
    • 演进:为了解决这些问题,前端控制器模式出现了,它引入一个核心的FrontController Servlet,所有请求都先交给它,这个FrontController根据请求信息,决定调用哪个具体的业务处理器,并负责通用的流程控制(如参数解析、异常处理)。这就是现代Web框架(如Struts 2, Spring MVC)的核心思想。

第四部分:数据交互 - 会话与连接

一个Web应用需要记住用户的状态,并且需要高效地与数据库交互。

会话管理

HTTP是无状态的,服务器默认不记得前后的请求,为了解决这个问题,我们引入了会话。

  • Cookie

    • 是什么:服务器发送给浏览器的一段文本信息,浏览器会将其保存,并在后续的每次请求中自动携带这段文本。
    • 作用:通常用来记录用户的身份标识(Session ID),就像餐厅给顾客发的手环。
    • 特点:数据存储在客户端,可以设置过期时间,但大小有限(通常4KB),且用户可以禁用。
  • Session

    • 是什么:服务器端的一块内存空间,用于存储特定用户的数据,它由HttpSession对象表示。
    • 作用:存储用户的登录信息、购物车内容等敏感或大量的数据。
    • 工作原理:服务器在创建Session后,会生成一个唯一的Session ID,然后通过Cookie将这个ID发送给浏览器,浏览器后续每次请求都会带上这个ID,服务器通过ID找到对应的Session对象。
    • 特点:数据存储在服务器端,相对安全,但会占用服务器内存,有超时时间。

数据库连接

Java Web应用几乎离不开数据库,早期,每个请求都创建一个新的数据库连接,效率极低。

  • 连接池
    • 是什么:一个管理数据库连接的缓存池,应用启动时,预先创建一批连接并放入池中。
    • 工作原理:当需要访问数据库时,从池中“借用”一个连接,用完后“归还”给池,而不是销毁,这样避免了频繁创建和销毁
分享:
扫描分享到社交APP
上一篇
下一篇