idea远程debugger Tomcat

首先在远程tommcat的(tomcat版本为7.0以后版本)
catalina.bat开头加上:
set CATALINA_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=127.0.0.1:8888,server=y,suspend=n
启动startup.bat时,出现:
Listening for transport dt_socket at address: 8888
监听正常
在idea中找到remote debugger配置debugger监听端口为8888运行debugger,然后在访问服务器上面的地址就可以在本机的tomcat进行debugger了。注意访问地址不是8888而是tomcat本身的发布应用端口,也就是默认的8080等等

ie浏览器提交两次的导致的问题

问题:网站在谷歌火狐等浏览器可正常登陆,但是在ie浏览器登陆总是会失败

问题跟踪:通过后台捕捉浏览器请求,发现ie和其他浏览器相比登陆请求发送了两次。于是猜测是ie表单提交两次导致的问题。

问题原因:ie部分浏览器通过js提交form的时候写法必须严格。

问题解决:1.在form元素中给提交按钮input元素加上type=”submit”。2.js提交方法结尾出加上return false;

git常用命令总结

使安装完成之后。
命令1:标示本机全局用户名和邮箱。在某个目录下创建git仓库
$ git config –global user.name “Your Name” $ git config –global user.email “email@example.com”
git init
命令2:把本地改动添加到git暂存库
git add “filename”
命令3:把暂存区的改动提交到当前分支
git commit -m “提交内容的描述”
扩展如何不写描述
命令4:查看当前仓库状态
git status
命令5:查看当前文件改动比较对象是最后一次add或者commit
git diff
命令6:查看提交历史后面参数是简化版
$ git log –pretty=oneline
按q退出
命令7:版本回退,参数^个数代表回退到之前多少版本,COMMITID为提交版本id
$ git reset –hard HEAD^
$ git reset –hard COMMITID
命令8:命令操作历史
git reflog
命令9:撤销本地修改。会撤销到想一次add或者上一次commit。注意–前后都有空格
git checkout — readme.txt
命令10:撤销缓存区内容。将该文件缓存区内容清空
git reset HEAD file
命令11:删除文件
$ git rm test.txt $ git commit -m “删除文件”
扩展如果远程仓库被删除了如何恢复,需要注意什么
命令12:创建ssh key
$ ssh-keygen -t rsa -C “youremail@example.com”
命令13:关联远程仓库origin是远程仓库名字。可以自定义多个远程库
git remote add origin git@server-name:path/repo-name.git
命令14:将主分支推送到远程仓库 -u意思是推送的同时将主分支和远程仓库的主分支进行关联。其中origin是远程仓库的名字
$ git push -u origin master
$ git push origin master master为指定的本地分支
命令15:从远程库下载
$ git clone git@github.com:michaelliao/gitskills.git
命令16:创建分支-b表示创建并且切换
$ git checkout -b dev=$ git branch dev $ git checkout dev
命令17:查看所有分支
$ git branch
命令18:合并某分支到当前分支
$ git merge otherbranch
命令19:删除分支
$ git branch -d branchname
命令20:查看分支图
$ git log –graph –pretty=oneline –abbrev-commit
冲突解决流程。git merge之后手动处理文件然后再次add commit即可
命令21:禁用快速合并模式–no-ff
$ git merge –no-ff -m “merge with no-ff” dev
命令22 :暂存工作空间的改动和恢复
$ git stash暂存
$ git stash pop 恢复并删除当前缓存
$ git stash apply 恢复某个默认第一个
$ git stash dorp删除
$ git stash list 缓存列表
命令23:强制删除某个废弃分支
$ git bransh -D branchname
命令24:查看远程库信息
$ git remote简略信息
$ git remote -v详细信息
命令25:给commit打标记
$ git tag tagname给当前最新的commit打标记
$ git tag查看所有标记
$ git tag tagname commitid给某个commit打标记
$ git log –pretty=oneline –abbrev-commit查看历史commit版本
$ git show tagname 查看当前标记详情
git tag -a <tagname> -m “blablabla…”对标记进行描述方式创建
命令26:标签删除和标签推送
$ git tag -s tagname
$ git push origin tagname推送某个
$ git push origin –tags推送所有
远程删除
先删除本地git tag -d tagname
git push origin :refs/tags/tagname
命令27:使git窗口显示颜色
$ git config –global color.ui true
命令28:配置命令别名st为别名也就是说alias是别名前缀
$ git config –global alias.st status
拓展知识设置忽略
通过编写.gitignore文件进行配置
好看的log输出log –color –graph –pretty=format:’%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset’ –abbrev-commit

