目录
一、核心原理解析
JavaWeb前后端交互的本质是“基于HTTP协议的请求-响应模型”,通过标准化接口实现数据交换。其技术栈可分为以下三个层级:
1. 网络通信层
- **HTTP/HTTPS协议**:基于TCP/IP,通过URL定位资源,使用请求方法(GET/POST/PUT/DELETE等)定义操作类型。
- **会话管理**:
- **Cookie**:客户端存储(4KB限制),每次请求自动携带(如`JSESSIONID`)。
- **Session**:服务端存储(默认30分钟过期),通过Cookie或URL重写传递ID。
- **Token机制**:JWT(JSON Web Token)实现无状态认证,通过`Authorization`头传递。
2. 数据交换格式
- **JSON**:主流格式(如`{"username":"admin","role":"USER"}`),使用Jackson或Gson解析。
- **XML**:老项目可能使用(如SOAP),通过JAXB处理。
- **表单编码**:`application/x-www-form-urlencoded`(如`name=Tom&age=20`)。
3. Java后端处理流程 (tomcat为例)
A[浏览器发起请求] --> B[Tomcat接收请求]
B --> C[Filter链(如登录校验)]
C --> D[DispatcherServlet前端控制器]
D --> E[HandlerMapping定位Controller]
E --> F[Controller业务逻辑]
F --> G[Service层事务处理]
G --> H[DAO层数据库操作]
H --> I[返回ModelAndView或JSON]
I --> J[视图解析器渲染]
J --> K[HTTP响应返回浏览器]
二、关键技术实现
1. Servlet规范(底层机制)
@WebServlet("/api/user")
public class UserServlet extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
String userId = req.getParameter("id");
resp.setContentType("application/json");
resp.getWriter().write("{\"id\":" + userId + "}");
}
}
2. Spring MVC框架(现代开发)
@RestController
@RequestMapping("/api")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/user/{id}")
public ResponseEntity<User> getUser(@PathVariable Long id) {
User user = userService.findById(id);
return ResponseEntity.ok(user);
}
@PostMapping("/user")
public ResponseEntity<Void> addUser(@Valid @RequestBody UserDTO dto) {
userService.save(dto);
return ResponseEntity.created(URI.create("/api/user/" + dto.getId())).build();
}
}
3. AJAX异步交互(前端)
fetch('/api/user/1', {
method: 'GET',
headers: {
'Authorization': 'Bearer ' + localStorage.getItem('jwt')
}
})
.then(res => res.json())
.then(data => console.log(data))
.catch(err => console.error(err));
三、常见场景使用
1. 文件上传/下载
- **上传**:使用`MultipartFile`接收(需配置`CommonsMultipartResolver`)。
- **下载**:设置`Content-Disposition`头(如`attachment; filename="report.pdf"`)。
2. WebSocket实时通信
@ServerEndpoint("/chat/{room}")
public class ChatEndpoint {
@OnMessage
public void onMessage(String message, Session session) {
// 广播消息到同房间所有客户端
}
}
3. 跨域处理(CORS)
@Configuration
public class CorsConfig {
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurer() {
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/api/**")
.allowedOrigins("https://frontend.com")
.allowedMethods("GET", "POST")
.allowCredentials(true);
}
};
}
}
4. 安全防护
- **XSS防护**:使用Spring Security的`X-XSS-Protection`头。
- **CSRF防御**:Spring Security默认对表单提交启用CSRF Token。
- **SQL注入**:MyBatis的`#{}`预编译参数。
四、实战项目详解
以用户登录系统为例:
浏览器->>前端: 输入用户名密码
前端->>后端: POST /api/login {username, password}
后端->>数据库: 验证用户凭据
数据库-->>后端: 返回用户ID
后端->>后端: 生成JWT Token
后端-->>前端: 200 OK {token: "eyJhbGciOi..."}
前端->>localStorage: 存储Token
前端->>后端: GET /api/profile (携带Authorization头)
后端->>后端: 验证Token有效性
后端-->>前端: 返回用户详情
五、现代演进趋势
1. **前后端分离**:Vue/React + Spring Boot成为主流。
2. **微服务**:Dubbo/Spring Cloud实现服务拆分,通过OpenFeign调用。
3. **Serverless**:AWS Lambda运行Java函数处理API请求。
4. **响应式编程**:Spring WebFlux + R2DBC实现非阻塞IO。
通过以上技术栈的有机组合,JavaWeb能够支撑从简单CRUD到高并发分布式系统的全场景需求。