个人笔记3

2017-08-18 sql模糊查询

假如要统计一个班里的学生姓氏为 张氏,李氏,王氏的男生人数,该如何查询?

select count(1)
from banji
where  sex='M' and  (name  like '张%' or  name  like '李%' or  name like '王%');

这里主要注意这个括号()的使用,必须括起来才对。并且括号开始的位置要注意。



2017-08-19 页面用console调试方法

有些时候alert()方法加上断点dubug可以解决大部分的取值,看参数值的问题,但有时候回调函数里面的参数就不那么好整了。alert方法看不出数据的结构。这时就要另一个大杀器 console:
最常用:console.log(参数);console.info(参数);

当然还有很多别的方法,但最常用的就是上面这两个,别的console方法和使用请参考:js调用命令—Console命令



2017-08-25 HashMap,CurrentHashMap,HashTable的区别简单区分

主要是线程方面的考虑,HashMap是不安全的,HashTabel用了syncronized同步锁,一次只允许一个线程操作。CurrentHashMap是升级版的线程安全的map,换了新的算法,底层依靠Segment(类似HashTable),效率啥的都很高。具体了解可以看博文:HashMap与ConcurrentHashMap的区别



2017-08-26 前台页面如何取后台放到session的数据,以及把数据转成json格式?

后台java代码:session.setAttribute("baseData",baseData);
把参数放到session中。到请求返回的页面,直接用九大jsp内置对象中的session来取值:
<%
    String baseData="";
    Object base=session.getAttribute("baseData");
    if(base !=null){
        baseData=JSONUtils.toJSONString(base);
    }
%>
这里<%java代码块%>里面就是java语言。然后用: var 页面参数="<%=java参数%>"把java中取到的参数赋值给页面参数。
<script type="text/javascript">
    var baseData;
    //把java值赋给页面参数。
    var bb="<%=baseData%>";
    if(bb){
        //通过eval表达式把String类型的json数据转为json格式。
        baseData=eval('('+bb+')');
    }
</script>

这里有个点就是后台放到Servlet的session里,前台JSP却可以通过内置对象的session取到对象。是因为一次会话前后台有对应关系:
这里写图片描述



2017-08-26 后台返回String类型的json数据到页面如何解析为JSon数据?

由于页面解析问题,后台就算传过来的是json类型数据,到页面也是String类型。需要重新解析为json格式。
比如:{"test1":"苹果","test2":"香蕉"},到前台解析要用eval表达式才能解析为json数据:
var jsonData=eval("("+${data}+")")
这样就搞定了。



2017-08-26 ${ }<%= %>的区别
1. ${ } 是el表达式。可以在 <javascript>标签中直接取作用域中对应key的value值。(放在作用域的数据是以map的key:value存储的),取值顺序是按照作用域的范围request,session,application从小到大来查询的。如果request中没有找到对应的key,就会到session中找,再没有就去application中找。并且el表达式内部不在支持任何方法的调用。所以如果你要对数据用方法先处理,就要用到 <%= %>.

2.<%= %> 是输出标签,这个标签一般都和<% %>这个声明标签同时使用。因为<%= %>只能得到前面<% %>标签中定义的值,一般用来将后台数据赋值给页面的参数时用到<%= %>这个标签。另外,<%= %>须明确指定从哪个内置对象里取值。

3.如果el表达式和输出标签在一个作用域中取值,则没有区别。<%=x%>如果x不存在,会报错。${x}就算x不存在,也不会报错。${}多了一层自动查找的功能,你不用明确告诉它去哪取有时候,多个内置对象中存了同一个对象名的话,还得用<%= %>取。



2017-08-26 servlet session与shiro的session的区别。
1.servlet-session和shiro-session都是会话级别的。都可以通过session.getAttribute(“参数名”)和session.setAttribute(“参数名”,参数值)来取值和存值。但二者确实完全不同的实现,虽有相似点。

2.Shiro提供了三个默认实现:DefaultSessionManager:DefaultSecurityManager使用的默认实现,用于JavaSE环境;
ServletContainerSessionManager:DefaultWebSecurityManager使用的默认实现,用于Web环境,其直接使用Servlet容器的会话;
DefaultWebSessionManager:用于Web环境的实现,可以替代ServletContainerSessionManager,自己维护着会话,直接废弃了Servlet容器的会话管理。,也就是说shiro的session不但适用于web环境,在javaSE环境照样可以使用。

3.获取session的方式也不一样。servlet-session的获取方式:
HttpSession session = request.getSession();而shiro-session的获取方式为:Session session=SecurityUtils.getSubject().getSession(); 并且shiro的session还有很多非常实用的方法。我们一般加载缓存都是在用户登录通过shiro校验后加载缓存,放到shiro-session中到页面。



2017-08-26 前台JQuery如何取以下两种结构的json数据

1.var list=[{"A":"北京分公司"},{"B":"湖北分公司"}]
for(var i=0;i<list.length;i++){
    var mKey,mValue;
    //专门遍历拿map中的key值
    for(var prop in list[i]){
        mkey=prop;-->A
        mValue=list[i][mkey]-->北京分公司
    }
}
2. var list=[{id:"A",name:"北京分公司"},{id:"B","name":"湖北分公司"}]
for(var i=0;i<list.length;i++){
    var mKey=list[i].id;-->A
    var mValue=list[i].name-->北京分公司
}