关于jsessionid来源的研究

java开发中偶然是会遇到,系统登陆的各种问题。比如有的浏览器能登陆有的不能登陆,这时候就需要人工去在具体的环境中找寻原因。首先要找的就是跟踪登陆时候session的状态。那么浏览器中sessionid到底是在哪里看又在哪里生成呢。大多数人只知道session的作用但是没研究过的工作原理。首先session有两种模式进行工作,1.浏览器自动cookie模式。这种模式一般情况session名字是叫做jsessionid,这应该是一个规范。具体不同的服务器可能名字不一样。反正tomccat就是jsessionid;2.url重构的方式来实现这种情况需要每个url后面都需要追加当前sessionid,这是针对有浏览器被禁用cookie的时候使用的方式。所以一旦出现登陆不能成功的时候就要记得注意检查是不是浏览器禁用了cookie,如果cookie没有被禁用的时候,再看下跟踪下后台,看下后台有没有接收到该sessionid。在没有手动管理session的系统中跟踪session时不要想着找sessionid在哪里创建的,是没有意义的。这些都是servlet完成,而且tomcat容易会自动进行cookie标示存到浏览器,浏览器下次请求也能自动传递该域下的cookie并且tomcat会自动关联响应的session。你只需要查看当前session和浏览器对应的是不是同一个id,有没有过期即可。

iframe无法自适应高度问题

在给iframe的onload方法对iframe进行自适应高度时,遇到不能正常适应的情况,页面总是保持最大的高度。其后的页面不管多小,都保持最大的高度,页面底部会有大片空白。用户体验很不好。找了网上很多代码都未曾有效适应。后来经过测试发现iframe每次加载新的url如果高度足够内容展示,容器的高度就不会改变。解决方法是在iframe加载新页面之前手动将iframe的高度设置为一个最小值,但是不要设置为0,因为为0用户体验不好,页面会特别闪眼。预先设置好高度后再次加载时候就会重新按照新的高度进行撑开了。具体怎么自适应就自行百度吧

ORA-00911: 无效字符问题和解决

当捕捉到这个异常ORA-00911,后首先相当的是把sql放到sqlplus等软件中测试一下,结果发现在那边是可以执行的,而且没有报错。

然后再回去看sql因为sql太长不太好找具体哪里有无效字符,而且报错定位不明显。这个时候一般情况是sql中有分号导致的。如果你的sql结尾处没有分号,那么hibernate执行的异常中一般是会告诉哪个字符是非法字符的。只有这一种情况最恶心,异常太不明显了。不知道的人要想一个个排查查半天都查不出所以然。

安卓activity上手写

做安卓开发经常会有一些办公性质的系统会要求手写签批功能。比如需要针对一些办理信息进行手写标注,或者对一些word,pdf等等信息进行编辑等功能。其中针对word和pdf的技术往上可以找到,而且技术比较成熟。现在我将要介绍的是在手机所见即所得的页面上进行签批的功能实现。首先当我初步遇到这个需求的时候是先去网上找有没有相关的已经实现的技术来做参考,结果找了很久没有找到,于是开始自己想办法来做实现。首先安卓在activety上面直接进行绘制的技术不好做实现,或者可以通过自定义一个view的方式来实现,但是实现起来应该会特别复杂,而且会影响现有activety的滑动事件。 所以我就想有没有办法做一个低侵入式的方式来实现,尽量不干扰当前活动。后来想到了一个方案,我把需求拆分了两步来实现,首先对当前获得进行截图,缓存改截图文件,然后跳转到另一个专门做签批的activety在图片上进行签批操作。这样1.对原来的activety没有任何影响,2.对activety进行截屏的技术很好实现,3.图片上进行书写签批也有成熟的技术实现。思路理清了事情也就完成了百分之80了。接下来我来仔细和大家讲解下具体实现;大家先把代码下载:URL

