目录
Spring MVC是Spring框架的一部分,它实现了MVC(模型-视图-控制器)设计模式,用于处理Web层请求响应。
Spring MVC的扩展主要体现在以下几个方面
控制器(Controller):
- 使用
@Controller
注解定义控制器类。 - 使用
@RequestMapping
(或其变体如@GetMapping
、@PostMapping
等)注解定义请求映射路径。 - 控制器方法可以通过
@RequestParam
、@PathVariable
等注解接收请求参数。 - 使用
@ResponseBody
注解将方法的返回值直接作为HTTP响应体返回。
数据交互:
- 支持多种数据格式,如JSON、XML等,通过配置相应的消息转换器(如Jackson)实现。
- 使用
@RequestBody
和@ResponseBody
注解处理请求体和响应体中的数据。
异常处理:
- 通过
@ExceptionHandler
注解在控制器中定义异常处理方法,实现全局或局部异常处理。
拦截器(Interceptor):
- 实现
HandlerInterceptor
接口,可以定义请求预处理、请求处理和请求后处理的方法,用于日志记录、权限校验等。
视图解析:
- 配置视图解析器(如InternalResourceViewResolver),将控制器返回的视图名称解析为具体的视图页面。
1.JSON数据的传递处理
步骤1:修改控制层
@ResponseBody
@GetMapping("/exist")
public String exist(String account) {
int exist = -1;
try {
boolean flag = sysUserService.exist(account);
if (flag) {
exist = 1;
} else {
exist = 0;
}
} catch (RuntimeException e) {
exist = -1;
}
return JSONObject.of("exist", exist).toString();
}
步骤2:修改视图层
account.bind("blur", function () {
// Ajax后台验证account是否已存在
$.ajax({
type: "GET", // 请求类型
url: path + "/user/exist", // 请求的url
data: {account: account.val()}, // 请求参数
dataType: "json", // ajax接口(请求url)返回的数据类型
success: function (data) { // data:返回数据(json对象)
if (data.exist == 1) { // 账号已存在,错误提示
validateTip(account.next(), {"color": "red"}, imgNo + " 该用户账号已存在", false);
} else if (data.exist == 0) { // 账号可用,正确提示
validateTip(account.next(), {"color": "green"}, imgYes + " 该账号可以使用", true);
} else if (data.exist == -1) { // 错误
validateTip(account.next(), {"color": "red"}, imgNo + data.msg, false);
}
},
error: function (data) { // 当访问时候,404、500 等非200的错误状态码
validateTip(account.next(), {"color": "red"}, imgNo + " 您访问的页面不存在", false);
}
});
}).bind("focus", function () {
//显示友情提示
validateTip(account.next(), {"color": "#666666"}, "* 用户编码是您登录系统的账号", false);
}).focus();
2. JSON数据传递过程中的中文乱码和日期问题
JSON中文乱码问题和JSON日期格式问题
方式一:在控制器方法上设置编码格式
@ResponseBody
@GetMapping(value = "/{id}/view",produces = {"application/json;charset=UTF-8"})
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JSONField(format = "yyyy-MM-dd")
private Date birthday;
方式二:装配消息转换器
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
<bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
</list>
</property>
<property name="features">
<list>
<value>WriteDateUseDateFormat</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
SSM框架整合
SSM框架整合是指将Spring、Spring MVC和MyBatis三个开源框架结合使用,以搭建企业级Java Web应用的后端架构。
依赖管理:
- 在项目的
pom.xml
文件中添加Spring、Spring MVC和MyBatis的依赖,以及数据库驱动、连接池等必要依赖。
配置文件:
- Spring配置文件:配置数据源、事务管理器、扫描的包等。
- MyBatis配置文件:配置别名、SQL日志、数据源等,并编写Mapper XML文件定义SQL语句。
- Spring MVC配置文件:配置视图解析器、拦截器、消息转换器等。
整合MyBatis:
- 使用@
Mapper
注解或@MapperScan
注解扫描Mapper接口,并配置SqlSessionFactoryBean
和MapperScannerConfigurer
。 - 在Spring配置文件中配置
SqlSessionFactory
和TransactionManager
,并指定Mapper接口的位置。
整合Spring MVC:
- 配置
DispatcherServlet
,并设置其加载的Spring配置文件。 - 配置视图解析器,指定视图文件的位置和类型。
业务逻辑层(Service):
- 设计Service接口和实现类,用于封装业务逻辑。
- 在Spring配置文件中配置Service的Bean,并注入必要的依赖(如Mapper)。
控制器层(Controller):
- 设计Controller类,用于接收请求、调用Service层处理业务逻辑,并返回视图或数据。
- 使用
@RequestMapping
等注解定义请求映射路径和请求方法。
Spring MVC扩展和SSM框架整合为Java Web开发提供了强大的支持。通过合理的配置和编码,可以实现高效、灵活、可扩展的Web应用。在实际开发中,还需要注意代码的规范性和可维护性,以及性能优化和安全性等问题。