跳至主要內容

Java Web开发

酷风大约 3 分钟

Java Web开发

JavaEE

  • JavaEE是Java Platform Enterprise Edition的缩写,即Java企业平台。

  • JavaEE并不是一个软件产品,它更多的是一种软件架构和设计思想。我们可以把JavaEE看作是在JavaSE的基础上,开发的一系列基于服务器的组件、API标准和通用架构。

  • JavaEE最核心的组件就是基于Servlet标准的Web服务器,开发者编写的应用程序是基于Servlet API并运行在Web服务器内部的

  • JavaEE还有一系列技术标准

    • EJB: Enterprise JavaBean,企业级JavaBean,早期经常用于实现应用程序的业务逻辑,现在基本被轻量级框架如Spring所取代;
    • 等等。。。

自建HTTP Server

  • ServerSocket
  • HTTP Server本质上是一个TCP服务器
  • 需要编写服务端代码:解析http请求,遵循http规范,响应http请求并返回html......

Servlet

  • 自建HTTPServer:ServerSocket

    • 需要对HTTP请求进行读取、解析、响应等,遵循其规范
    • 处理TCP连接
    • 等。。。
  • so: 底层工作交给 专业Web服务器去做!

    • tomcat
    • jetty
  • 只关注业务处理、数据输出展现

  • JavaEE提供了Servlet API

    • 使用Servlet API, 编写自己的Servlet来处理HTTP请求
    • 不需要关心 底层TCP、解析HTTP协议等等......
    • Web服务器实现Servlet API接口,实现底层功能
  • Servlet API

    • HttpServletRequest
    • HttpServletResponse
  • 版本

    • 4.0及之前:Oracle官方维护,javax.servlet:javax.servlet-api
      • Tomcat 9.x或更低版本
    • 5.0及以后:Eclipse开源社区维护,jakarta.servlet:jakarta.servlet-api
      • Tomcat 10.x或更高版本

Filter

  • JavaEE的Servlet规范提供了Filter组件
  • 过滤器,它的作用是,在HTTP请求到达Servlet之前,可以被一个或多个Filter预处理
  • doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
  • chain.doFilter(request, response);

Listener

  • javaEE的Servlet规范提供
  • ServletContextListener
    • contextInitialized(): 整个Web应用程序初始化完成后, 可以处理 初始化数据库连接池 等工作;
    • contextDestroyed(): Web应用程序关闭后,可以处理 清理资源的工作;
  • 其他Listener
    • HttpSessionListener:监听HttpSession的创建和销毁事件;
    • ServletRequestListener:监听ServletRequest请求的创建和销毁事件;
    • ServletRequestAttributeListener:监听ServletRequest请求的属性变化事件(即调用ServletRequest.setAttribute()方法);
    • ServletContextAttributeListener:监听ServletContext的属性变化事件(即调用ServletContext.setAttribute()方法);

ServletContext

  • 每个WebApp,Web服务器都会为其创建一个全局唯一的ServletContext实例
  • 设置和共享全局信息

JSP

  • Java Server Pages

  • 用于输出html页面

    • 包含在<%和%>之间的是Java代码,可以编写任意Java代码;
    • 包含在<%--和--%>之间的是JSP的注释,它们会被完全忽略;
    • 使用<%= xxx %>则可以快捷输出一个变量的值。
    • 内置变量
      • out:表示HttpServletResponse的PrintWriter;
      • session:表示当前HttpSession对象;
      • request:表示HttpServletRequest对象。
    • 高级功能
      • 导入包 <%@ page import="java.io.*" %>
      • 包含 <%@ include file="header.jsp"%>
    • JSP Tag
  • 位于项目目录 /src/main/webapp 下

  • JSP vs Servlet

    • JSP在执行前首先被编译成一个Servlet
    • JSP本质上就是一个Servlet

MVC模式

  • Controller: 专注于业务处理
  • Model: JavaBean 或 包含多个对象的Map
  • View: 负责把Model给“渲染”出来

servletMVC

                   ┌───────────────────────┐
             ┌────>│Controller: UserServlet│
             │     └───────────────────────┘
             │                 │
┌───────┐    │           ┌─────┴─────┐
│Browser│────┘           │Model: User│
│       │<───┐           └─────┬─────┘
└───────┘    │                 │
             │                 ▼
             │     ┌───────────────────────┐
             └─────│    View: user.jsp     │
                   └───────────────────────┘

MVC高级

   HTTP Request    ┌─────────────────┐
──────────────────>│DispatcherServlet│
                   └─────────────────┘
                            │
               ┌────────────┼────────────┐
               ▼            ▼            ▼
         ┌───────────┐┌───────────┐┌───────────┐
         │Controller1││Controller2││Controller3│
         └───────────┘└───────────┘└───────────┘
               │            │            │
               └────────────┼────────────┘
                            ▼
   HTTP Response ┌────────────────────┐
<────────────────│render(ModelAndView)│
                 └────────────────────┘
  • 定义 ModelAndView ,统一返回 路径及Model
  • 创建一个接收所有请求的Servlet,通常我们把它命名为DispatcherServlet,它总是映射到/
    • init() 初始化所有Get和Post的映射,以及用于渲染的模板引擎:
    • 通过构造某个方法需要的所有参数列表,使用反射调用该方法后返回结果