首先是搞一个截屏的工具类ScreenShot.java有两种类型的截屏:当前显示内容截取,滚动截取;可以根据需求进行选择用哪种方式实现。这里我们就用shoot方法;shoot方法参数为当前活动上下文,最终结果是将截屏保存到指定位置并返回该位置。这里测试就用根目录做缓存位置

public static String shoot(Activity a) {
ScreenShot.savePic(ScreenShot.takeScreenShot(a), “sdcard/xx.png“);
return “sdcard/xx.png”;
}

截屏工具搞完了接下来就是在需要截屏的active中绑定触发截屏的实现。可以直接注册一个按钮来触发即可

String sdcardpath= ScreenShot.shoot (ProjectDetailActivity.this);  //截屏

截屏之后将图标路径传递到签批的activity

Intent intent1 = new Intent(ProjectDetailActivity.this, JasonDrawActivity.class); intent1.putExtra(“JasonImg”, sdcardpath);        startActivity(intent1);

其中JasonDrawActivity.java就是我们的主角,最终签批的活动。这里呢我使用的是国外的一个开源项目SignaturePad,这个手写效果是我找了很多中最满意的,自带笔锋效果。但是该项目的源码是基于android studio创建的,我要用到的项目是eclispe创建的,没办法直接用,后来我把SignaturePad转换为eclispe模式的。有需要在eclispe实现的朋友可以联系我邮箱。不过大部分人应该都转android studio了。下载下来之后直接作为库项目就可以引入到你自己的项目就行了。JasonDrawActivity中注册的几个按钮就是各种操作的入口。大家自己就能看懂。接下来我来提供示例项目给大家;

下拉框多选功能实现

这里要介绍的是一个开源插件multiple-select  github地址为https://github.com/wenzhixin/multiple-select    插件提供 的 文档本身就很全面,而且一般的主流浏览器都能够支持。

依赖的js有  jquery,bootstrap,multiple-select ;css有bootstrap,multiple-select

使用方法:给select元素设置multiple=”multiple”属性。然后通过$(‘#id’).multipleSelect();对改元素进行渲染即可;为了更能适应中文使用环境可以把js中的部分英文状态改成中文,比如全选的状态等等。可以通过全局搜索定位到相应的位置进行修改。该插件的效果很简洁大方,在我看来是比较美观的。

树形选择框实现

找了很久关于树形选择框的插件。大部分都是ztree来自己实现,虽然能用但是对代码侵入性太高,往往实现一个功能要写大量js,终于在网上被我找到了一个侵入比较低的实现方式,原博客地址为URL。但是呢大神实现后由于时间比较久只有js没有css。我重新给加了css做实现,并且对js做了调整,但是和原效果图还是有区别的,因为重在功能实现,样式大家可以自己参照我写的,做自己对应的调整即可。js下载地址 css下载地址

插件依赖:jquery,ztree

使用方法为:

<input id="simple-select" name="test" />
注册一个input框来进行绑定下拉框只需要一个id即可渲染。name是你自己最终的表单项名称
$(function(){
  var data={items: ${testArray}
  $("#simple-select").drawTree(data);
}
没错就这么简单。超低的侵入性。其中${testArray}为json数组,格式为[  {code:'root',name:'根节点',pid:-1}, 
    {code:'node',name:'二级节点',pid:'root'} ]
可以从后台获取。ajax获取或者直接从作用域中获取都行。

使用cxf遇到的一个异常

org.apache.commons.discovery.DiscoveryException: No implementation defined for org.apache.commons.logging.LogFactory

jar包冲突导致的,应是你的应用中已经捆绑了commons-logging的jar包,可以删除试试。