第一章:三层架构与MVC设计模式
1.1 架构演进:从C/S到B/S
- C/S架构:客户端-服务器模式,需安装客户端(如QQ)。
- B/S架构 :浏览器-服务器模式,Java主要开发场景,天然分为三层:
- 表现层(WEB层):基于MVC模型,处理用户交互。
- 业务层:实现核心业务逻辑(如订单计算)。
- 持久层:操作数据库(如MyBatis、Hibernate)。
1.2 MVC模型详解
- Model:数据模型(如JavaBean),封装业务数据。
- View:JSP/HTML页面,负责数据展示。
- Controller:接收请求、校验参数、调度业务逻辑。
第二章:Spring MVC快速入门
2.1 Spring MVC核心优势
- 轻量级、模块化,无缝整合Spring生态。
- 对比Struts2:更简洁的配置、更强的注解支持。
2.2 10分钟搭建第一个应用
步骤1:Maven依赖
XML
<properties>
<spring.version>5.0.2.RELEASE</spring.version>
</properties>
<dependencies>
<!-- Spring核心 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- Servlet支持 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
步骤2:Controller类
java
@Controller
public class HelloController {
@RequestMapping("/hello.do")
public String sayHello() {
System.out.println("请求已处理!");
return "suc"; // 视图解析器自动补全路径
}
}
步骤3:视图解析器配置
XML
<!-- springmvc.xml -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"/>
<property name="suffix" value=".jsp"/>
</bean>
步骤4:配置DispatcherServlet
XML
<!-- web.xml -->
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
第三章:请求参数绑定技巧
3.1 自动绑定规则
- 基本类型 :表单
name
与参数名一致即可自动绑定。 - JavaBean对象 :属性名匹配自动填充(如
User{username, age}
)。 - 嵌套对象 :使用
对象.属性
格式(如address.city
)。
示例:绑定复杂对象
html
<form action="/user/save.do" method="post">
<input type="text" name="list[0].city" placeholder="城市1">
<input type="text" name="list[1].city" placeholder="城市2">
</form>
3.2 中文乱码解决
XML
<!-- web.xml -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
第四章:常用注解深度解析
4.1 参数处理三剑客
-
**@RequestParam**:映射请求参数到方法参数。
java@GetMapping("/search") public String search(@RequestParam(value = "kw", defaultValue = "") String keyword) { // 若未传参数,默认为空字符串 }
-
**@PathVariable**:RESTful风格URL参数绑定。
java@GetMapping("/user/{id}") public String getUser(@PathVariable Long id) { // 访问 /user/1001 获取ID=1001的用户 }
-
**@RequestBody**:接收JSON请求体(需配合
@RestController
)。java@PostMapping("/api/user") public ResponseEntity<User> createUser(@RequestBody User user) { // 前端发送JSON数据,自动转为User对象 }
4.2 请求头与Cookie操作
java
@GetMapping("/header")
public String showHeader(@RequestHeader("User-Agent") String userAgent) {
System.out.println("浏览器标识:" + userAgent);
return "info";
}
@GetMapping("/cookie")
public String readCookie(@CookieValue("JSESSIONID") String sessionId) {
System.out.println("Session ID:" + sessionId);
return "info";
}
第五章:RESTful风格实战
5.1 设计原则
- 资源化URL(如
/articles
代替/queryArticles.do
)。 - HTTP方法语义化:
GET
:查询POST
:新增PUT
:更新DELETE
:删除
5.2 实现示例
java
@RestController
@RequestMapping("/api/employees")
public class EmployeeController {
@GetMapping("/{id}")
public Employee getEmployee(@PathVariable Long id) {
return employeeService.findById(id);
}
@PostMapping
public ResponseEntity<Void> addEmployee(@RequestBody Employee emp) {
employeeService.save(emp);
return ResponseEntity.created(URI.create("/employees/" + emp.getId())).build();
}
}
测试工具:使用Postman或curl测试API:
bash
curl -X POST -H "Content-Type: application/json" -d '{"name":"张三"}' http://localhost:8080/api/employees
最佳实践与常见问题
-
静态资源处理 :
XML<mvc:resources mapping="/static/**" location="/static/"/> <mvc:default-servlet-handler/>
-
统一异常处理 :使用
@ControllerAdvice
全局捕获异常。 -
性能优化 :启用缓存、合理使用
@SessionAttributes
。