Spring框架学习第七天

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常见错误

  1. 406错误缺少jar包
  2. 404找页面少了标记

SpringMVC的JSON响应

  1. 准备工作

    导入jackson或gson工具包。(用于将对象转成json字符串)

  2. 使用方法:在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国际化

  1. 根据浏览器语言设置自动显示文字
  2. 在某个包下添加properties资源文件
    msg_zh_CN.properties (中文)
    msg_en_US.properties (英文)
    
  3. 在spring配置文件中定义ResourceBundleMessageSource组件
    <!--配置国际化-->
    <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>
    
    注意:id名指定为messageSource
  4. 在JSP中使用spring:message标签读取properties资源文件信息
  5. 引入标签库
    <%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
    
  6. 利用<spring:message code="这里是国际化文件中对应的key">标签
  7. 在Controller中通过RequestContext对象(来自包org.springframework.web.bind.annotation.RequestMapping)获取properties资源文件信息
    RequestContext context = new RequestContext(request);
    String testMsg = context.getMessage("index.Body.testMsg");
    

按用户选择的语言环境显示文字

基于SessionLocaleResolver组件实现语言环境的控制。

  1. 请求提交参数,然后在Controller中根据参数设置Session中语言环境信息
    <a href="lang.do?lang=en" class="am-footer-desktop">English</a>
    
  2. 在spring中配置SessionLocaleResolver解析器
    根据上面session中设置的语言环境定位资源文件
    <!--基于Session国际化-->
    <bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"></bean>
    
    注意:id名指定为localeResolver
  3. 在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内容,此处为错误

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值