2017-08-26 js中for(var key in o ){}的用法

o不只可以是对象,key也不只可以是对象中的键。

o也可以是一个数组,这时候的key就是数组的下表,从"0"开始,注意下标“0”是个字符串类型。

但是这种循环在 IE8浏览器下 对于数组 会有问题  会一直循环下去 即使o[key]为undefined。

正常我们用for(var key in o){}是为了获取对象或者map中的值,比如:
for(key in comObj){
    var temp={};
    temp.id=key;
    temp.name=comObj[key];
}

for in语句可以用来列举出一个变量的所有成员。如果object是函数(或类即构造函数),那么将列出函数的所有静态成员;如果object是对象,那就是所有实例成员,key的类型是一个字符串,表示成员的名称。

1for in 可以遍历自己定义的json对象 ,和自己new的函数对象。

2for in 不能遍历页面节点对象,但是把radio换成遍历document不会报错。

3、不建议用for in来遍历节点对象,因为不是所有节点对象属性都支持in运算符的访问。

参考:javascript中for(var key in object){}语句枚举



2017-08-28 @ResponseBody 和@RequestBody注解的理解

1.@ResponseBody

作用:
该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。

使用时机:
返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用;

2 @RequestBody

作用:
i) 该注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对象上;
ii) 再把HttpMessageConverter返回的对象数据绑定到 controller中方法的参数上。

使用时机:
A) GET、POST方式提时, 根据request header Content-Type的值来判断:
application/x-www-form-urlencoded, 可选(即非必须,因为这种情况的数据@RequestParam, @ModelAttribute也可以处理,当然@RequestBody也能处理);
multipart/form-data, 不能处理(即使用@RequestBody不能处理这种格式的数据);
其他格式, 必须(其他格式包括application/json, application/xml等。这些格式的数据,必须使用@RequestBody来处理);

B) PUT方式提交时, 根据request header Content-Type的值来判断:
application/x-www-form-urlencoded, 必须;
multipart/form-data, 不能处理;
其他格式, 必须;

说明:request的body部分的数据编码格式由header部分的Content-Type指定;



2017-08-28 spring mvc在Controller层的常用转跳方式总结

1.void类型 使用HttpServletResponse 重定向到另一个视图(其他不变 )

  @RequestMapping("/resp")
  public void handleRequest(HttpServletRequest req, HttpServletResponse resp) throws Exception {
  //只能重定向到jsp页面。不能到另一个方法上。
    resp.sendRedirect("index.jsp");
  }

2.void类型 使用HttpServletRequest 转发(默认访问/下的index.jsp页面 不受渲染器的影响)

@RequestMapping("/resp")
  public void handleRequest(HttpServletRequest req, HttpServletResponse resp) throws Exception {
    req.setAttribute("message","it's forword ");
    req.getRequestDispatcher("index.jsp").forward(req,resp);
    }

3.String类型 直接返回jsp页面的名称(注意有无渲染器)

//无渲染器时
@RequestMapping("/nice")
 public String hello1(){
   //转发方式1
   return "home.jsp";
   //转发方式2
   return "forward:index.jsp";
   //重定向方式
   return "redirect:index.jsp";
 }
 //有渲染时
 @RequestMapping("/nice")
 public String hello1(){
   //转发方式1
   return "home";
   //转发方式2
   return "forward:index";
   //重定向方式 hello指的是requsrmapping
   return "redirect:hello";
 }

//这是渲染器
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">   
        <property name="prefix" value="/WEB-INF/page/"/>   
        <property name="suffix" value=".jsp"/>   
</bean> 

4.返回的数据不是String类型的html标签的页面,而是其他某种格式的数据时(如json、xml等)

//从那个页面过来,就返回到那个页面
@RequestMapping("/updataFun")
@ResponseBody
public Map<String,Object> updataFun(HttpServletRequest request){
Map<String,Object> map=new HashMap<String,Object>();
map.put("result","233");
return map;
}

5.使用ModelAndView ,要配置渲染器

@RequestMapping("/show")
public ModelAndView handleRequest() throws Exception {
    ModelAndView mv = new ModelAndView();
    //封装要显示到视图的数据
    mv.addObject("msg","hello myfirst mvc");
    //视图名,返回到hello.jsp页面。
    mv.setViewName("hello");
    return mv;
  }



2017-08-28 切换frame内容

在IE和Firefox中都可以使用window.document.getElementById(”frameId”).src =“xxx.html”window.frameName.location = “xxx.html”来切换frame的内容;
如果需要将frame中的参数传回父窗口,可以在frame中使用parent关键字来访问父窗口。



2017-08-28 ul和ol列表缩进问题

经验证,在IE中,设置margin:0px可以去除列表的上下左右缩进、空白以及列表编号或圆点,设置padding对样式没有影响;在Firefox中,设置margin:0px仅仅可以去除上下的空白,设置padding:0px后仅仅可以去掉左右缩进,还必须设置list-style:none才能去除列表编号或圆点。也就是说,在IE中仅仅设置margin:0px即可达到最终效果,而在Firefox中必须同时设置margin:0px、
padding:0px以及list-style:none三项才能达到最终效果。

猜你喜欢

转载自blog.csdn.net/zhanglf02/article/details/77371733
今日推荐