常用技术代码快现-不断更新中
1、struts2的actionSupport获取web.xml中的配置参数
第一步:web.xml设置
<context-param>
<param-name>getURL</param-name>
<param-value>https://www.baidu.com</param-value>
</context-param>
第二步:actionSupport 获取
ActionContext ctx = ActionContext.getContext();
String getURL=((ServletContext) ctx.get(ServletActionContext.SERVLET_CONTEXT)).getInitParameter("getURL");
System.out.println("getURL="+getURL);
getServletContext().getInitParameter("getURL");
其他获取文件以及解析的例子-通过spring读取配置文件、java类直接读取配置文件
http://blog.csdn.net/bestcxx/article/details/54564687#t9 8 和 9
java读取txt文件的内容,按行和列解析
http://blog.csdn.net/bestcxx/article/details/65446489
2、Linux 赋予 某用户对某文件夹的操作权限
第一步:使用root用户登陆,获取root权限
第二步:普通用户存在,比如普通用户为 admin
第三步:文件夹目录存在,比如为/home/usr/share/
第四步:执行下面的命令
$ chown -R admin:admin /home/usr/share
3、http协议获取Header中的文件名-split
String fileName=connection.getHeaderField("Content-Disposition").split("=")[1];
4、nas
NAS(Network Attached Storage:网络附属存储)按字面简单说就是连接在网络上,具备资料存储功能的装置,因此也称为“网络存储器”。它是一种专用数据存储服务器。它以数据为中心,将存储设备与服务器彻底分离,集中管理数据,从而释放带宽、提高性能、降低总拥有成本、保护投资。其成本远远低于使用服务器存储,而效率却远远高于后者。目前国际著名的NAS企业有Netapp、EMC、OUO等。
5、myecplise生成javaAPI文档
http://blog.sina.com.cn/s/blog_630d68f601014tj3.html
6、myecplise中设置注释格式
http://blog.csdn.net/hu_shengyang/article/details/8061685
7、StringUtils.isNotBlank("stringstr")
import org.apache.commons.lang3.StringUtils;
StringUtils.isNotBlank("stringstr");
8、Axis2调用服务org.apache.axis2.AxisFault: Service class stu.demo.service.Axis2TestImpl must have public as access Modifier
使用axis2对外发布服务的时候,一般的方法是需要发布实现类,而不是接口类。
9、eclipse转大小写快捷键
ctrl+shift+x 转为大写 ctrl+shift+y 转为小写
10、根据名字获取项目中文件的绝对路径
this.getClass().getResource("/888010047890002.p12").getPath();
11、CLOB、BLOB , CLOB与BLOB的区别
具体参照http://blog.csdn.net/magister_feng/article/details/7825892
12、Object… obj
具体参照 http://blog.sina.com.cn/s/blog_6d9ecdef0100nyxv.html
13、hibernate 注解 时间格式 2017-02-19 21:50:52
@Temporal(TemporalType.TIMESTAMP)
14、hibernate 配置文件 时间类型
映 射 类 型 |
Java类型 |
标准SQL类型 |
描 |
date |
java.util.Date或者java.sql.Date |
DATE |
代表日期,形式为: YYYY-MM-DD |
time |
java.util.Date或者java.sql.Time |
TIME |
代表时间,形式为: HH:MM:SS |
timestamp |
java.util.Date或者java.sql. Timestamp |
TIMESTAMP |
代表时间和日期, 形式为: YYYYMMDDHHMMSS |
calendar |
java.util.Calendar |
TIMESTAMP |
同上 |
calendar_date |
java.util.Calendar |
DATE |
代表日期,形式为: YYYY-MM-DD |
15、SVN提交报错
svn: E200007: CHECKOUT
这个解决办法就是使用cleanup命令,然后就可以提交了
项目右键->team->Cleanup
16、<c:if>没有else,使用<c:choose>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
c标签 的 jar包
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
<c:choose>
<c:when test="${data.num1==0}">
${data.num2}
</c:when>
<c:otherwise>
${data.num2-data.num1}
+${data.num1}
</c:otherwise>
</c:choose>
17、linux查看域名解析配置cat /etc/hosts
cat /etc/hosts
18、Eclipse启动时发生An internal error occurred during: "Initializing Java Tooling"
删除当前工作目录下的WORKSPACE_HOME/.metadata/.plugins/org.eclipse.core.resources/.project,然后重新启动Eclipse
19、Could not write metadata for '/RemoteSystemsTempFiles'.
Project Explorer view > Customize View... > Filters > Uncheck "RSE Internal Projects" > OK
然后在Project Explorer中找到RemoteSystemsTempFiles并删除。
见图例 http://jingyan.baidu.com/article/e4511cf32b14ea2b845eaf8a.html
20、js文件和css文件连接后面带的参数是什么意思
<link href="/css/css.css?v=20110526" media="screen" rel="Stylesheet" type"text/css" />
<script src="/js/js.js?v=20110526" type="text/javascript"></script>
问:上面链接外部的css或js文件名后跟了一个“?”,并带上一个参数,作用是什么呢?
答:js或css带参数,是为了避免旧的浏览器缓存继续生效;
特别是在大型站中随时可能会更改局部css文件,为了避免浏览器刷新而继续使用旧的CSS缓存文件,在使用时往往会带上一个动态参数。
21、Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check http://xhr.spec.whatwg.org/.
async : true, 就可以了。当然,这可能只是众多场景中的一种。
22、<c:forEach>和<select>标签的使用,list中是实体
<select id="opt_groupCode" name="groupCode">
<c:forEach var="Group" items="${List}">
<option value="${Group.GroupCode}" <c:if test="${Group.GroupCode == user.groupCode}"> selected</c:if>>
${Group.GroupCode}- ${Group.GroupName}
</option>
</c:forEach>
</select>
23、静态变量和静态类的继承与重写规律
测试抽行类、接口类、普通类中静态方法、静态变量、普通方法、普通变量的继承和覆盖的结果。结论在各类中有提现。
https://github.com/Bestcxy/SSH-ajax-axis2-maven-log4j-redis
com.bestcxx.mavenstu.mavenssh.test 包下
总结就是:静态方法是不可以被覆盖重写的,但是可以被继承。
普通方法可以被覆盖重写也可以不覆盖重写。抽象类的继承类必须覆盖重写抽象方法,可以选择是否覆盖重写抽象类中普通方法。
接口类的继承还是接口类,没有强制覆盖重写的要求。接口类的实现要求子类强制覆盖重写普通方法。
但是再次强调一下,静态方法不可以被覆盖重写。所以,接口类无静态方法,抽象类无抽象静态方法。
接口无构造方法。
静态变量和一般变量可以存在于接口类中。
有构造方法的类,其子类可以通过super(value..)的方式修改其父类中常量的初始值。
24、oracle与mysql 搜索为空赋默认值
oracel 函数声明:(http://blog.csdn.net/wxn877838604/article/details/42523209)
nvl(col,val)
说明:当col为空时取val作为返回值,当col不为空时取col值。
mysql函数声明:(http://jingyan.baidu.com/article/6b182309516bc5ba58e159f0.html)
ifnull(expr1,expr2)
假如expr1不为NULL,则IFNULL()的返回值为expr1; 否则其返回值为expr2。IFNULL()的返回值是数字或是字符串,具体情况取决于其所使用的语境。
25、case when then+left join +3个表
t1表
t2表
t3表
SELECT * FROM t1 LEFT JOIN t2 ON t1.`id`=t2.tid LEFT JOIN t3 ON t1.id=t3.tid
SELECT t1.id,
CASE t1.`name`
WHEN 't1-id=1' THEN t2.`name`
WHEN 't1-id=2' THEN t3.`name`
END AS theName
FROM t1 LEFT JOIN t2 ON t1.`id`=t2.tid LEFT JOIN t3 ON t1.id=t3.tid;
26、checkbox 的全勾选和全部取消勾选-不可勾选 disabled="disabled"
注意这里的逻辑,isChecked为true是勾选,false是不勾选
$(".chooseall").click(function(){
var isChecked = $(this).prop("checked");
$("input[name='checkbox1']").prop("checked", isChecked);
});
<input type="checkbox" disabled="disabled"/>
27、svn合并代码标识意义
-- <<<<<<< .working 到====之间是本地的
--======是分割符号
>>>>>>> .merge-right.r 数字 ====到这个之间是线上的
28、sql表新增字段和注释-以及修改
ALTER TABLE user ADD COLUMN user.status VARCHAR(2) NOT NULL DEFAULT '0' COMMENT '状态,0-正常,1-废弃';
修改
ALTER TABLE user MODIFY COLUMN user.status INT NOT NULL DEFAULT '0' COMMENT '测试,修改为int';
29、默认隐藏div
<div id="hide" style="display:none;"></div>
30、jstl fn:indexOf()函数
${fn:indexOf(record.serviceTypeId, "1")}
31、jstl组合用法-字符串截取判断-c:set
<c:set var="bannerflag" value='${fn:contains(record.serviceTypeId,"2")}'/><!-- 包含2,则为ture -->
<c:choose>
<c:when test="${bannerflag}">
<input type="checkbox" name="allLoanSalesPlatform"value="${record.numbering }" class="showBannerDiv" /> ${record.name }
</c:when>
<c:otherwise>
<input type="checkbox" name="allLoanSalesPlatform" value="${record.numbering }" class="hideBannerDiv"/> ${record.name }
</c:otherwise>
</c:choose>
32、LRU和LFU的区别
LFU (Least Frequently Used) 最近最少使用,以时间段内使用次数为排序依据,当存储空间不足,使用次数最少的将被淘汰,新加入的加到队尾。
LRU (Least Recently Used)最长时间未被使用,重点是是否使用,一旦被命中,则排序上升至最前端,如果没有被命中,则淘汰最久没有被使用的,即队尾的,新加入的将被排在队尾。
比如3个存储空间
依次进入的是:1,2,3,2,4,2,4,5
LFU实现:
1 //1(1次)
21 //1(1次),2(1次)
321 //1(1次),2(1次),3(1次)
312 //3(1次),1(1次),2(2次)
412 //4(1次),1(1次),2(2次) 3被淘汰,4加入队尾
412 //4(1次),1(1次),2(3次)
142 //1(1次),4(2次),2(3次) 4的次数超过1的次数,但是比2的出现次数要少,排位上升一位
542 //5(1次),4(2次),2(3次) 1被淘汰,5加入队尾
LRU 实现:
依次进入的是:1,2,3,2,4,2,4,5
1
21
321
312 //2被命中,排序放到队首
412
412
124 //4被命中,排序放到队首
524 //1被淘汰,5被加到队尾
33、静态方法和静态变量继承覆盖规律
测试抽行类、接口类、普通类中静态方法、静态变量、普通方法、普通变量的继承和覆盖的结果。结论在各类中有提现。总结就是:静态方法是不可以被覆盖重写的,但是可以被继承。普通方法可以被覆盖重写也可以不覆盖重写。抽象类的继承类必须覆盖重写抽象方法,可以选择是否覆盖重写抽象类中普通方法。接口类的继承还是接口类,没有强制覆盖重写的要求。接口类的实现要求子类强制覆盖重写普通方法。但是再次强调一下,静态方法不可以被覆盖重写。所以,接口类无静态方法,抽象类无抽象静态方法。对于静态变量,如果父类提供了构造方法,子类可以重写父类的变量或者静态变量,但是接口类无构造方法,所以只有抽象类和普通类的静态变量或者变量可以被子类覆盖重写。
详细的验证代码请看 https://github.com/Bestcxy/SSH-ajax-axis2-maven-log4j-redis 下 src/test/java/ com.bestcxx.mavenstu.mavenssh.test 的测试类
静态变量如果是public的,那么这个类所有的实例共享一个静态变量。
34、@Before 和 @BeforeClass、@After 和 @AfterClass 的区别
@Before、@After
在每个测试方法之前都会运行一次,只需声明成public,一个测试类中可以有多个方法被标注
@BeforeClass,@AfterClass
在类中只运行一次,必须声明成public static,一个测试类中只能有一个方法被标注
35、junit捕获预计异常算是通过
@AfterClass
public static void After(){
//测试结果已经无法获取,说明 Ehcache 已经被关闭了
try {
TestCase.assertEquals("true",singletonCache.get(1L).equals("This is a test for Ehcache"));
logger.info("\n "+singletonCache.get(1L));
} catch (IllegalStateException e) {
logger.info("\n 测试结果已经无法获取,说明 Ehcache 已经被关闭了");
TestCase.assertEquals("没有出现预计的异常则junit无法通过",e.getMessage(),"State is UNINITIALIZED");
}
}
异常信息
java.lang.IllegalStateException: State is UNINITIALIZED
at org.ehcache.core.StatusTransitioner.checkAvailable(StatusTransitioner.java:60)
at org.ehcache.core.Ehcache.get(Ehcache.java:165)
at com.bestcxx.mavenstu.mavenssh.ehcache.EhCacheStudyTest.After(EhCacheStudyTest.java:56)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
36、一个全局遮照层的例子-底层、上层的显示和隐藏
·<div id="mask" style="display: none;"></div>
·$("#mask").attr("style","width: 100%;height: 100%;background-color: rgba(210,210,210,0.7);position: absolute;margin-top: -70;z-index: 999999");
·$("#rejectDiv").attr("style","background-color: white;position: absolute;z-index: 999999;width: 300px;height: 200px;border: 5px solid #E9EDF1;margin-left:"+($("body").width()/2-150)+";margin-top:"+($("body").height()/2-200));
·$("#rejectDiv").hide();
·$("#mask").hide();
37、eclipse 无法debug跟踪代码
1、将项目资源定位给eclipse,clean install 然后需要一段时间(试试重启eclipse,有时候后台会运行一些东西,前台未必有所感知,然后给你的感觉就是查不到)
http://www.educity.cn/wenda/469018.html
2、检查 jar 包依赖
<!-- apache 基础组件-debug跟踪代码 -->
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency>
38、String、StringBuffer与StringBuilder之间区别
1.(String 类型赋值或者+,会重复创建对象)如果要操作少量的数据用 = String
2.(StringBuilder 线程不安全)单线程操作字符串缓冲区 下操作大量数据 = StringBuilder
3.(StringBuffer 线程安全)多线程操作字符串缓冲区 下操作大量数据 = StringBuffer
39、mysql 常用语句
http://www.111cn.net/database/mysql/60915.htm
ALTER TABLE 表名 ADD COLUMN 字段名 VARCHAR(20) DEFAULT NULL COMMENT '注释'
ALTER TABLE 表名 MODIFY COLUMN 字段名 VARCHAR(20)COMMENT '注释'
40、switch 的参数类型String需要jdk1.7以上
switch语句在jdk1.5之前可以使用byte、boolean、int、short、char,不能使用String;但是在Java程序中用String只能是1.7 版本以上
41、实体类json注解的使用技巧-忽略和限定格式
实体和json之间是可以*转化的,有时候我们不需要某个字段在实体转json的时候出现,这个时候在这个字段的get方法上标注
@JsonIgnore 即可
如果这个字段是时间类型,而我们在实体转json的时候需要其自动以需要的格式显示,则在这个字段的get方法上增加标注
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") 即可
42、hibernate 限定时间格式的字段
@Temporal(TemporalType.TIMESTAMP) 存库市时间格式为 yyyy-MM-dd HH:mm:ss
43、hibernate 限定整数和小数位数
@Column(name="PRICE",nullable=true,precision = 10, scale = 2)//整数位10,小数位2
44、insert的数据是已存的另一张表的数据
表主键自动生成
INSERT usermodel2 (usermodel2.`passWord`,usermodel2.`createDate`) SELECT usermodel.`passWord`,usermodel.`createDate` FROM usermodel WHERE usermodel.`userName`='658469'
45、insert增加条件
46、Spring AOP中pointcut expression表达式解析 及匹配多个条件
http://www.cnblogs.com/qinyubin/p/4075466.html
表达式例子如下:
任意公共方法的执行:
execution(public * *(..))
任何一个以“set”开始的方法的执行:
execution(* set*(..))
AccountService 接口的任意方法的执行:
execution(* com.xyz.service.AccountService.*(..))
定义在service包里的任意方法的执行:
execution(* com.xyz.service.*.*(..))
定义在service包和所有子包里的任意类的任意方法的执行:
execution(* com.xyz.service..*.*(..))
定义在pointcutexp包和所有子包里的JoinPointObjP2类的任意方法的执行:
execution(* com.test.spring.aop.pointcutexp..JoinPointObjP2.*(..))")
47、junit 测试 Spring-可在junit控制回滚
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.annotation.Rollback;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.bestcxx.mavenstu.mavenssh.model.TClass;
import com.bestcxx.mavenstu.mavenssh.service.TClassService;
48、maven中配置jetty 插件
1、在 pom 文件中增加
<build>
<!-- jar包名称 -->
<finalName>springmvc</finalName>
<plugins>
<!-- 编译jdk版本设置 1.6 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
<uriEncoding>${project.build.sourceEncoding}</uriEncoding>
</configuration>
</plugin>
<!-- jetty插件 -->
<!-- 在settings.xml 文件中新增 <pluginGroup>org.mortbay.jetty</pluginGroup>
<pluginGroups>
<pluginGroup
| Specifies a further group identifier to use for plugin lookup.
<pluginGroup>com.your.plugins</pluginGroup>
<pluginGroup>org.mortbay.jetty</pluginGroup>
</pluginGroups>
-->
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>6.1.26</version>
<configuration>
<!-- 通过jetty访问项目时的项目名称 ${project.build.outputDirectory} 为war包名 -->
<webApp>
<contextPath>${project.build.outputDirectory}</contextPath>
</webApp>
<!-- jetty附属配置,未启用 -->
<!-- <webDefaultXml>src/main/resources/webdefault.xml</webDefaultXml> -->
<!-- configuration.scanIntervalSeconds 配置表示新代码的扫描时间间隔(秒),值 <= 0 表示不扫描 -->
<scanIntervalSeconds>0</scanIntervalSeconds>
<!-- 端口设置 -->
<connectors>
<connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
<port>8085</port>
</connector>
</connectors>
</configuration>
</plugin>
</plugins>
</build>
2、在 maven 的 setting.xml 文件中增加
<!-- pluginGroups
| This is a list of additional group identifiers that will be searched when resolving plugins by their prefix, i.e.
| when invoking a command line like "mvn prefix:goal". Maven will automatically add the group identifiers
| "org.apache.maven.plugins" and "org.codehaus.mojo" if these are not already contained in the list.
|-->
<pluginGroups>
<!-- pluginGroup
| Specifies a further group identifier to use for plugin lookup.
<pluginGroup>com.your.plugins</pluginGroup>
-->
<pluginGroup>org.mortbay.jetty</pluginGroup>
</pluginGroups>
49、commit之后rollback无效
commit之后rollback无效
50、多线程的测试只能在 main 方法中
多线程的测试只能在 main 方法中,junit 中是无效的
51、一个满足一般条件的注解式事务配置
每次请求,如果没有事务则新起一个事务,如果有则加入当前事务。不会出现脏度、幻读和不可重复读。超时设置可以防止事务超时锁死表
@Transactional(readOnly=false,isolation=Isolation.REPEATABLE_READ,propagation=Propagation.REQUIRED,rollbackFor=Exception.class,timeout=3)
52、http 协议的 DELETE 提交无效
在过滤器中添加
headers.add(“Access-Control-Allow-Methods “,”GET,POST,OPTIONS,PUT,DELETE“);