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或更高版本
- 4.0及之前:Oracle官方维护,javax.servlet:javax.servlet-api
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的映射,以及用于渲染的模板引擎:- 通过构造某个方法需要的所有参数列表,使用反射调用该方法后返回结果