java笔记
来源:互联网 发布:光子计算机 知乎 编辑:程序博客网 时间:2024/06/06 14:17
1、welcome-file-list是一个配置在web.xml中的一个欢迎页,用于当用户在url中输入工程名称或者输入web容器url(如http://localhost:8080/)时直接跳转的页面.
例如:
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file> index.action </welcome-file>
</welcome-file-list>
今天我遇到了一个问题,就是直接输入localhost:8080/不是跳转到index.html,而是报404找不到的错误,根据错误信息看明显是没有跳转到index.html,意思就是说welcome-file-list根本就木有起作用。
解决问题一定要从原理入手,所以要先分析welcome-file-list是怎么工作的。
welcome-file-list的工作原理是,按照welcome-file的.list一个一个 去检查是否web目录下面存在这个文件 ,如果存在,继续下面的工作(或者跳转到index.html页面,或者配置有struts的,会直接struts的过滤工作).如上例,先去webcontent(这里是Eclipse的工程目录根目录)下是否真的存在index.html这个文件,如果不存在去找是否存在index.jsp这个文件,以此类推。
还要说的是welcome-file不一定是html或者jsp等文件,也可以是直接访问一个action。就像我上面配置的一样,但要注意的是,一定要在webcontent下面建立一个index.action的空文件,然后使用struts配置去跳转,不然web找不到index.action这个文件,会报404错误,原因就是我之前说的那样。
希望上述文章对大家有帮助,如果还有其他的可能使得欢迎页不起作用,欢迎大家给我留言。
2、mysql 当天天数相差1天的日期
where quote_date = DATE_SUB(CURDATE(),INTERVAL 1 Day)
SELECT NOW(),CURDATE(),CURTIME()
结果类似:
NOW() CURDATE()CURTIME()
2008-12-29 16:25:462008-12-2916:25:46
3、jquery遍历和鼠标悬浮的事件
http://www.w3school.com.cn/jquery/jquery_ref_traversing.asp
jquery遍历
$("button").click(function(){
$("li").each(function(){
alert($(this).text())
});
});
$(selector).each(function(index,element))
function(index,element)
index - 选择器的 index 位置
element - 当前的元素(也可使用 "this" 选择器)
鼠标悬浮的事件
$("#list13810 tbody tr").each(function(index) {
if(index%2 != 0){
$("#list13810 tbody tr").eq(index).addClass("change");
}
}).hover(function(){
$(this).addClass("hover");
},function(){
$(this).removeClass("hover");
});
鼠标放上去显示手型
style="cursor:pointer"
4、/**
* 清除用户浏览历史记录
*/
public void clearCookies(){
HttpServletResponse response=ServletActionContext.getResponse();
Cookie cookie=new Cookie(Constants.HISTORY_INFO,null);
cookie.setMaxAge(0);
cookie.setPath("/");
response.addCookie(cookie);
}
5、四舍五入
waisanyuanPrice=new BigDecimal(price).setScale(2, BigDecimal.ROUND_HALF_UP).toString();
6、登录
/**
* 登录智农网
* @return
*/
public String toLogin(){
try{
String errorMsg=this.getRequest().getParameter("error");
if (StringUtils.checkStr(errorMsg)) {
if (errorMsg.equals("invaildVerityCode")) {
this.setErrMsg("验证码输入有误!");
return ERROR;
}else if (errorMsg .equals("needVerityCode")) {
this.setErrMsg("请输入验证码!");
return ERROR;
}else if (errorMsg .equals( "invaildUserNamePasswordNeedVerityCode")) {
this.setErrMsg("用户名或密码错误!");
return ERROR;
}else if (errorMsg.equals("invaildUserNamePassword")) {
this.setErrMsg("用户名或密码错误!");
return ERROR;
} else if(errorMsg.equals("noAuthorize")) {
this.setErrMsg("您没有开通此系统");
return ERROR;
} else if(errorMsg.equals("limitLogin") ){
this.setErrMsg("密码错误次数超过10次,帐号被锁定2小时");
return ERROR;
}else if(errorMsg.equals("userDisabled")){
this.setErrMsg("用户被禁用或您没有开通此系统");
return ERROR;
} else {
this.setErrMsg("用户登录失败!");
return ERROR;
}
}
Assertion sysObj = AssertionHolder.getAssertion();
if(null == sysObj){
throw new NullPointerException("读取登录用户信息失败");
}
AttributePrincipal sysPrincipal= sysObj.getPrincipal();
if(null == sysPrincipal){
throw new NullPointerException("读取登录用户信息失败");
}
Map<String,Object> loginMap = sysPrincipal.getAttributes();
if(null == loginMap || loginMap.isEmpty()){
throw new NullPointerException("读取登录用户信息失败");
}
Object loginNameObj=sysPrincipal.getName();
Object userIdObj= loginMap.get("boId");
Object userType = loginMap.get("userType");
Object realNameObj = loginMap.get("name");
if(null == userIdObj || null == userType || null == realNameObj){
throw new NullPointerException("读取登录用户信息失败");
}
if(!StringUtils.isLong(userIdObj.toString()) || !StringUtils.isLong(userType.toString()) || !StringUtils.checkStr(loginNameObj.toString())){
throw new NullPointerException("读取登录用户信息失败");
}
Logger log = AwebLogFactory.getOriginalLogger(BaseAction.class.getName());
log.info("get login user info:loginId:" + userIdObj + ",userType:" + userType + ",loignName:" + loginNameObj);
if( null==realNameObj || !StringUtils.checkStr(realNameObj.toString())){
this.setErrMsg("用户名不能为空!");
return ERROR;
}
String khUserName = realNameObj.toString();
//securityContext.getRealName();
log.info("姓名:khUserName"+khUserName+"登录名:"+loginNameObj.toString());
khUserName = java.net.URLEncoder.encode(khUserName+ "&" + loginNameObj.toString(), Constants.ENCODE_UTF8);
log.info("khUserNameloginNameObj转码"+khUserName);
Cookie khCookie = new Cookie("casCookie", khUserName);
khCookie.setDomain(".dbn.cn");
khCookie.setPath("/");
ServletActionContext.getResponse().addCookie(khCookie);
Cookie nxinCookie = new Cookie("casCookie", khUserName);
nxinCookie.setDomain(".nxin.com");
nxinCookie.setPath("/");
ServletActionContext.getResponse().addCookie(nxinCookie);
indexVo=baseActionService.getIndexFromLastPrice();
remenMap=awebPriceCacheService.getReMenAreaMemoryMapFromCache();
}catch(Exception e){
e.printStackTrace();
log.error("login error,error info:" + e.getMessage());
return ERROR;
}
return SUCCESS;
}
7、Linux下Tomcat重新启动
在Linux系统下,重启Tomcat使用命令操作的!
首先,进入Tomcat下的bin目录
cd /usr/local/tomcat/bin
使用Tomcat关闭命令
./shutdown.sh
查看Tomcat是否以关闭
ps -ef|grep java
如果显示以下相似信息,说明Tomcat还没有关闭
复制代码
root 7010 1 0 Apr19 ? 00:30:13 /usr/local/java/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms1024m -Xmx1024m -XX:NewSize=256m -XX:MaxNewSize=256m -XX:PermSize=256m -XX:MaxPermSize=256m -XX:+DisableExplicitGC -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/usr/local/tomcat/endorsed -classpath /usr/local/tomcat/bin/bootstrap.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start
复制代码
*如果你想直接干掉Tomcat,你可以使用kill命令,直接杀死Tomcat进程
kill -9 7010
然后继续查看Tomcat是否关闭
ps -ef|grep java
如果出现以下信息,则表示Tomcat已经关闭
root 7010 1 0 Apr19 ? 00:30:30 [java] <defunct>
最后,启动Tomcat
./startup.sh
查看日期tail -f logs/catalina.out #看tomcat的控制台输出;
8、
9、
FTP服务器,则是在互联网上提供存储空间的计算机,它们依照FTP协议提供服务。 FTP的全称是File Transfer Protocol(文件传输协议)。顾名思义,就是专门用来传输文件的协议。简单地说,支持FTP协议的服务器就是FTP服务器。(http://baike.baidu.com/view/106754.htm)
SSH 为 Secure Shell 的缩写,由 IETF 的网络工作小组(Network Working Group)所制定;SSH 为建立在应用层和传输层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。S S H最初是U N I X系统上的一个程序,后来又迅速扩展到其他操作平台。S S H在正确使用时可弥补网络中的漏洞。S S H客户端适用于多种平台。几乎所有U N I X平台—包括H P - U X、L i n u x、A I X、S o l a r i s、Digital UNIX、I r i x,以及其他平台—都可运行S S H。(http://baike.baidu.com/view/16184.htm#sub5909252)
超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。1960年美国人Ted Nelson构思了一种通过计算机处理文本信息的方法,并称之为超文本(hypertext),这成为了HTTP超文本传输协议标准架构的发展根基。Ted Nelson组织协调万维网协会(World Wide Web Consortium)和互联网工程工作小组(Internet Engineering Task Force )共同合作研究,最终发布了一系列的RFC,其中著名的RFC 2616定义了HTTP 1.1。
(http://baike.baidu.com/history/id=43873757)
Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的电脑上使用telnet程序,用它连接到服务器。终端使用者可以在telnet程序中输入命令,这些命令会在服务器上运行,就像直接在服务器的控制台上输入一样。可以在本地就能控制服务器。要开始一个telnet会话,必须输入用户名和密码来登录服务器。Telnet是常用的远程控制Web服务器的方法。(http://baike.baidu.com/view/44255.htm)
HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。 它是一个URI scheme(抽象标识符体系),句法类同http:体系。用于安全的HTTP数据传输。https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。这个系统的最初研发由网景公司进行,提供了身份验证与加密通讯方法,现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。
10、form中的onsubmit在点击提交的时候执行,返回false,停止js
<form id="diseaseClassifyForm" method="post" action="diseaseClassifyManageSaveAdd.action" onsubmit="return checkSubAdd();">
<input type="submit" value="保 存" class="btn-s">
</form>
<script type="text/javascript">
function checkSubAdd(){
var dcname = $('#dcname').val();
if( null==dcname||dcname.trim()==''){
alert('猪病分类名称不能为空!请输入猪病分类名称!');
$('#dcname').focus();
return false;
}
return true;
}
</script>
11、
Spring
1、spring源码下载
一次性源码全量包下载的方法。spring的项目包会托管到github网站上,所以可以从github网站上得到spring任意版本的全量包(使用svn客户端下载),方法如下:1、安装svn客户端,随便使用自己喜欢的一个就行,通常用的最多的是TortoiseSVN。自己下载安装。2、检出(下载)需要的spring版本代码全量包。安装TortoiseSVN后,在电脑的任意空白的地方点击右键->TortoiseSVN->Repo-browser,在地址栏中输入https://github.com/SpringSource/spring-framework/tags/ -> "OK",等一会你会看到下面结果栏中有spring各个版本的全量包。在自己需要的版本上点击“右键”->“Checkout...”,然后填入自己需要保存到本地的位置,再点击确定就ok了,等它自己下载完成就行了。嘎嘎嘎
Git是一个分布式的版本控制系统,最初由Linus Torvalds编写,用作Linux内核代码的管理。
2、
Hibernate,当今很流行的ORM框架,是JPA的一个实现,但是其功能是JPA的超集。
JPA和Hibernate之间的关系,可以简单的理解为JPA是标准接口,Hibernate是实现。
JPA(Java Persistence API)是Sun官方提出的Java持久化规范。它为Java开发人员提供了
一种对象/关系映射工具来管理Java应用中的关系数据。hibernate需引入hibernate-jpa.jar
DBCP(DataBase connection pool),数据库连接池。是 apache 上的一个 java 连接池项目,
也是 tomcat 使用的连接池组件。单独使用dbcp需要2个包:commons-dbcp.jar,commons-pool.jar
由于建立数据库连接是一个非常耗时耗资源的行为,所以通过连接池预先同数据库建立一些连接,放在内存中,
应用程序需要建立数据库连接时直接到连接池中申请一个就行,用完后再放回去。
C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。
目前使用它的开源项目有Hibernate,Spring等
spring3+hibernate3
3、assertEquals(str,"hello:maven");
4、Spring使用反射来创建bean
5、Struts是web框架,(jsp,action,actionForm)
Hibernate是orm框架,持久层
Spring为容器框架,维护bean之间关系的框架
引入包:1)、Spring 2.5 spring.jar或者Spring 3.0 很多包
2)、common-logging
反射机制将applicationContext.xml(重量级文件,必须弄成单例,只加载一次)中的bean存在内存(相当于hashmap),利用spring上下文获取bean
3)实例化
ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");(大多数用此上下文,从类路径中加载,内存便宜)
加载配置文件中的bean,并执行bean的默认的无参数构造方法(只有singleton才这样,prototype也有延迟加载,因为不知道要创建多少了bean)
BeanFactory factory=new XmlBeanFactory(new ClassPathResource(“applicationContext.xml”));(节省内存,适合移动端的项目)
factory.getBean(“bean”);类似延时加载
在执行getBean方法时才会实例化并且,执行bean 的无参数构造方法
Spring提倡用接口编程和ioc(依赖注入),接口不是 被实例化所以bean不能是接口
IOC:
8、配置bean
1)<property name="map">
<map>
<entry key="1" value="ddd"></entry>
<entry key="2" value="ddd2"></entry>
</map>
</property>
private Properties pp;
2)<property name="pp">
<props>
<prop key="pp1">asdf</prop>
<prop key="pp2">sds</prop>
</props>
</property>
3)设置null
<property name="pp">
<null></null>
</property>
4)spring 分散配置<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:/jdbc-mysql.properties</value>
<value>classpath:/config.properties</value>
<value>classpath:/hibernate-po-map.properties</value>
<!--
<value>classpath:/tinyse.properties</value>
<value>classpath:/com/baidu/rigel/sale/iris/workflow/config/deploy.properties</value>
<value>classpath:/memcache.properties</value>
-->
</list>
</property>
</bean>
AOP:
Aop编程在开发框架的时候用的多,在实际项目中用的较少
1)代理对象不需编写,只需配置 2)前置通知实现MethodBeforeAdvice接口3)被代理对象
前置通知,后置通知,环绕通知,异常通知
为了切入某个类中的方法,使用自定义通知,需配置就可以了。
Datasource,sessionFactory,txManager
Maven
1、到官网下载maven,但不知道这些文件有什么区别,应该下哪个?
binary 指的是编译后的二进制文件。是可以直接使用的,你应该下载这个。(apache-maven-3.2.3-bin.zip)source.zip是maven的源码包。tar.gz 是一种压缩文件,在Linux和OSX(苹果系统)下的
2、MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。将数据(如汉字)运算为另一固定长度值,是杂凑算法的基础原理,MD5的前身有MD2、MD3和MD4。
MD5的典型应用是对一段Message(字节串)产生fingerprint(指纹),以防止被“篡改”。举个例子,你将一段话写在一个叫 readme.txt文件中,并对这个readme.txt产生一个MD5的值并记录在案,然后你可以传播这个文件给别人,别人如果修改了文件中的任何内容,你对这个文件重新计算MD5时就会发现(两个MD5值不相同)。如果再有一个第三方的认证机构,用MD5还可以防止文件作者的“抵赖”,这就是所谓的数字签名应用。 MD5还广泛用于加密和解密技术上,在很多操作系统中,用户的密码是以MD5值(或类似的其它算法)的方式保存的, 用户Login的时候,系统是把用户输入的密码计算成MD5值,然后再去和系统中保存的MD5值进行比较,而系统并不“知道”用户的密码是什么。
3、
1、groupId包的路径,artifactId工程名字
进入pom文件所在路径,mvn compile;生成target目录class文件
Src/mian/java
Src/test/java
2、mvn test 执行test测试类,在target目录下生成test.class文件
3、mvn clean 去除target目录
4、mvn package在target编译测试并目录下生成.jar文件
5、mvn install等同于(mvn compile,mvn package,mvn test),并把jar包发布到本地的仓库
6、仓库所在的jar包E:\apache-maven-3.3.1\lib\maven-model-builder-3.3.1.jar
http://mvnrepository.com/
7、mvn archetype:generate或者mvn archetype:generate -DgroupId=com.sitech -DartifactId=test -Dversion=0.0.1-SNAPSHOT
8、文件中重命名 Alt+Shift+R
Ctrl+d删除之前内容
9、-Dmaven.multiModuleProjectDirectory system propery is not set. Check $M2_HOME environment variable and mvn script match.
Jdk1.8和maven3.3.1版本冲突造成
Maven 隐式变量
· ${basedir} 项目根目录
· ${project.build.directory} 构建目录,缺省为target
· ${project.build.outputDirectory} 构建过程输出目录,缺省为target/classes
· ${project.build.finalName} 产出物名称,缺省为${project.artifactId}-${project.version}
· ${project.packaging} 打包类型,缺省为jar
· ${project.xxx} 当前pom文件的任意节点的内容
EasyMock 使用方法与原理剖析
EasyMock 是一套通过简单的方法对于指定的接口或类生成 Mock 对象的类库,它能利用对接口或类的模拟来辅助单元测试。本文将对 EasyMock 的功能和原理进行介绍,并通过示例来说明如何使用 EasyMock 进行单元测试。
10、<scope>compile</scope>编译,测试,打包(打包)的时候将依赖加入,默认范围
provided编译和测试会将依赖加进去。Servlet-api tomact中包括,打包会冲突
runtime在运行时依赖,如mysql-connect
test 测试时加依赖
11、maven——disable maven nature清除maven支持,再转换maven 工程 configure——convert maven project
12、依赖的传递性(只传递compile范围的包,dbunit依赖junit3.8)
13、Maven依赖的问题
1)A项目依赖L1.0包,B项目依赖L1.1包,C项目依赖A,B,则C依赖A中的jar包,按声明顺序
2)间接依赖按级别短的依赖
3)排除依赖
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>user-core</artifactId>
<version>${project.version}</version>
<exclusions>
<exclusion>
<groupId></groupId>
<artifactId></artifactId>
</exclusion>
</exclusions>
</dependency>
14、聚合
<modules>
<module>../core</module>
<module>../user</module>
<module>../usercore</module>
</modules>
15、继承
<parent>
<groupId>com.wanglu</groupId>
<artifactId>user-extend</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../user-extend/pom.xml</relativePath>
</parent>
其中值得注意的是<packaging>pom</packaging>这个父项目不像之前的项目那样创建16、一个JAR 或者一个WAR,它仅仅是一个引用其它Maven 项目的POM
17、Maven 仓库管理软件来搭建私服,nexus sonatype 2.5最后一个支持jdk1.6的版本
Path环境变量
E:\nexus-2.5.1-01-bundle\nexus-2.5.1-01\bin\jsw\conf\wrapper.conf更改java路径
各种报错,jdk1.7完成
参考文档http://www.oschina.net/question/698806_159372
Hosted respository :本地提交给mvn:deploy -----release,3rd party(可以自己上传第三方jar包),snapshot
中央工厂下载到私服的central proxy工厂
Pom.xml中设置工厂
<repositories>
<repository>
<id>nexus</id>
<name>Nexus repository</name>
<url>http://localhost:8081/nexus/index.html#view-repositories;public~configuration</url>
//public repository包含私服上的前几个工厂,可以增加工厂
</repository>
</repositories>
也可以在maven的conf的setting.xml中设置,如果私服没有则去中央工厂找,如果私服没有,不让去中央工厂找需设置镜像
<mirror>
<id>nexusMirror</id>
<mirrorOf>repositoryId</mirrorOf>工厂id
<name>Human Readable Name for this Mirror.</name>
<url>设置私服路径</url>
</mirror>
<profiles>
<profile>
<id>nexus</id>
<repositories>
<repository>
<id>nexus</id>
<name>Repository for JDK 1.4 builds</name>
<url>http://www.myhost.com/maven/jdk14</url>
<release>
<enable>true</enable>
</relsease>
<snapshots>
<enable>true</enable>
</snapshots>
</repository>
</repositories>
</profile>
<、profiles>
<activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>
配置nexus发布私服的用户
Nexus----security--users
在conf的setting.xml中配置
<server>
<id>deploymentRepo</id>工厂id
<username>repouser</username>用户名如deplement
<password>repopwd</password>deplement123
</server>
给插件绑定目标,在compile之后执行
Maven插件官网搜索各种打包的配置
配置插件引入的依赖只在插件中起作用
‘
Maven 测试 由surefire插件控制,默认执行类名为Test**,**Test,**TestCase的类
Package -DskipTests=true跳过测试
发布web项目,package war copy tomcat手动
Copy插件,自动copy
Clean package Jetty:run
工作
1、Some projects cannot be imported because they already exist in the workspace
ps:诚然修改项目名可以解决,但是给人的感觉好像是以前的找不到了(工程目录下面明明没有)导致无法删除,只好改名,实乃无奈之举!!
思考--加入不进去,一定是以前的有一个标记记录了你的工程信息,也就是说找到那个标记删除它,我们就不用改名字了。经过我的摸索
E:\workspace\eclipseworkspace\.metadata\.plugins\org.eclipse.core.resources\.projects 在我的这个版本的eclipse上是这个目录里面
2、<form id="diseaseClassifyForm" id="columnForm" method="post" action="diseaseClassifyManageSaveAdd.action" onsubmit="return checkSubAdd();"></form>
function checkSubAdd(){
var dcname = $('#dcname').val();
if( null==dcname||dcname.trim()==''){
alert('猪病分类名称不能为空!请输入猪病分类名称!');
$('#dcname').focus();
return false;
}
return true;
}
报错返回报错页面,并跳转查询页
<script>
alert('$!{errMsg}');
location.href = "diseaseClassifyManageList.action";
</script>
3、阿里巴巴的开源fastjson包
参考文章http://blog.csdn.net/djun100/article/details/24237371
import com.alibaba.fastjson.JSONObject;
private static void json2JsonObjectM1() {
//一个JsonObject文本数据
String s = "{\"name\":\"liuzhao\"}";
//将JsonObject数据转换为Json
JSONObject object = JSON.parseObject(s);
//利用键值对的方式获取到值
System.out.println(object.get("name"));
/**
* 打印:
* liuzhao
*/
}
4、java编码
http://blog.csdn.net/howlaa/article/details/12834595
5、日期转换
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int date = calendar.get(Calendar.DATE);
System.out.println(year);
6、svn冲突
http://my.oschina.net/ihanfeng/blog/266319
7、报错
1)Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory ------------没有导入common-logging包
8、这是SVN的版本问题,SVN的1.6.X及以下版本是在每个文件夹都生成一个.svn隐藏文件夹,SVN的1.7.X版是只在版本库根目录下生成一个.svn隐藏文件夹,这是正常情况,一般不必在意。另外,即便SVN服务器端是1.6.X版,但如果用的客户端是TortoiseSVN 1.7.X版,那么同样会只在根目录下生成.svn文件夹。如果你一定想要在每个文件夹都生成.svn文件夹,那只有将SVN客户端更换为1.6.X版。
9、classpath两种用法: classpath*:applicationContext.xml会加入本项目及所有jar包根目录下的applicationContext.xml文件,跨jar包依赖时使用 classpath:applicationContext.xml只加入本项目根目录下的applicationContext.xml文件,不依赖其它jar包的配置文件时推荐这样写,以避免冲突。
classpath 和 classpath* 区别:classpath:只会到你指定的class路径中查找找文件;classpath*:不仅包含class路径,还包括jar文件中(class路径)进行查找.
10、mysql不能进行update a set clumn=1 where id(select min(id) from a)不能对同一张表进行查询更新或者删除
猪价后台正式地址:http://jiageadmin.aweb.com.cn/
猪价后台测试地址:http://jiageadmin.t.dbn.cn/
前台的正式地址:http://m.aweb.com.cn/
前台测试地址:http://m.t.aweb.com.cn/
jar包地址:http://172.16.200.111:8081/nexus/content/groups/public/
----------------------------------------------------------------------------------------------
单点登录(Single Sign On),简称为 SSO
Near Field Communication,NFC)是一种短距高频的无线电技术
单点登录(Single Sign On , 简称 SSO )是目前比较流行的服务于企业业务整合的解决方案之一,
SSO 使得在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。
CAS(Central Authentication Service)是一款不错的针对 Web 应用的单点登录框架,本文介绍了 CAS 的原理、协议、
在 Tomcat 中的配置和使用,对于采用 CAS 实现轻量级单点登录解决方案的入门读者具有一定指导作用。
----------------------------------------------------------------------------------------------
/**
* 删除猪病分类
* @return
*/
public String diseaseClassifyDelete(){
try{
if(null!=dcId && dcId > 0){
if(!diseaseClassifyService.deleteDiseaseClassify(dcId)){
this.setErrMsg("该猪病分类在猪病信息里面有关联!");
return "noDel";
}
}
}catch(Exception e){
this.setErrMsg("删除猪病分类失败!"+e.getMessage());
log.error("删除猪病分类失败!" + e.getMessage());
return "noDel";
}
return SUCCESS;
}
<!-- 删除猪病分类 -->
<action name="diseaseClassifyDelete" class="diseaseClassifyAction" method="diseaseClassifyDelete">
<result type="redirect">diseaseClassifyManageList.action</result>
<result type="velocity" name="noDel">/vm/zhubing/diseaseClassify/diseaseClassifyMessage.vm</result>
</action>
<script>
alert('$!{errMsg}');
location.href = "diseaseClassifyManageList.action";
</script>
-----------------------------------------------------------------------------------------------------------------------
onsubmit提交时进行校验
<form id="diseaseClassifyForm" method="post" action="diseaseClassifyManageSaveAdd.action" onsubmit="return checkSubAdd();">
<table cellpadding="2" class="tb">
<tr>
<td align="center" colspan="2">
<input type="submit" value="保 存" class="btn-s">
</td>
</tr>
</table>
</form>
<script type="text/javascript">
function checkSubAdd(){
var dcname = $('#dcname').val();
if( null==dcname||dcname.trim()==''){
alert('猪病分类名称不能为空!请输入猪病分类名称!');
$('#dcname').focus();
return false;
}
return true;
}
</script>
-----------------------------------------------------------------------------------------------------------------------
struts中redirect和redirectAction的区别
<result type="redirect">diseaseClassifyManageList.action</result>
<result type="redirectAction">diseaseClassifyManageList</result>
-----------------------------------------------------------------------------------------------------------------------
classpath就是代表 /WEB-INF /classes/ 这个路径(如果不理解该路径,就把一个web工程发布为war包,然后用winrar查看其包内路径就理解啦)
常用的场景:
在SSH架构中,配置Spring的上下文环境:
<!-- Spring Configures -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:applicationContext.xml
</param-value>
</context-param>
里面的
classpath:applicationContext.xml
也可以使用 /WEB-INF /classes/ applicationContext.xml 代替
注意:
classpath 和 classpath* 区别:
classpath:只会到你的class路径中查找找文件;
classpath*:不仅包含class路径,还包括jar文件中(class路径)进行查找 ---- 够深入的吧
-----------------------------------------------------------------------------------------------------------------------
$(document).ready(function(){
$("#tab1").addClass("cur");
});
window.onload不能同时编写多个,如果有多个window.onload方法,只会执行一个
$(document).ready()可以同时编写多个,并且都可以得到执行
window.onload没有简化写法
$(document).ready(function(){})可以简写成$(function(){});
-----------------------------------------------------------------------------------------------------------------------
Cookie khCookie = new Cookie(Constants.DIAGNOSE_HIS_COOKIE, hisVal);
khCookie.setPath("/");//正常的cookie只能在一个应用中共享,只能在他创建的应用获得。path产生应用的路径,setpath之后再a,b两个应用中都可获取到cookie
khCookie.setMaxAge(60*60*24*30);秒
ServletActionContext.getResponse().addCookie(khCookie);
-----------------------------------------------------------------------------------------------------------------------
Cookie khCookie = new Cookie("casCookie", khUserName);
khCookie.setDomain(".dbn.cn");
khCookie.setPath("/");
ServletActionContext.getResponse().addCookie(khCookie);
Cookie nxinCookie = new Cookie("casCookie",khUserName);
nxinCookie.setDomain(".nxin.com");
nxinCookie.setPath("/");
ServletActionContext.getResponse().addCookie(nxinCookie);
可在同一应用服务器内共享方法:设置cookie.setPath("/");
跨域共享cookie的方法:设置cookie.setDomain(".jszx.com");
-----------------------------------------------------------------------------------------------------------------------
String hql =" from Symptom where symptomClassifyId=:symptomClassifyId";
Map param = new HashMap();
param.put("symptomClassifyId", symptomClassifyId);
return (List<Symptom>) this.getSession().createQuery(hql).setProperties(param).list();
-----------------------------------------------------------------------------------------------------------------------
、Struts 中获取session、request及response对象的方法
1、我们平常所说的session一般是HttpSession,但在struts2中被封装成了Map类型。
这个map对象里面可以存放键值对,而且我们可以在前台页面中通过相应的表达式将值取出来,如何在Action中获取session呢?下面是一些常用的方法:
1、获取session
1.Map session = ActionContext.getContext().getSession();
2.session.put("userName",userName);
3.ActionContext.getContext().getSession().remove(key);
2、获取HttpSession
1.ServletActionContext.getRequest().getSession();
3、获取HttpRequest
1.ServletActionContext.getRequest();
4、获取HttpResponse
1.ServletActionContext.getResponse()
---------------------------------------------------------------------------------------------------------------------------------------
http://www.cnblogs.com/ningvsban/p/3740717.html
我们知道,ActionContext是Action执行时的上下文,里面存放着Action在执行时需要用到的对象,也称之为广义值栈。
Struts2在每次执行Action之前都会创建新的ActionContext,在同一个线程里ActionContext里面的属性是唯一的,这样Action就可以在多线程中使用。
1.1 ActionContext的线程安全性
那么Struts2是如何保证ActionContext的线程安全性呢?看看ActionContext对象的代码,示例如下:
public class ActionContext implements Serializable {
static ThreadLocal actionContext = new ThreadLocal();
}
ThreadLocal又称为“线程局部变量”,它为每一个使用该变量的线程都提供一个变量值的副本,使每一个线程都可以独立地改变自己的副本,
而不会和其它线程的副本冲突。存放在ActionContext里的数据都存放在这个ThreadLocal的属性中,而这个属性只会在对应的当前请求线程中可见,从而保证数据是线程安全的。
---------------------------------------------------------------------------------------------------------------------------------------
You can't specify target table 'aweb_price_area_yestoday_info' for update input
mysql中不能这么用。 (等待mysql升级吧)
错误提示就是说,不能先select出同一表中的某些值,再update这个表(在同一语句中)
替换方案:
create table tmp as select min(id) as col1 from blur_article group by title;
delete from blur_article where id not in (select col1 from tmp);
drop table tmp;
已经测试,尽请使用
---------------------------------------------------------------------------------------------------------------------------------------
\n
换行(LF) ,将当前位置移到下一行开头
\r
回车(CR) ,将当前位置移到本行开头
\r : return 到当前行的最左边。
\n: newline 向下移动一行,并不移动左右。
Linux中\n表示回车+换行;
Windows中\r\n表示回车+换行。
Mac中\r表示回车+换行。
---------------------------------------------------------------------------------------------------------------------------------------
request.getRequestURI() /jqueryWeb/resources/request.jsp
request.getRequestURL() http://localhost:8080/jqueryWeb/resources/request.jsp
request.getContextPath()/jqueryWeb
request.getServletPath()/resources/request.jsp
注: resources为WebContext下的目录名
jqueryWeb 为工程名
假定你的web application 名称为news,你在浏览器中输入请求路径:
http://localhost:8080/news/main/list.jsp
则执行下面向行代码后打印出如下结果:
1、 System.out.println(request.getContextPath());
打印结果:/news
2、System.out.println(request.getServletPath());
打印结果:/main/list.jsp
3、 System.out.println(request.getRequestURI());
打印结果:/news/main/list.jsp
4、 System.out.println(request.getRealPath("/"));
打印结果: F:\Tomcat 6.0\webapps\news\test
--------------------------------------------------------------------------------------
今天在修改bug时,发现程序使用了 request.getScheme() 。不明白是什么意思,在google 搜索了一下。现在明白了。整理如下:
1、request.getScheme() 返回当前链接使用的协议;比如,一般应用返回http;SSL返回https;
2、在程序中的应用如下:
Java代码 收藏代码
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
3、复习一下request 的常用方法:
request.getSchema()可以返回当前页面使用的协议,http 或是 https;
request.getServerName()可以返回当前页面所在的服务器的名字;
request.getServerPort()可以返回当前页面所在的服务器使用的端口,就是80;
request.getContextPath()可以返回当前页面所在的应用的名字;
----------------------------------------------------------------------------------------------
正向代理:代理端代理的是客户端。
反向代理:代理端代理的是服务端。
public static String getIpAddress(HttpServletRequest request){
String ip = request.getHeader("x-forwarded-for");
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip;
}
-----------------------------------------------------------------------------------------
web-inf规下面的东西是安全的,所以说你直接给web-inf里的jsp是不能纺问的,但是你可以通过servlet或都struts2框架的action进行纺问
-----------------------------------------------------------------------------------------------
@SuppressWarnings("serial")的作用:
假如你实现了Serializable 接口,但是没有给出
private static final long serialVersionUID = 5952689219411916553L;eclipse里会给你提示一个黄色的警告,只要加上类似这样的一个字段,黄色警告就会消失,但是你如果就是不想加这个字段,同时还不想看到那个黄色的警告,没问题,那就要在类上加一个注解(@SuppressWarnings("serial"))不过我们还是推荐给出private static final long serialVersionUID = 5952689219411916553L;
当你的类进行序列化和反序列化操作的时候如果没有这个字段可能会出问题,所以尽量加上这个字段,不要用@SuppressWarnings("serial")注解
- java笔记
- JAVA笔记
- java笔记
- java笔记
- JAVA笔记
- java笔记
- Java 笔记
- java笔记
- java 笔记
- java笔记
- java笔记
- java笔记
- Java笔记
- java笔记
- java笔记
- Java笔记
- java笔记
- java笔记
- JS 打地鼠 游戏开发视频教程
- 安卓开发基础篇——Anroid四大组件之Service
- java算法-指数运算(大数运算)
- tjdsc
- OpenWRT基本知识整理
- java笔记
- 常见的魔术方法
- C# 不包含采用0个参数的构造函数
- oracle模糊查询忽略大小写
- UIViewController生命周期
- 超图 影像 如何去除黑边(两种方法)
- 性能测试实践分享
- 使用开源控件PinnedSectionListView(头部驻留)的时候低版本api出现ClassCastException异常
- 【u232】围棋游戏