标签:
读取配置文件:
Properties props= new Properties();//文件在src目录下,编译会被加载到classpath下。
Props.load(Test.class.getClassLoader().getResourceAsStream(‘observer.properties’);
String temp = Props.getproperty(‘observers’);
非表单标签:
表单标签:
1.<form> action提交表单的地址 name method表单提交 的方式
Name(命名方式: regFrm)
FORM元素的enctype属性指定了表单数据向服务器提交时所采用的编码类型,默认的缺省值是“application/x-www-form-urlencoded”。
然而,在向服务器发送大量的文本、包含非ASCII字符的文本或二进制数据时这种编码方式效率很低。
在文件上载时,所使用的编码类型应当是“multipart/form-data”,它既可以发送文本数据,也支持二进制数据上载。
Browser端<form>表单的ENCTYPE属性值为multipart/form-data,它告诉我们传输的数据要用到多媒体传输 协议,由于多媒体传输的都是大量的数据,所以规定上传文件必须是post方法,<input>的type属性必须是file。
2.表单域(一定要有name属性,否则该表单域的值不会被提交)
a. 文本域(text, password, textarea)
b. radio单选按钮(组) name属性一致为一组,每一组只能提交一个值
c. checkbox复选框(组)name属性一致为一组,每一组只能提交多个值
d. select 下拉框(可以实现多选一,多选多) option
e. file 文件域 (method=post, enctype=’multipart/form-data’
f. hidden 隐藏域 不需要用户输入, 但是server需要的值
g. reset 重置
h. Submit 提交按钮
i. button 普通按钮( 通常用来激活一个JS函数)
1.如何引用 css信息
a) 通过html元素的:style属性,class属性
b) 通过style块
c)通过引用外部的css文件 <link>
2.css 选择器
a) id选择器 #myRed{..}
b) class选择器 .myred{..}
c) 元素选择器 b{…}
基本数据类型: undefined null number string object Boolean
Eval() ,escape unescape加解密
常用对象: Date,Math, String, RegExp
Var a =[] b=new Array(); 长度随时可变
JSON: var user={ name:’xiaozhang’,pwd:’123456’,
Sleep:function(){
}
}
函数也是对象!!
继承通过prototype来模拟。
String.prototype.trim=function(){return this.replace(“^\s+”)|(“\s+$”),’’}
Window
Open打开子窗口(opener) close 关闭窗口
定时操作: setTimeout clearTimeout, setInterval,clearInterval
navigator
navigator.userAgent.toLowerCase(), ie/firefox…
history
history.go(1) 前进一个,history.go(-1)
location
if(window.XMLHttpRequest)
new XMLHttpRequest();
else new ActiveXObject(“Msxml2.XMLHTTP”);
JS没有多线程
1.乱码问题:request.setCharacterEncoding //设置请求实体的编码。 他对post有效
//Tomcat server.xml connection 增加一个useBodyEncodingForURI=‘true‘ //针对get方式。
ORACLE 分页:
select r,ename,sal from
(select rownum r, ename,sal from (select * from emp order by sal desc ))
where r>5 and r<=10;
select rownum r, t.* from (select * from emp order by sal desc)t
where rownum<=10;
minus
select rownum r, t.* from (select * from emp order by sal desc)t
where rownum<=5;
sql1992:
select ename,dname from emp,dept
where emp.deptno=dept.deptno and emp.deptno=30;
sql 1999:
select ename,dname from emp join dept on (emp.emptno=dept.deptno)
where emp.deptno=30;
内联结: outer 可以省略
select dname,ename from emp join dept on emp.deptno=dept.deptno;
左外联结:
select dname,ename from emp left join dept on emp.deptno=dept.deptno;
右外联结:
select dname,enmae from emp right join dept on emp.deptno=dept.deptno;
全外联结:
select dname,enmae from emp full join dept on emp.deptno=dept.deptno;
集合操作:
union 并集,不含重复值
unionAll
minus 前一个结果集
减去后一个结果集的差集
SELECT dev_id FROM (
SELECT dev_id FROM dev_tag_all WHERE app_key = "8aa4a89a52810799015281815b260003" AND tag_name = "nan"
UNION ALL
SELECT dev_id FROM dev_tag_all WHERE app_key = "8aa4a89a52810799015281815b260003" AND tag_name = "nv"
) a group by dev_id HAVING COUNT(*)>1
从一个表复制到另一个表。
create table empCopy as select * from emp;
事务:
始于一个DML语句,insert update delete 语句,结束于以下几种情况:
1.commit or rollback
2.执行DDL语句
3.正常断开连接时,自动commit
4.异常断开连接时,自动rollback
求部门哪些人的薪水最高?
select ename,max_sal from emp e
join(select max(sal) max_sal,deptno from emp group by deptno) t
on (e.sal=t.max_sal and e.deptno=t.deptno)
求部门平均薪水的等级
select deptno,avg_sal,grade from salgrade s
join(select deptno,avg(sal) avg_sal from emp group by deptno) t
on(t.avg_sal between s.min_sal and s.max_sal)
求哪些是经理人
select enamefrom emp where empno in(select distinct mgr from emp);
select ename from emp where empno in(select distinct mgr from emp);
不用组函数,求薪水的最高值
select sal from emp where sal not in(select distinct e1.sal from emp e1 join emp e2
on( e1.sal<e2.sal)
select sal from emp where sal not in ( select distinct e1.sal from emp e1 join emp e2 on (e1.sal<e2.sal))
索引:
优点: 增加查询速度
缺点: 占用空间,另外引起插入,修改,删除速度的降低。
使用时机: 唯一性好,查询次数多的
create index idx.. on empcopy(name);
序列:
create sequense seq_emcopy_id start with 1 increment by 1;
安装时的system 密码
使用system 用户为scott增加权限:
grant create view,create table to scott;
使用system 用户为scott解锁:
alter user scott account unlock;
FilterDispatcher
ActionProxy <-ConfigrationManager <-Struts.xml
ActionInvocation ->Intercepter
线程安全问题:
Struts1 单例 线程安全问题
Struts2 线程安全 ,可以任意设置属性
<constant name=’struts.i18n.encoding’ value=’gbk’/>
<constant name=’struts.devMode’ value=true/>
Action Result.
Type:
1.dispatcher(default)
2.chain action 链
3.velocity freemarker 页面
4.redirect
5.redirectAction
6.stream 文件下载
7.xslt
8.plainText 显示原始文件内容 例如文件源代码
Name:action中引用
获取真正的 web对象
HttpServletRequest request = ServletActionContext.getRequest();
Req.getLocalAddr()获取客户IP
Request.getRealPath(); 尽量少用
Request.getSession();
ServletActionContext.getServeltContext()
private String getIpAddr(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;
}
Hibernate3.jar /lib下
Hibernate.cfg.xml
sessionfactory
Hibernate.propertiest
开启二级缓存:
1.<property name=’hibernate.cache.use_second_level_cache”>true</property>
<property name=’hibernate.cache.provider_class”>org.hibernate.cache.EhCacheProvider</property>
2.类前面
@cache(usage=CacheConcurrencyStrategy.Ready_WRITE)
二级缓存的KEY 类全名#ID
Get load关系。 Load肯定得查到,不然就报错
搜索不到符合条件的记录,GET 返回一个null,load返回一个objectnotfoundException.
Load 有懒加载,get直接获得数据。
List()iterate() 关系:
Iterate先取ID,再去缓存中查询有没有,如果没有,再发出SQL查询
List只会往二级缓存存放数据,但是自身查询不用缓存
查询缓存 依赖于二级缓存
Key为查询语句,只对query.list()起作用。
<property name=hibernate.cache.use_query_cache>true</property>
s.createQuery(from banji).setCacheable(true).list()
LRU LFU FIFO
乐观锁:(并发性不高)
实体bean增加一个version字段。
如果当前记录被修改或删除,报错。
悲观锁:(并发性高)
事务A:s.get(Account.class,1,LockMode.UPGRADE);
事务B,如果在A 未commit时,读取会造成死锁。
Slf (slf-log4j14-.jar转接)
Slf4j nodep / log4j /jdk logging/apache commons logging
Log4j.properties
Spring mvc:
配置 dispatchServlet. handleMapping HandleAdapter ViewResolver
处理器
http://jinnianshilongnian.iteye.com/blog/1594806
相关配置:
<servlet>
<servlet-name> ch2</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>ch2</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<bean class=org.springframework.web.servlet.handler.beannameurlhandlerMapping/>
<bean class=org.springframework.web.servlet.mvc.simplecontrollerhandleradapter/>
<bean class=org.springframework.web.servlet.view.internalResourceviewResolver>
<property name=viewclass value=org.springframework.web.servlet.view.jstlview/>
<property name=prefix value=’/web-inf/jsp/’ />
<property name=suffix value=’.jsp’/>
</bean>
<bean name=’/hello’ class="cn".javass.ch.web.controller.helloworldcontroller/>
applicationContext -> beanfactory
使用applicationcontext,功能更强大,(生命周期)
<bean scope=singleton/prototype/request/session/globalSession>
事务处理:
配置事务管理器 HibernateTransactionManager 指定 SESSIONFACTORY.
<bean id=txmanager class = org.springframework.orm.hibernate3.HibernateTransactionManager>
<property name=sessionFactory ref=sessionFactory></property>
</bean>
<tx:annotation-driven transaction-manager=’txmanager/>
<aop:config>
<aop:pointcut expression=execution(public * com.sxt.service.impl.*.*(..) id=bussinessService />
<aop:advisor advice-ref=txAdvice pointcut-ref=businessService />
</aop:config>
<tx:advice id=”txAdvice” transaction-manager= txmanager >
<tx:attributes>
<tx:method name= get* read-only=true propagation= not_supported />
<tx:method name=’*’ />
</tx:attributes>
SPRING 使用datasource.
JNDI 配置datasource在 application server上
<bean id=’datasource class="org".apache.commons.dbcp.basicdatasource destroy-method=close>
<property name=’driverClassname’ value=’’/>${jdbc.driverclassname}
<property name=’url’ value=>
<property name=’username’ value=>
<property name=’password’ value=>
maxActive=80
maxIdle=20
maxWait=3000
<bean class=org…..propertyPlaceholderConfigurer>
<property name=locations>
<value> classpath:jobc.properties</value>
</property>
性能的问题,要亲手测试,根据测试结果 说明问题
HTTP1.0 默认短连接
HTTP1.1默认长连接
Spring 整合hibernate:
Beans.xml下
<bean id=sessionFactory class=org.springframework.orm.hibernate3.Localsessionfactory>//不支持annotation
Annotation.AnnotationSessionFactoryBean //annotation
<property name=datasource ref=datasource/>
<property name=mappingresources>
<list>
<value>hibernate.hbm.xml</value>
</list>
<property>d
<property name=annotatedClasses>
<list>
<value>com.bjsxt.model.User</value>
</list>
<property>
</property>
<property name=hibernateProperties>
<value>
Hibernate.dialect=org.hibernate.dialect.HSQLDialect
</value>
<props>
<prop key=’hibernate.dialect’>org.hibernate.dialect.MySqldIALECT</prop>
</props>
</property>
声明式的事务管理:
1.<bean id=txManager class=org.springframework.orm.hibernate3.hibernatetransactionmanager>
Prpperty name=sessionfactory ref=sessionfactory/>
</bean> //切面类 跨数据库用jta
2.Xmlns:tx=http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx
http://www.springframework.org.schema/tx/spring-tx-2.5.xsd
如果是runtimeexception 会自动回滚
相应的方法中 通过sessionfactory.getcurrenctSession.
不用手动commit
不用捕获异常
不能OPENsession.
Crud:
Dao.save(Entity)
OpenSessionInViewFilter 注意点:
1. 必须配置在struts2 filter前面。
2. Filter 需要 sessionfactory bean,如果需要改名 需要在filter配置信息中加入 param-name: sessionfactorybeanname param-value
3. 如果不配置 transaction,会出异常
InvaliddataaccessapiUsageException write operations are not allowed **** readonly
乱码 解决:
Filter 过滤
Spring 有characterencodingfilter 解决乱码问题
1.写在 struts2 filter前面
常用linux命令:
分布式事务:
<bean id="datasource1"
class="com.atomikos.jdbc.SimpleDataSourceBean" init-method="init" destroy-method="close">
<property name="uniqueResourceName" value="XADBMS_ONE"/>
<property name="xaDataSourceClassName" value="COM.FirstSQL.Dbcp.DbcpXADataSource"/>
<property name="xaDataSourceProperties" value="user=username;portNumber=8000"/
<property name="exclusiveConnectionMode" value="true"/>
</bean>
<bean id="datasource2"
class="com.atomikos.jdbc.SimpleDataSourceBean" init-method="init" destroy-method="close">
<property name="uniqueResourceName" value="XADBMS_TWO"/>
<property name="xaDataSourceClassName" value="COM.FirstSQL.Dbcp.DbcpXADataSource"/>
<property name="xaDataSourceProperties" value="user=username;portNumber=8000"/
<property name="exclusiveConnectionMode" value="true"/>
</bean>
<bean id="atomikosTransactionManager"
class="com.atomikos.icatch.jta.UserTransactionManager" init-method="init" destroy-method="close">
<property name="forceShutdown" value="true"/>
</bean>
<bean id="atomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp">
<property name="transactionTimeout" value="200"/>
</bean>
<bean id="springTransactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="transactionManager" ref="atomikosTransactionManager"/>
<property name="userTransaction" ref="atomikosUserTransaction"/>
</bean>
<bean id="dao" class= "...">
<property name="dataSource" ref="datasource"/>
</bean>
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd" );
Date date = sdf.parse( dates. get(1));
Calendar calendar = Calendar. getInstance();
calendar.setTime( date);
calendar.add(Calendar. DAY_OF_MONTH,1);
1. eclipse permgen space 问题:
debug configrations - vm arguments
最后设置:
-Xms256m -Xmx512m -XX:MaxNewSize=256m -XX:MaxPermSize=256m
2. sessionfactory packagesToScan属性
spring-hibernate-2.0.8.jar
spring 整合 hibernate 3.0 3.1 3.2 都需要这个包, 我们项目里是3.3 不用这个包。k
我今天把这个包去掉, 项目里缺少cglib的包,我重新把这个包单独引入 就OK了
cglib2.1.3是 关联 spring-hibernate3.jar 自动引入的 。。
3. tomcat 启动两次
http://501565246-qq-com.iteye.com/blog/1968761
4. 跨域
<filter>
<filter-name>CorsFilter</filter-name>
<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
<init-param>
<param-name>cors.allowed.origins</param-name>
<param-value>*</param-value>
</init-param>
<init-param>
<param-name>cors.allowed.methods</param-name>
<param-value>GET,POST,HEAD,OPTIONS,PUT</param-value>
</init-param>
<init-param>
<param-name>cors.allowed.headers</param-name>
<param-value>Content-Type,Verify-Code,Demo-User,Timestamp,Signature,X-Bdapi-Token,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers</param-value>
</init-param>
<init-param>
<param-name>cors.exposed.headers</param-name>
<param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param-value>
</init-param>
<init-param>
<param-name>cors.support.credentials</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>cors.preflight.maxage</param-name>
<param-value>10</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
package org.creditease.cn.utils;
import java.io.IOException;
import java.util.Properties;
/**
*
* 读取properties文件的工具类
*
* @author jun li 2016-3-14
*/
public class ConfigUtils {
private static Properties p = new Properties();
/**
* 读取properties配置文件信息
*/
static{
try {
p.load(ConfigUtils.class.getClassLoader().getResourceAsStream("config.properties"));
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 根据key得到value的值
*/
public static String getValue(String key)
{
return p.getProperty(key);
}
}
//文件编码格式校验
private boolean checkFilePattern(InputStream inputStream) throws IOException {
boolean isUTF = false;
byte[] b = new byte[3];
try {
inputStream.read(b);
if (b[0] == -17 && b[1] == -69 && b[2] == -65)
{
isUTF = true;
}
}finally{
if(inputStream !=null)
inputStream.close();
}
return isUTF;
}
记事本bom问题:
正如@梁海所说,“不含 BOM 的 UTF-8 才是标准形式”,的确是这样,无BOM使用得更多些,所以个人还是推荐一般情况下用无BOM的形式吧,除非有问题的时候,再考虑换有BOM的。Windows系统保存的都是有BOM的,所以你可以看到,用记事本保存一个UTF-8的txt,其实是有BOM的,这一点需要注意。另外不同的文本编辑器对于有无BOM的称呼也略有不同,比如EditPlus,有BOM的称为UTF-8+,无BOM的称为UTF-8,而在Notepad++中,有BOM的被称为标准UTF-8,而无BOM则被称为UTF-8无BOM。
标签:
原文地址:http://www.cnblogs.com/xifenglou/p/5409099.html