[Struts2] 不要绕过Struts2直接操纵Session
否则,会死的很难看
否则,会死的很难看
invalidate: ((org.apache.struts2.dispatcher.SessionMap<String, Object>) session).invalidate(); http://struts.apache.org/2.0.14/docs/how-do-we-get-invalidate-the-session.html 创建新session: 不需要自写代码。因为当你用session.put(xxx,xxx)时,Struts2如果发现当前没有httpSession就会自己新建一个。 //org.apache.struts2.dispatcher.SessionMap public V put(K key, V value) { synchronized (this) { if (session == null) { session = request.getSession(true); } …. }
:ab ssh Struts+Spring+Hibernate — 定义ssh为Struts+Spring+Hibernate 的缩写。在输入状态下键入ssh后,vi会自动将其变成Struts+Spring+Hibernate :ab 查看已有的缩写 :una ssh 不再使用ssh作为任何内容的缩写
:!ls – 执行一下ls :r ! ls – 执行一下ls,并把ls的输出插入到当前位置 :r 3.txt – 把3.txt文件的内容插入到当前位置 :sh 暂停vi,创建一个新的shell并进入(完成后输入exit回到vi)
复制: case 1: 在某处用yw复制一个词,在另一处用p粘贴回来 case 2: 在某处用yy复制一行,在另一处用p粘贴回来 剪切: case 1: 在某处用x删除一个字符,在另一处用P粘贴回来 case 2: 在某处用dw删除一个词,在另一处用p粘贴回来 P:在当前光标处插入上次删除的内容 p: 在当前光标右边插入上次删除的内容
u – 撤销上次修改,相当于windows中的ctrl + z 再按一次u – 撤销上一个u本身,即恢复到上次修改后的内容
查找 /hey: 向下查找"hey" /[a-z]: 向下查找小写字母 查找后输入n: 下一个匹配处 查找后输入N: 上一个匹配处 ?hey: 向上查找"hey" 替换 :s/vim/vi: 把下一个vim替换成vi :%s/vim/vi/g: 把所有行中的vim都替换成vi (如果不加g则只替换每行第一个)
从命令状态转到输入状态: i: 在光标前插入 a: 在光标后插入 I: 在本行的开始处插入 A: 在本行的结束处插入 o: 在本行的下面插入 O: 在本行的上面插入 不进入输入状态而替换内容: r: 替换当前光标上的字符 sabc<Esc>: 用abc替换当前光标上的字符 Cabcd<Esc>: 用abcd替换当前光标上的字符开始,直到行尾 Sabcd<Esc>: 用abcd替换当前整行 ~: 大小写互换 不进入输入状态而删除内容: x: 删除当前光标上的字符 X:删除光标左边的字符 D: 从光标处一直删到行尾 dd: 删除当前行 d10G:从光标处删到第10行(10G) dj: 从光标处删到下一行(j) :50d: 删除第50行 :50,60d:删除第50至第60行
移动光标 h,j,k,l: 向左、下、上、右移动一个位置 0, $: 移动到一行的开始处/结尾处 w,e,b: 下一个单词的头部,下一个单词的尾部,前一个单词的头部 H,M,L: 移动当前屏幕的顶行、中间行和最后一行 50w: 右移50个单词 50j: 下移50行 ^F: 向下移动一屏 6^F: 向下移动六屏 ^B:向上移动一屏 6^B: 向上移动六屏 1G: 跳到第一行 33G: 跳到第33行 G: 跳到最后一行 :set number : 显示行号 :set nonumber: 不显示行号
保存: :w 保存 :w hi.bak 保存到hi.bak中(但VI当前正在编辑的文件仍是原来那个文件) :w >> another.txt 把当前内容追加到another.txt中 停止vi ZZ : 保存并退出 :q! : 退出,不保存 切换文件: :e 2.txt — 切换到2.txt(前提是当前文件已保存) :e !2.txt — 切换到2.txt,如果当前文件未保存,丢弃修改