文章目录
SpringMVC + Ajax 技术
Ajax
Ajax技术特点:异步请求、局部刷新
同步模式:请求1->响应1->请求2->响应2
异步模式:请求1->请求2->响应1->响应2
异步的处理
var msg;
$.ajax({
url: "load.do",
type: "get",
dataType: "json",
success: function (data) {
msg = data.msg
}, error: function () {
}
});
alert();
我们可能会认为ajax在前面会先执行,但是我们这个是异步,所以只会发了请求就alert,而不是等待执行完再去调ajax的success块
这里很容易犯错哦!
例如我们想要网页加载时弹框提示ajax加载的msg信息,这里就不能展示到哦,想要达到效果可以在ajax块加上同步字段async:false
即可
同步处理
如上述加上同步字段async:false
即可
var msg;
$.ajax({
url: "load.do",
type: "get",
async: false,
dataType: "json",
success: function (data) {
msg = data.msg
}, error: function () {
}
});
alert(msg);
总结
我们可以通过async决定请求是同步还是异步,如果想要配置详细ajax请求建议使用$.ajax()
,这样能配置的参数较多
浏览器中只要涉及到xhr都算是ajax请求(底层都是调用XMLHttpRequest
对象)
使用@ResponseBody常见错误
- 406错误缺少jar包
- 404找页面少了标记
SpringMVC的JSON响应
-
准备工作
导入jackson或gson工具包。(用于将对象转成json字符串)
-
使用方法:在Controller方法中,将对象做返回值,并且在方法上加@ResponseBody标记
@RequestMapping("/loadall")
@ResponseBody
public Object loadAll(){
List<News> list = newDao.findAll();
return list;
}
验证码校验
/checkcode.do(code=xxx)-->DispatcherServlet-->HandlerMapping-->CheckCodeController-->返回JSON结果
自动根据浏览器请求头Content-Language
国际化
- 根据浏览器语言设置自动显示文字
- 在某个包下添加properties资源文件
msg_zh_CN.properties (中文) msg_en_US.properties (英文)
- 在spring配置文件中定义ResourceBundleMessageSource组件
注意:id名指定为messageSource<!--配置国际化--> <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> <property name="basename" value="biuaxia.resource.language.lang"/> <!-- 支持UTF-8的中文 --> <property name="cacheSeconds" value="0"/> <property name="defaultEncoding" value="UTF-8"/> </bean>
- 在JSP中使用spring:message标签读取properties资源文件信息
- 引入标签库
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
- 利用
<spring:message code="这里是国际化文件中对应的key">
标签 - 在Controller中通过
RequestContext
对象(来自包org.springframework.web.bind.annotation.RequestMapping
)获取properties资源文件信息RequestContext context = new RequestContext(request); String testMsg = context.getMessage("index.Body.testMsg");
按用户选择的语言环境显示文字
基于SessionLocaleResolver
组件实现语言环境的控制。
- 请求提交参数,然后在Controller中根据参数设置Session中语言环境信息
<a href="lang.do?lang=en" class="am-footer-desktop">English</a>
- 在spring中配置SessionLocaleResolver解析器
根据上面session中设置的语言环境定位资源文件
注意:id名指定为localeResolver<!--基于Session国际化--> <bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"></bean>
- 在Controller进行修改语言环境的操作
@Controller public class LangController { @RequestMapping("lang") public String switchLang(HttpServletRequest request, String lang) { String language = null; String country = null; final String LANG_CN = "zh"; final String LANG_EN = "en"; if (lang.equalsIgnoreCase(LANG_CN)) { language = "zh"; country = "CN"; } if (lang.equalsIgnoreCase(LANG_EN)) { language = "en"; country = "US"; } Locale locale = new Locale(language, country); request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME, locale); return "redirect:index.do"; } }
运行效果图
中文语言环境的首页展示
英文语言环境的首页展示
注册界面验证码返回的json内容,此处为错误