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的类型是一个字符串,表示成员的名称。
1、 for in 可以遍历自己定义的json对象 ,和自己new的函数对象。
2、for 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三项才能达到最终效果。