目 录
Tomcat. 3
1. 影响系统日期,如果相差8个小时可以使用以下方式解决... 3
JAVA. 3
1. XStrem产生XML文件... 3
2. 字符串处理去掉空格回车等(java) 3
3. 获取java工程跟路径: 3
4. XFire 出错信息... 3
5. XFire 性能... 5
6. Java中double除法出现除不尽小数解决办法... 5
7. java反射执行指定的方法... 6
8. Java枚举... 9
9. list,set,map,数组间的相互转换... 10
10. Java调用C,VB dll文件等... 11
11. JAVA注解的使用... 18
12. CollectionUtils.transform(). 20
13. 使用SQL批量执行语句... 20
14. 获取java报错的堆栈信息... 21
Eclipse. 21
1. 时间设置: 21
2. CGLIB 报错... 21
3. Alt + 回车 ->调出当前资源的属性... 22
4. MyEclipse编译的时候内存不足配置: 22
5. 指定Eclipse VM在 eclipse.ini文件里加入... 22
Oracle. 22
1. Oracle树结构查询... 22
2. 同一张表数据copy. 22
3. 查询某个相对时间段内的数据... 23
4. oracle执行sql文件... 23
5. orcle删除表恢复... 23
6. oracle连接查询 +. 23
7. oracle查询实例... 24
8. 查询树形结构sql语句... 24
9. 复制同一表中的数据从A字段到B字段... 24
10. sql case:语句... 24
11. oracle行列转换wmsys.wm_concat,乱码用tochar解决. 24
12. 判断函数: decode(f_region, 1, null, branch) 24
13. oracle TNS 配置... 24
14. Oracle双机的配置... 25
15. oracle账户解锁... 26
16. oracle用户密码修改,如果不记得可以修改... 26
17. oracle字段乱码恢复,程序跟踪为乱码字符,无法复制到外面进行编辑... 26
18. 全角半角转换SQL. 27
19. oracle查询表空间大小[时间较长]. 27
20. oracle锁表进程的查看和解除. 28
21. oracle if else 用法... 31
22. oracle WITH DETAIL 用法... 32
JS. 33
1. Js中parseFloat()方法所产的精度不一致问题... 33
2. 2 .Jquery的Ajax同步调用方式... 33
3. 输入框只能填写数字... 34
4. js参数乱码问题... 34
5. js获取文件扩展名... 34
6. 正则表达式整数判断... 34
1. frame对象的处理... 34
2. 也可以给frame加事件监听文档的加载... 34
3. 数据不能读可以写 readonly="readonly"; 35
4. frame可以添加事件: 35
5. avascript设置一个变量,只允许提交一次[防止重复提交。... 35
6. 如果刷新一个已经提交过的页面时系统总是会提示一个"重试或取消”的对话框., 35
7. .FCKeditor:使用... 36
8. URL乱码转化... 36
9. html的form中定义submit按钮后无法用js提交... 36
10. 输入文本框长度检查... 36
11. 页面刷新出现IE浏览器”重试””取消”的提示框... 37
12. JQuery实现复选框多选取值... 37
13. JQuery下拉选取值... 37
14. TD文字多的时候换行CSS. 38
15. JS解析地址栏里的参数信息... 38
16. Frame使用, 39
17. Frame 调用其他frame的方法,点击别的页面隐藏最外层框架的弹出菜单。... 40
18. File控件设置onchange事件,清空路径后会再次出发解决方法。... 42
19. Frame模拟单击事件... 42
20. 通过滤镜获取图片高度等. 42
WEB服务器... 44
1. weblogic 编码问题: 44
2. 2.Linux下字体乱码终极解决方案... 45
JSP. 46
1. EL取值... 46
2. md5加密: 46
3. 标签... 46
4. Struts标签执行静态类的方法... 46
Tomcat
1. 影响系统日期,如果相差8个小时可以使用以下方式解决
在 tomcat startup.bat 第一行 添加配置set JAVA_OPTS= -Duser.timezone=GMT+08
JAVA
1. XStrem产生XML文件
XStream x = new XStream(new JettisonMappedXmlDriver());
x.alias("ms", List.class);
x.alias("m", SuperBean.class);
// 过滤一些不必要的字段
x.omitField(SuperBean.class, "className");
x.omitField(SuperBean.class, "property");
x.omitField(SuperBean.class, "panelId");
x.omitField(SuperBean.class, "datetime");
String toDoListStr = x.toXML(sbList);
2. 字符串处理去掉空格回车等(java)
public String replaceBlank(String strold) {
Pattern p = Pattern.compile("\\s*|\t|\r|\n");
String strnew = strold;
Matcher m = p.matcher(strnew);
String after = m.replaceAll("");
return after;
}
3. 获取java工程跟路径:
Platform.SYS_INFO.get("sys.realpath");
4. XFire 出错信息
http://xfire.codehaus.org/
java xfire 创建webservice 时碰到的错误java相关 20##-04-25 16:10:21 阅读683 评论4 字号:大中小 订阅 .
错误一:
15:27:36,062 ERROR [STDERR] org.codehaus.xfire.XFireRuntimeException: Could not invoke service.. Nested exception is org.codehaus.xfire.fault.XFireFault: Unexpected close tag </body>; expected </HR>.
at [row,col {unknown-source}]: [1,1013]
15:27:36,062 ERROR [STDERR] org.codehaus.xfire.fault.XFireFault: Unexpected close tag </body>; expected </HR>.
at [row,col {unknown-source}]: [1,1013]
15:27:36,062 ERROR [STDERR] at org.codehaus.xfire.fault.XFireFault.createFault(XFireFault.java:89)
15:27:36,062 ERROR [STDERR] at org.codehaus.xfire.client.Client.onReceive(Client.java:386)
解决方法:调用的地址写错了。
错误二:
Caused by: java.lang.IllegalAccessException: Class org.codehaus.xfire.service.invoker.LocalFactory can not access a member of class
解决方法:接口实现类不是public 的,所以不能实例化。
错误三:java.io.CharConversionException: Invalide char #a323
解决方法:试试添加 xfire 1.1 miscellaneous 库
错误四:org.codehaus.xfire.fault.XFireFault: Couldn't access service object.
org.codehaus.xfire.XFireRuntimeException: Could not invoke service.. Nested exception is org.codehaus.xfire.fault.XFireFault: Couldn't access service object.
at org.codehaus.xfire.fault.Soap11FaultSerializer.readMessage(Soap11FaultSerializer.java:31)
at org.codehaus.xfire.fault.SoapFaultSerializer.readMessage(SoapFaultSerializer.java:28)
at org.codehaus.xfire.soap.handler.ReadHeadersHandler.checkForFault(ReadHeadersHandler.java:111)
at org.codehaus.xfire.soap.handler.ReadHeadersHandler.invoke(ReadHeadersHandler.java:67)
at org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:131)
at org.codehaus.xfire.client.Client.onReceive(Client.java:406)
at org.codehaus.xfire.transport.http.HttpChannel.sendViaClient(HttpChannel.java:139)
at org.codehaus.xfire.transport.http.HttpChannel.send(HttpChannel.java:48)
at org.codehaus.xfire.handler.OutMessageSender.invoke(OutMessageSender.java:26)
at org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:131)
at org.codehaus.xfire.client.Invocation.invoke(Invocation.java:79)
at org.codehaus.xfire.client.Invocation.invoke(Invocation.java:114)
at org.codehaus.xfire.client.Client.invoke(Client.java:336)
at org.codehaus.xfire.client.XFireProxy.handleRequest(XFireProxy.java:77)
at org.codehaus.xfire.client.XFireProxy.invoke(XFireProxy.java:57)
at $Proxy0.pay(Unknown Source)
解决办法:类不能访问,构造函数修改为public 看看。
5. XFire 性能
最近项目需求..利用Xfire这个经典的WebService框架,搭建了与单片机通信的桥梁...(这个WebService不是我搭建的..我只负责调
用客户端).目前利用Xfire客户端并发访问的有30台服务器左右,开始每个服务器开启一条线程(包括自己写的WebService链接超时
机制的线程)多线程进行对所有服务器的并发访问,获取反馈数据.因为WebService创建链接并获取反馈数据,消耗CPU量比较大.所以
.通过普通线程创建访问的方式..给CPU带来非常大的压力.后来改用jdk5新加入的ThreadPoolExecutor管理线程,因为大量的线程创
建也有非常大的资源消耗.所以利用线程池进行管理..xfire的通信是中断式的,并不保持链接.所以利用hashmap把链接对象缓存起
来.(xfire创建对象需要消耗500毫秒,客户端不是我写的..因此无法优化).减少创建对象的消耗.因此cpu的峰值从85%降低到45%.
不知道其他高手还有没有其他较好的解决方案.
使用Stax解释XML,性能有了质的提高。XFire采用Woodstox 作Stax实现;
XFire是完全基于流数据处理进行工作的系统,这意味着XFire不是将整个SOAP文档缓存在内存中,而是以管道的方
式接收SOAP流数据。这种工作方式的转变带来了可观的性能回报,同时节省了内存的占用。
XFire从管道中接收一个SOAP请求到返回一个SOAP响应,会经历一系列的阶段。在管道调用的任何一个阶段,
XFire都可以添加一些额外的Handler,在对消息进行加工处理后再传入到下一个阶段中。在SOAP请求消息对Web
Service发起真正调用之前,分别会经过传输、预转发、转发、策略实施、用户信息处理、预调用、服务调用等阶段。
6. Java中double除法出现除不尽小数解决办法
主要是要算出除法运算完成后有多少小数位数
publicstaticvoid main(String[] args){
double d = 45.22;
int i = (d+"").indexOf(".");
int scal = (d+"").substring(i+1).length();
BigDecimal b1 = new BigDecimal(d);
BigDecimal b2 = new BigDecimal(1000);
System.out.println(DoubleTest.div(d,new Double(1000),scal+3));
}
publicstatic Double div(Double v1, Double v2, int scale) {
BigDecimal b1 = new BigDecimal(v1.toString());
BigDecimal b2 = new BigDecimal(v2.toString());
returnnew Double(b1.divide(b2).setScale(scale).doubleValue());
}
7. java反射执行指定的方法
/**
* 创建日期:2011<br>
* Title:文件所属模块:对类操作封装<br>
* Description:对本文件的详细描述,原则上不能少于50字
* @author xyj
* @mender:(文件的修改者,文件创建者之外的人)
* @version 1.0
* Remark:认为有必要的其他信息
*/
publicclass EntiyUtils {
publicstatic HashMap<String,Method> mtd = new HashMap<String,Method>();
static{
//执行操作前先清理一下
mtd.clear();
}
/**
* 功能:此方法用于判断两个对象指定的方法的值是否相同
* @param source 源对象
* @param targer 目标对象
* @param methods 要对比值的get方法
* @return 两个对象的属性是否相同
* @throws InvocationTargetException
* @throws IllegalAccessException
* @throws IllegalArgumentException
*/
publicstaticboolean compareProperties(Object source,Object targer,String[] methods) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException{
boolean ok = true;
Class<?> cl = source.getClass();
Method[] methds = cl.getMethods();
for(String methodname: methods){
if(null != methodname){
Method md = getMethod(methodname,methds); //获取当前方法
Object sVal = md.invoke(source); //获取源对象的值
Object tVal = md.invoke(targer); //获取目标对象的值
if(sVal==null && tVal==null){
continue;
}elseif(sVal==null || tVal==null){ //如果其中一个为空则中断
ok = false;
break;
}else{ //---------如果两个对象都不是空则判断是否相等
if(sVal instanceof Date){
Date d1 = (Date)sVal;
Date d2 = (Date)tVal;
if(d1.compareTo(d2)!=0){
ok = false;
break;
}
}elseif(sVal instanceof String){
String s1 = (String)sVal;
String s2 = (String)tVal;
if(!s1.equals(s2)){
ok = false;
break;
}
}elseif(sVal instanceof Double){
double d1 = (Double)sVal;
double d2 = (Double)tVal;
if(d1!=d2){
ok = false;
break;
}
}elseif(sVal instanceof Long){
long l1= (Long)sVal;
long l2= (Long)tVal;
if(l1 != l2){
ok = false;
break;
}
}elseif(sVal instanceof Integer){
int t1 = (Integer)sVal;
int t2 = (Integer)tVal;
if(t1!=t2){
ok = false;
break;
}
}else{
if(sVal != tVal){
ok = false;
break;
}
}
}
}
}
return ok;
}
/**
* 根据name获取方法对象
* @param name
* @param methds
* @return
*/
publicstatic Method getMethod(String name,Method[] methds){
if(!mtd.containsKey(name)){
mtd.clear();
for(int j=0;j<methds.length;j++){
mtd.put(methds[j].getName(), methds[j]);
}
}
returnmtd.get(name);
}
publicstaticvoid main(String[] args){
TestObj t1 = new TestObj();
t1.setDbb(new Double(12.3));
t1.setS("myss天ffff津");
t1.setInttSs(new Integer(23));
t1.setDelete_flag("23");
TestObj t2 = new TestObj();
t2.setDbb(new Double(12.3));
t2.setS("myss天津");
t2.setInttSs(new Integer(23));
t2.setDelete_flag("23");
String[] md = {"getDbb","getS","getInttSs","getDelete_flag"};
try {
System.out.print(compareProperties(t1,t2,md));
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}}
8. Java枚举
publicenum PEnum {
RED {
public String getRED(){
return "ss";
}
},
WHRIT{
public String getWHRIT(){
return "ss";
}
},
BLUE{
public String getBLUE(){
return "ss";
}
},
BLAK{
publicint getBLAK(){
return 5;
}
}
}
publicstaticvoid main(String[] args) {
// TODO Auto-generated method stub
PEnum p = PEnum.BLAK;
if(true)
p=PEnum.BLUE;
if(PEnum.BLAK.equals("S")){
}
for(PEnum C : PEnum.values()){
System.out.println(C);
}
switch(p){
case BLAK:
System.out.print("111"+p);
caseBLUE:
System.out.print("222"+p);
}
}
9. list,set,map,数组间的相互转换
list,set,map,数组间的相互转换
1.list转set
Set set = new HashSet(new ArrayList());
2.set转list
List list = new ArrayList(new HashSet());
3.数组转为list
List stooges = Arrays.asList("Larry", "Moe", "Curly");
或者
String[] arr = {"1", "2"};
List list = Arrays.asList(arr);
4.数组转为set
int[] a = { 1, 2, 3 };
Set set = new HashSet(Arrays.asList(a));
5.map的相关操作。
Map map = new HashMap();
map.put("1", "a");
map.put('2', 'b');
map.put('3', 'c');
System.out.println(map);
// 输出所有的值
System.out.println(map.keySet());
// 输出所有的键
System.out.println(map.values());
// 将map的值转化为List
List list = new ArrayList(map.values());
System.out.println(list);
// 将map的值转化为Set
Set set = new HashSet(map.values());
System.out.println(set);
6.list转数组
List list = Arrays.asList("a","b");
String[] arr = (String[])list.toArray(new String[list.size()]);
System.out.println(Arrays.toString(arr));
10. Java调用C,VB dll文件等
java调用vc dll、vb dll(Com 组件)
11. JAVA注解的使用
1. 注解的定义:
/**
* 注解测试
* @author Administrator
*
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public@interface Annotion{
int id();
String synopsis();
String engineer() default "[unassigned]";
String date() default "[unimplemented]";
}
/**
*
其中的id()、synopsis()可以认为是该注解的元素,或者属性,这些方法声明不能有任何参数,或者抛出异常,可以通过default 来定义它的默认值
而且这些类型只能是原语类型、String、Annotation或者这些类型的数组。
最上面的@Target表面了改注解使用的范围(是一个方法还是一个类,或者一个域),@Retention表面了注解可以用在哪个级别上(源代码中、类文件中、还是运行时)
这样,便定义了一个注解
**/
2. 注解的使用和解析
publicclass AnnotionTest {
@Annotion(
id = 2868724,
synopsis = "Enable time-travel",
engineer = "Mr. Peabody",
date = "4/1/3007" )
publicvoid Test1(){
System.out.print("-->>");
}
publicstaticvoid main(String[] args){
AnnotionTest t = new AnnotionTest();
Method[] ans = t.getClass().getMethods();
for(Method an: ans){
if(an.isAnnotationPresent(Annotion.class)){ //如果当前注解有定义类里的注解
System.out.println(an.getAnnotation(Annotion.class));
Annotion ns = (Annotion)an.getAnnotation(Annotion.class); //直接访问Annotion自定义注解里的属性
System.out.print(ns.id()+"eng:"+ns.engineer());
}
}
}
}
12. CollectionUtils.transform()
该方法接收两个参数, 用来通过Transformer, 将制定的Collection进行转换, 得到一个新的经过转换后的Collection
CollectionUtils.transform(argsClses, new Transformer() {
public Object transform(Object element) {
Class ret = (Class) element;
if (Enhancer.isEnhanced(ret)) {
ret = ReflectHelper.getClass(getUnEnhancer(ret
.getName()));
}
return ret;
}
});
13. 使用SQL批量执行语句
* 功能:批量更新计划
* @param obj
*/
privatevoid batchUpdateBySQL(String sql,Map<String,String> obj){
Session session = null;
try {
SessionFactory sessionFact = BeanProvider.getSessionFactory();
session = sessionFact.openSession();
Transaction tx = session.beginTransaction(); // 使用Hibernate事务处理
Connection conn = session.connection();
PreparedStatement stmt = conn.prepareStatement(sql);
Iterator<String> plans = obj.keySet().iterator();
while (plans.hasNext()) {
String key = plans.next();
stmt.setString(1, obj.get(key));
stmt.setString(2, key);
stmt.addBatch();
}
int[] i = stmt.executeBatch();
System.out.println("======>>成功更新:"+(i==null?0:i.length)+"->条");
tx.commit(); // 使用 Hibernate事务处理边界
} catch(Exception e) {
e.printStackTrace();
} finally {
session.close();
}
}
14. 获取java报错的堆栈信息
try{
Exception exception = messageErrorLog.getException();
StringWriter writer = new StringWriter();
exception.printStackTrace(new PrintWriter(writer));
errorLogDetailText.setText(writer.getBuffer().toString());
}finally {
if(writer != null)
try {
writer.close();
}catch (Exception e) {
e.printStackTrace();
}
}
Eclipse
1. 时间设置:
在eclipse中设置
在 首选项->Tomcat ->JVM Settings 项,设定JRE的版本为'jre1.5.0_06',并且添加如下几个JVM Parameters:
-Xms128m
-Xmx512m
-Dfile.encoding=UTF8
-Duser.timezone=GMT+08
2. CGLIB 报错
查看/lib下面是否 有重复的 asm.jar包
3. Alt + 回车 ->调出当前资源的属性
4. MyEclipse编译的时候内存不足配置:
Defalut VM Arguments: 这儿设置即可。
5. 指定Eclipse VM在 eclipse.ini文件里加入
-vm
C:\Program Files\Java\jdk1.5.0_04\bin\javaw.exe #指定路径
Oracle
1. Oracle树结构查询
SELECT * FROM t_bns_prjm_project t where t.delete_flag=0
CONNECT BY PRIOR t.id=t.super_projectid
START WITH t.project_name like '%北京~天津330kV送电工程%';
2. 同一张表数据copy
CREATE OR REPLACE TRIGGER SETOLD
BEFORE INSERT ON T_BPM_FORM_TEMPLATE
FOR EACH ROW
BEGIN
SELECT IDS.nextval INTO :new.id FROM dual;
END;
insert into 表 (select * from 表 where 条件)
3. 查询某个相对时间段内的数据
SELECT * FROM T_GATHER_PROJECT_TREE
WHERE PROVINCE = REC.PROVINCE
AND CREATE_TIME > (SELECT MAX (CREATE_TIME) - 3 / 24 / 60
FROM T_GATHER_PROJECT_TREE
WHERE PROVINCE = REC.PROVINCE);
4. oracle执行sql文件
start E:\database\3.sql
5. orcle删除表 恢复
SELECT * FROM user_recyclebin WHERE original_name=‘drop_test’; //
//那么现在就可以用如下语句进行恢复:
drop table drop_test //逻辑删除
FLASHBACK TABLE drop_test TO BEFORE DROP //从回收站恢复
PURGE table drop_test //物理删除
6. oracle连接查询 +
1. LEFT OUTER JOIN:左外关联
SELECT e.last_name, e.department_id, d.department_name
FROM employees e
LEFT OUTER JOIN departments d
ON (e.department_id = d.department_id);
等价于
SELECT e.last_name, e.department_id, d.department_name
FROM employees e, departments d
WHERE e.department_id=d.department_id(+);
结果为:所有员工及对应部门的记录,包括没有对应部门编号department_id的员工记录。
2. RIGHT OUTER JOIN:右外关联
SELECT e.last_name, e.department_id, d.department_name
FROM employees e
RIGHT OUTER JOIN departments d
ON (e.department_id = d.department_id);
等价于
SELECT e.last_name, e.department_id, d.department_name
FROM employees e, departments d
WHERE e.department_id(+)=d.department_id;
7. oracle查询实例
cmd:输入 lsnrctl status 查看日志文件路径,实例情况等
8. 查询树形结构sql语句
SELECT SYS_CONNECT_BY_PATH(PARENT_ID, '/') || '/' || ID as LEVEL_REF,ID FROM T_PGC_PROJECT_PLAN_AUDITING T
WHERE T.PLAN_TYPE IN (4,5,6,7)
AND T.PROJECT_ID IN (2000003352452,2000003352452) AND T.DELETE_FLAG = '0'
START WITH T.PARENT_ID IN (-1)
CONNECT BY PRIOR T.ID = T.PARENT_ID ORDER BY length(LEVEL_REF),T.ORDER_ID ASC
9. 复制同一表中的数据从A字段到B字段
update T_YZJ_JUNG_JIES t set t.BIANZHI_USER=(select b.CREATE_USER from T_YZJ_JUNG_JIES b where t.id=b.id);
update T_YZJ_JUNG_JIES t set t.BIANZHI_DATE=(select b.CREATE_TIME from T_YZJ_JUNG_JIES b where t.id=b.id);
10. sql case:语句
UPDATE Personnel
SET salary = CASE WHEN salary >= 5000
THEN salary * 0.9
WHEN salary >= 20## AND salary < 4600
THEN salary * 1.15
ELSE salary END
11. oracle行列转换wmsys.wm_concat,乱码用tochar解决.
select t.project_id,
wmsys.wm_concat(to_char(fengx_leix || '&&&')),
wmsys.wm_concat(to_char(kenyfsg || '&&&'))
from t_sxm_fengxian t
where t.jl_direct_id='2000003353567'
group by t.project_id
12. 判断函数: decode(f_region, 1, null, branch)
13. oracle TNS 配置
在ORACLE当中,如果想访问某个服务器,必需要设置TNS,它不想SQLSERVER那样,客户端会自动列举出在局域网内所有的在线服务器,只需在客户端选择需要的服务器,然后使用帐号与密码登录即可。而ORCAL是不会自动列举出网内的服务器的,需要通过读取TNS配置文件才能列出经过配置的服务器名。
ORACLE的配置文件名:tnsnames.ora
文件所在路径:安装ORACLE所在的目录\oracle\ora92\network\admin\tnsnames.ora
配置的一个实例:
# TNSNAMES.ORA Network Configuration File: D:\Oracle\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.
ODS =
(description =
(address = (protocol = tcp)(host = 10.201.64.12)(port = 1521))
(connect_data =
(sid = ods)
)
)
AUTOCLM_10.210.4.11 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.210.4.11)(PORT = 1521))
)
(CONNECT_DATA =
(SID = autoclm)
(SERVER = DEDICATED)
)
)
CHELP =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.203.68.137)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = autoclm)
)
)
14. Oracle双机的配置
ods.driver=oracle.jdbc.driver.OracleDriver
ods.url=jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP) (HOST=10.1.30.68)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=10.1.30.69) (PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=dwth)))
ods.username=ODS_JJGKYY
ods.password=ODS_JJGKYY2009*
15. oracle账户解锁
conn /as sysdba;
alert user system account unlock;
16. oracle用户密码修改,如果不记得可以修改
方式一>
select username,password from dba_users;
alter user system identified by 新密码;
17. oracle字段乱码恢复,程序跟踪为乱码字符,无法复制到外面进行编辑
UPDATE T_BNS_PRJM_SETPROJECTDIRECT T
SET T.CONTAIN_BIDSECT =
(SELECT ZH_CONCAT (TO_CHAR (CONTAIN_BIDSECT))
FROM T_BNS_PRJM_SETPROJECTDIRECT W
WHERE W.DELETE_FLAG = '0'
AND W.PARENT_ID = T.ID
AND W.DEPT_TYPE = '0')
WHERE T.DELETE_FLAG = '0' AND T.DEPT_TYPE='1'
AND T.SUB_PROJECTID IN
(SELECT ID
FROM T_BNS_PRJM_PROJECT P
WHERE P.DELETE_FLAG = '0'
AND P.PROJECT_LEVEL = '0002'
AND P.LEVEL_TYPE = '0010');
COMMIT;
18. 全角半角转换SQL
String sql = "SELECT CONCAT_RESULT(TO_SINGLE_BYTE(TO_CHAR(ID))) RST FROM T_BNS_PRJM_PROJECT WHERE ROWNUM<10";
19. oracle查询表空间大小[时间较长]
select
a.a1 表空间名称,
c.c2 类型,
c.c3 区管理,
b.b2/1024/1024 表空间大小(M),
(b.b2-a.a2)/1024/1024 已使用(M),
substr((b.b2-a.a2)/b.b2*100,1,5) 利用率 from
(select tablespace_name a1, sum(nvl(bytes,0)) a2 from dba_free_space group by tablespace_name) a,
(select tablespace_name b1,sum(bytes) b2 from dba_data_files group by tablespace_name) b,(select tablespace_name c1,contents c2,extent_management c3 from dba_tablespaces) c where a.a1=b.b1 and c.c1=b.b1;
select
b.file_name 物理文件名,
b.tablespace_name 表空间,
b.bytes/1024/1024 大小M,
(b.bytes-sum(nvl(a.bytes,0)))/1024/1024 已使用M,
substr((b.bytes-sum(nvl(a.bytes,0)))/(b.bytes)*100,1,5) 利用率 from dba_free_space a,dba_data_files b where a.file_id=b.file_id group by b.tablespace_name,b.file_name,b.bytes order by b.tablespace_name
select
a.talbespace_name 表空间名称,
b.bytes 大小bytes,
b.file_name 数据文件名from dba_tablespaces a, dba_data_files bWhere a.talbespace_name=b.talbespace_name and a.contents=’TEMPORARY’;
查询结果如下:
从oracle 9i开始,可以创建Temporary tablespace类表空间,即“临时“表空间,这类表空间使用临时文件。临时文件的信息被存储在数据字典V$tempfile中。命令如下:
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->
Select file#,status,name from V$tempfile;
查询数据字典V$tempfile结果如下:
在上面介绍的方法中,建议掌握命令方法,因为你的环境可能没有图形工具,而SQLPLUS一般情况下都是可以使用的,有了命令脚本,很容易得到表空间和数据文件的相关信息。另外,数据库管理员应该多整理命令脚本,在需要时直接执行脚本以提高工作效率。
在数据库管理员的日常工作中,应该经常查询表空间的利用率,按照数据库系统的具体情况估算表空间的增长量,当表空间的利用率超过90%时,要及时采取措施,如清理历史表、历史数据以释放空间,向表空间中添加新的数据文件,扩展现有数据文件大小等方法来降低表空间的利用率,避免表空间利用率接近100%时,将产生空间不够的错误
20. oracle锁表进程的查看和解除.
select sess.sid,
sess.serial#,
lo.oracle_username,
lo.os_user_name,
ao.object_name,
lo.locked_mode
from v$locked_object lo,
dba_objects ao,
v$session sess
where ao.object_id = lo.object_id and lo.session_id = sess.sid;
--查看锁表进程SQL语句2:
select * from v$session t1, v$locked_object t2 where t1.sid = t2.SESSION_ID;
--杀掉锁表进程:
--如有记录则表示有lock,记录下SID和serial# ,將记录的ID替換下面的738,1429,即--可解除LOCK
alter system kill session '738,1429';
oracle IMP参数
C:\>imp help=y
可以通过输入 IMP 命令和您的用户名/口令
跟有您的用户名 / 口令的命令:
实例: IMP SCOTT/TIGER
或者, 可以通过输入 IMP 命令和各种自变量来控制“导入”按照不同参数。
要指定参数,您可以使用关键字:
格式: IMP KEYWORD=value 或 KEYWORD=(value1,value2,...,vlaueN)
实例: IMP SCOTT/TIGER IGNORE=Y TABLES=(EMP,DEPT) FULL=N
或 TABLES=(T1: P1,T1: P2),如果 T1 是分区表
USERID 必须是命令行中的第一个参数。
21. oracle if else 用法
if ... then
...
elsif ... then
...
else
...
end if;
or
if ... then
...
else
...
end if;
or
if ... then
...
end if;
注:if后的条件不加括号
例子如下:
if p_fh <> '' then
p_strsql := p_strsql || ' and b.fh = p_fh';
end if;
22. oracle WITH DETAIL 用法
WITH DETAIL
AS (SELECT ( SELECT id
FROM T_BNS_PRJM_PROJECT m
WHERE M.PROJECT_LEVEL = '0001'
AND M.DELETE_FLAG = '0'
START WITH m.id = PROJECT_ID
CONNECT BY PRIOR m.SUPER_PROJECTID = m.id)
SUPER_ID,
TO_CHAR (CREATE_TIME, 'yyyy-mm-dd') CREATE_TIME
FROM T_PGC_VISUAL_DETAIL A
WHERE A.DELETE_FLAG = '0'
UNION ALL
SELECT ( SELECT id
FROM T_BNS_PRJM_PROJECT m
WHERE M.PROJECT_LEVEL = '0001'
AND M.DELETE_FLAG = '0'
START WITH m.id = PROJECT_ID
CONNECT BY PRIOR m.SUPER_PROJECTID = m.id)
SUPER_ID,
TO_CHAR (CREATE_TIME, 'yyyy-mm-dd') CREATE_TIME
FROM T_PGC_NOVISUAL_DETAIL B
WHERE B.DELETE_FLAG = '0')
SELECT PROJECT_CODE "输变电工程编码",
PROJECT_NAME "输变电工程名称",
TO_CHAR (START_DATE, 'yyyy-mm-dd') "实际开工日期",
(SELECT MIN (CREATE_TIME)
FROM DETAIL D1
WHERE D1.SUPER_ID = ID)
"进度最早填报日期",
(SELECT MAX (CREATE_TIME)
FROM DETAIL D2
WHERE D2.SUPER_ID = ID)
"进度最后更新日期"
FROM T_BNS_PRJM_PROJECT T
WHERE T.DELETE_FLAG = '0'
AND T.PROJECT_LEVEL = '0001'
AND (TO_CHAR (START_DATE, 'yyyy') = '2011' OR PROJ_STATUS = '4001')
JS
1. Js中parseFloat()方法所产的精度不一致问题
<script language="javascript">
var a = "0.11";
var b = "0.2801";
var c = "1.002";
var sum1 = parseFloat(a)+parseFloat(b)+parseFloat(c);
var sum2 = (parseFloat(a)+parseFloat(b)+parseFloat(c)).toFixed(4)
document.write("a+b+c="+sum1);
document.write("<br/>")
document.write("a+b+c="+sum2)
</script>
a,b,c相加本来为1.3921,但sum1得出的结果为:1.3921000000000001,显然不正确,通过toFixed(n)方法修正后(n是精确的小数点位数),得到正确结果。
例如:parseFloat(1.392143).toFixed(3)=1.392;
2. 2 .Jquery的Ajax同步调用方式
var data="name=1";
$.ajax({
type: "post",
url : "<%=basePath%>projectinfo/projAjax.action?method=getProjCodeState",
data:data,
async:false,
success: function(msg){
if(msg == "error"){
new iMsgBox("项目编码["+code+"]已经存在,请重新输入!", "信息提示").showAlert();
flag = false;
return false;
}
}
});
3. 输入框只能填写数字
onKeypress=check(value=value.replace(/[^\d]/g,'') );
4. js参数乱码问题
前台:var imType = encodeURI(encodeURI(imageType));
后台: try {
//对中文参数进行解码(前台js需进行两次编码或不编码)
imageType = URLDecoder.decode(imageType, "UTF-8");
}catch (UnsupportedEncodingException e){
e.printStackTrace();
}
5. js获取文件扩展名
filename.substring(filename.lastIndexOf('.')+1, filename.length);
6. 正则表达式 整数判断
var RegExps = function(){};
RegExps.isNumber =/^[0-9]*[1-9][0-9]*$/; //整数正则表达式
RegExps.isNumber.test(val) //执行判断val
1. frame对象的处理
window.frames['showKgbstj_frame'].document.onreadystatechange=function(){
if(this.readyState=='complete'){ //当frame里的文档加载完成的时候触发共有三种状态
$(window.frames['showKgbstj_frame'].document.body).css("overflow","scroll");
}
};
2. 也可以给frame加事件监听文档的加载
window.frames[this.divName + "_frame"].attachEvent("onload",function(){
alert("更新完成");
});
3. 数据不能读可以写 readonly="readonly";
4. frame可以添加事件:
var ifram = document.createElement('<iframe scrolling="yes" marginHeight="10px" name="'+this.divName +'_frame"></iframe>');
ifram.setAttribute("id",this.divName + "_frame");
ifram.attachEvent("onload",function(){
alert("123"); //只要frme页面加载一次就会执行一次
});
5. avascript设置一个变量,只允许提交一次[防止重复提交。
<script language="javascript">
var checkSubmit*** = false;
function checkSubmit() {
if (checkSubmit*** == true) {
return false;
}
checkSubmit*** = true;
return true;
}
document.ondblclick = function docondblclick() {
window.event.returnValue = false;
}
document.onclick = function doconclick() {
if (checkSubmit***) { window.event.returnValue = false;
}
}
</script>
<html:form action="myAction.do" method="post" onsubmit="return checkSubmit();">
6. 如果刷新一个已经提交过的页面时系统总是会提示一个"重试或取消”的对话框.,
如果是一个普通的页面,好象也无所谓,有就有,大不了多点一下.但是当我们是在子窗体中刷新父窗体时,就显得有点多余了.所以就想把这个对话框给去了.找了很的办法.总结一下.
一, window.opener.location.reload() 如果改页面没提交过,这个方法好使.但是这个页面一旦提交过后,系统就会提示"重试或取消”的对话框.
二 window.opener.location = window.opener.location;这个方法肯定不提示,但是有个问题就是分页显示的时候,一刷新总是会显示第一页,这个也是理所当然,因为默认请求的就是第一页
三 window.opener.form1.submit();这个方法也不提示了,这个方法就是自动提交页面,绕开那个烦人提示的界面,但是如果被刷新的页面用到了比如gridwiew控件之类的,里面的数据可能不会随着刷新而发生变化,原因就是gridwiew的数据绑定是在某个控件的事件中进行,而页面是通过submit()提交的,不会触发该控件的事件.gridwiew中的数据也是通过读取viewstat中内容获得的,所以在刷新过程中数据不会发生变化.
四 window.opener.__doPostBack(" Control","");其中 Control 是控件ID,这个方法就是克服了三的缺点,不用.opener.form1.submit()这样直接提交.不仅让页面自动提交,而且还要想办法让控件的事件也执行.
注意第四种方法也不是完美的,有的页面是没有这样的控件,有的页面有这个控件但也不能触发数据绑定事件.比如页面数据是随下框内容发生变化的那种页面.因为页面数据是否重新绑定取决于下拉框中内容是否发生变化.而打开子窗体前后时下拉框内容肯定没有变化,所以页面内容也不会变化.
五,针对四,我们可以在父页面用点小技巧,比如在Page_Load中绑定数据时不加IsPostBack判断,但是不好就不好在点按钮时同样的数据会绑定两遍
7. .FCKeditor:使用
1)获取对象和值
var o = window.frames['MOVEMENT_CONTENT___Frame'].FCKeditorAPI.GetInstance("MOVEMENT_CONTENT");//获取的编辑值
alert(o.GetXHTML(true));
8. URL乱码转化
后台:java.net.URLDecoder.decode(content, "UTF-8");
前台: var reqUrl = encodeURI(basePath+saveUrl);
reqUrl = encodeURI(reqUrl);
为什么要连续两次调用 encodeURI(String) 方法呢?是因为 Java 中的
request.getParameter(String) 方法会进行一次 URI 的解码过程,
调用时内置的解码过程会导致乱码出现。而 URI 编码两次后, request.getParameter(String)
函数得到的是原信息 URI 编码一次的内容。接着用 java.net.URLDecoder.decode(String str,String codename) 方法,将已经编码的 URI 转换成原文
9. html的form中定义submit按钮后无法用js提交
10. 输入文本框长度检查
<script language="javascript" type="text/javascript">
function DjCheckMaxlength(oInObj)
{
var iMaxLen = parseInt(oInObj.getAttribute('maxlength'));
var iCurLen = oInObj.value.length;
if ( oInObj.getAttribute && iCurLen > iMaxLen )
{
oInObj.value = oInObj.value.substring(0, iMaxLen);
}
} //@ END OF DjCheckMaxlength()
</script>
.....
<textarea maxlength="80" onkeyup="return DjCheckMaxlength(this);"></textarea>
.....
11. 页面刷新出现IE浏览器”重试””取消”的提示框
if(window.opener.pageForm){
window.opener.pageForm.submit();
}else{
window.opener.location.reload();
}
12. JQuery实现复选框多选取值
1.全选按钮给定ID : checkAll 并添加事件 并排除id是 1047231的选项
$(function(){ //全选或者全不选
$("#checkAll").click(function(){ $(":checkbox").not($("#1047231")).attr("checked",$(this).attr("checked"));
});
});
2.遍历选择:
$(":checkbox:checked").each(function(){
var name = $(this).attr("name");
if(name!="allCheck"){
tids += $(this).attr("towerIdt")+",";
}
});
13. JQuery下拉选取值
var sArray = ["基础工程","架线工程","杆塔组立","基础浇筑"]; //送电类型
var bArray = [""]; //变电类型
var sType = $("#session\\.SPEC_TYPE").val(); //获取类型 0011:变电 0010:送电
//获取下拉框的值
$(document).ready(function(){
$("#TYPE").find("option").each(function(i){
alert($(this).text());
if(sType=='0011'){
for(var i=0;i<sArray.length;i++){
if($(this).text()==sArray[i]){
$(this).remove();
}
}
}else if(sType=='0010'){
for(var j=0;j<bArray.length;j++){
if($(this).text()==bArray[j]){
$(this).remove();
}
}
}
});
14. TD文字多的时候换行CSS
<td style="white-space:normal;word-wrap:break-word;word-break:break-all;text-align:left">
15. JS解析地址栏里的参数信息
var LocString=String(window.document.location.href);
function getQueryStr(str){
var rs = new RegExp("(^|)"+str+"=([^\&]*)(\&|$)","gi").exec(LocString), tmp;
if(tmp=rs){
return tmp[2];
}
// parameter cannot be found
return "";
}
document.getElementById("user").value = getQueryStr("user");
document.getElementById("password").value = getQueryStr("password");
document.getElementById("sysno").value = getQueryStr("sysno");
16. Frame使用,
.页面之间的简单跳转:
1-1.可以利用document.referrer属性与document.location.href属性来实现.
1-2.利用history对象来实现:
Js代码
- //go back one page
- history.go(-1);
- //go forward one page
- history.go(1);
- //go forward two pages
- history.go(2);
- //go to nearest wrox.com page
- history.go('wrox.com');
- //go to nearest nczonline.net page
- history.go('nczonline.net');
- //go back one page
- history.back();
- //go forward one page
- history.forward();
//go back one page
history.go(-1);
//go forward one page
history.go(1);
//go forward two pages
history.go(2);
//go to nearest wrox.com page
history.go('wrox.com');
//go to nearest nczonline.net page
history.go('nczonline.net');
//go back one page
history.back();
//go forward one page
history.forward();
2.在top页面中定义的全局变量/函数,在frame中可以通过获取其它frame的window对象,然后执行访问。
window.frames 包含了页面的所有的iframe/frame;
frame[i] 都代表了对应页面的window对象。
top 对象用于指向浏览器中最外层的frame,也就是浏览器窗口。
即:
Js代码
- alert(top === top.window)//true
alert(top === top.window)//true
注意:如果采用var iframe=getElementById(iframeId)方法获取Iframe,得到的是一个HTML下的DOM对象,需要使用 iframe.contentWindow 才可以获取该iframe下的window对象。
在子frame中访问其它的frame的方式:
Js代码
- var someFrame = top.frames[i];//或者通过frame的name属性访问
- someFrame.varName //访问某个全局变量
- someFrame.fn()//执行某个全局函数 .
var someFrame = top.frames[i];//或者通过frame的name属性访问
someFrame.varName //访问某个全局变量
someFrame.fn()//执行某个全局函数 .
3.全局变量为parent,用于访问frame的父级frame.
最外层的frame,parent等于自己。如果仅存在一层frame嵌套,则top可以用parent替代。
4.另一个全局变量self,指向本身页面window。
alert(self == window)
5.判断页面是否存在iframe。
alert(window.frames.length)
6.访问iframe所在页面的内容。
var f = document.getElementById('bframe');
var doc = f.contentDocument ? f.contentDocument : f.contentWindow.document;
alert(doc.body.innerHTML)
7.iframe高度自适应的一种解决方法。
Js代码
- function reinitIframe(){
- var iframe = document.getElementById("targetFrame");
- try{
- var doc = iframe.contentDocument ? iframe.contentDocument : iframe.contentWindow.document;
- var bHeight = doc.body.scrollHeight;
- var dHeight = doc.documentElement.scrollHeight;
- var height = Math.max(bHeight, dHeight);
- iframe.height = height;
- }catch (ex){}
- }
- window.setInterval("reinitIframe()", 200);
17. Frame 调用其他frame的方法,点击别的页面隐藏最外层框架的弹出菜单。
Top.window是最外层的框架,使用top.windows.frames.length可以取到当前页面的包含的框架.
使用 windows.frame[框架ID].方法名(); 可以执行指定框架里的js方法。
Windows.opener();是打开当前窗口的父窗口值向。
/**
功能:点击别的页面隐藏当前面板
*/
$(function(){
setInterval( //循环的原因是如果点击了新的菜单之前的事件就会丢失
function(){
try{
window.frames['headerFrame'].document.body.onclick=function(){
closeTreePanel();
};
top.window.frames['main'].document.body.onclick=function(){
top.window.closeTreePanel();
};
allRightFrame();
}catch(e){}
}
,1000);
});
function allRightFrame(){
var frms = top.window.frames['main'].frames;
if(frms!=null && frms!=undefined && frms.length>0){
for(var i=0;i<frms.length;i++){
frms[i].document.body.onclick=function(){
top.window.closeTreePanel();
};
}
}
}
/*
功能:隐藏面板.
*/
function closeTreePanel(){
var stt = $("#tree_gcl").css('display');
if(stt!='none'){
$("#tree_gcl").hide();
$("#tree_gc").width(20);
addTipMsg();
}
}
18. File控件 设置onchange事件,清空路径后会再次出发解决方法。
function change(obj){
alert("change...");
var nf = obj.cloneNode(true);
nf.value=''; // 设计新控件value为空
obj.parentNode.replaceChild(nf, obj);
}
<input type="file" name="f1" id="file1" onchange="change(this)"/>
19. Frame模拟单击事件
refreshStr="getRootWindow().frames('main').frames('frameLeft').tonclick("+imagetempId+");";
20. 通过滤镜获取图片高度等.
样式.
<style type="text/css">
#preview_wrapper{
display:inline-block;
width:300px;
height:300px;
background-color:#CCC;
}
#preview_fake{ /* 该对象用于在IE下显示预览图片 */
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale);
visibility:hidden;
}
#preview_size_fake{ /* 该对象只用来在IE下获得图片的原始尺寸,无其它用途 */
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=image);
visibility:hidden;
}
#preview{ /* 该对象用于在FF下显示预览图片 */
width:300px;
height:300px;
}
</style>
代码:
……
<div id="preview_fake">
<img id="preview_size_fake" name="preview_size_fake"/>
</div>
……
Js:代码
var objPreview = document.getElementById('preview');
var objPreviewFake = document.getElementById('preview_fake');
var objPreviewSizeFake = document.getElementById('preview_size_fake');
if( sender.files && sender.files[0] ){
objPreview.style.display = 'block';
objPreview.style.width = 'auto';
objPreview.style.height = 'auto';
// Firefox 因安全性问题已无法直接通过 input[file].value 获取完整的文件路径
objPreview.src = sender.files[0].getAsDataURL();
}else if( objPreviewFake.filters ){
// IE7,IE8 在设置本地图片地址为 img.src 时出现莫名其妙的后果
//(相同环境有时能显示,有时不显示),因此只能用滤镜来解决
// IE7, IE8因安全性问题已无法直接通过 input[file].value 获取完整的文件路径
sender.select();
var imgSrc = document.selection.createRange().text;
objPreviewFake.filters.item('DXImageTransform.Microsoft.AlphaImageLoader').src = imgSrc;
// objPreviewFake.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").sizingMethod = "image"//当需要预览的时候启用
objPreviewSizeFake.filters.item('DXImageTransform.Microsoft.AlphaImageLoader').src = imgSrc;
setTimeout("", 1500);
//autoSizePreview(objPreviewFake,objPreviewSizeFake.offsetWidth, objPreviewSizeFake.offsetHeight );//当需要预览的时候启用
var width = objPreviewSizeFake.offsetWidth;//获取图片的宽度;
var hight = objPreviewSizeFake.offsetHeight;//获取图片的高度;
$("#preview_size_fake").removeAttr("id"); //由于产生了预览的div来获取长度和宽度,获取之后马上删除的id,避免div占取控件
$("img[name='preview_size_fake']").attr("id","preview_size_fake");//当删除id之后,用此方法将id再添加回来,以便下次使用。
var widthbz = 1200;//预定义的宽度标准(bz)
var hightbz =1200; //预定义的高度标准(bz)
if(width < widthbz ||hight < hightbz){
new iMsgBox("你所上传照片的像素为"+width+"*"+hight+"<br/>"+"照片的像素不得低于1200*1600的像素标准", "错误提示","e").showAlert();
$("input[name='images'][type='file']").unbind("change"); //移除第一个控件的事件
var nf = sender.cloneNode(true);
nf.value=""; // 设计新控件value为空
sender.parentNode.replaceChild(nf, sender);
$("input[name='images'][type='file']").bind("change",function(){ //给第一个控件bind事件
onUploadImgChange(this);
});
return false;
}
WEB服务器
1. weblogic 编码问题:
一、 描述
项目编码一向做为系统设计级别难题,servlet2.4还未实现跨应用服务器编码支持,个应用服务器之间编码存在很大差异,因此导致部署不同应用服务器上会出现不同乱码问题。为了实现开发环境(tomcat)和生产环境(weblogic9.2)编码统一,特此实现WEB.XML配置FILTER过滤编码,经过多次测试,基本实现跨应用服务器编码统一。
二、 配置(工程编码:UTF-8)
1.个人编码规范
由于一些模块存在GET请求,在处理request.getParameter后出现乱码问题,一般个人实现方式为dwmc = new String(dwmc.getBytes("iso-8859-1"), "gb2312"); 此转码形式只适合一种应用服务器tomcat,为保证生产环境下weblogic能正常编码,需要:完全清理因个人书写而改变编码设置代码。并使用系统编码设置。
2.系统配置TOMCAT
POST:系统web.xml中使用filter进行过滤POST请求,并其自动对其编码转换为utf-8。实现代码为
request.setCharacterEncoding(encod);
GET:filter过滤无法为TOMCAT进行GET编码转换,因此需要修改TOMCAT/CONF/ server.xml文件,在项目Connector标签下增加URIEncoding="GB2312"属性。
3.系统配置WEBLOGIC9.2
POST与GET统一处理方式,使用FILTER进行处理。判断request.getContentType()空的时候则为GET 请求,处理如下:
request.setCharacterEncoding(encod_wlc);
response.setContentType("application/x-www-form-urlencoded;charset="+ encod_wlc);
response.setCharacterEncoding(encod_wlc);
encod_wlc:为配置参数,此处:GB2312
POST请求则正常转换成utf-8即可,
request.setCharacterEncoding(encod);
2. 2.Linux下字体乱码终极解决方案
在windows下找到系统使用到的字体,这里以楷体举例
到c盘的 windows文件夹的 Fonts文件夹里面存放了windows中用到的所有字体,具体路径C:\WINDOWS\Fonts
找到楷体字体SIMKAI.TTF
http://www.finereport.com/forumimages/e1.png
2:将楷体字体拷贝到Linux下JRE下的\lib\fonts文件夹
注意这个JRE必须是服务器用到的JDK下的JRE
例如服务器为tomcat
使用的 jdk是usr下 /java/jdk1.5.0_13
登陆到linux系统
Cd到usr/java/jdk1.5.0_13/jre/lib/fonts
登陆到ftp 将之前准备好的楷体拷贝到当前目录下
ftp id
转到字体所在位置
get SIMKAL.TTF 到当前目录下
exit 退出ftp
3:重启服务器 解决linux下字体乱码问题
JSP
1. EL取值
${requestScope.name}
${sessionScope.name}
${param.from}
2. md5加密:
--更新数据库密码 为MD5加密
update t_pdc_user set password = func_md5(func_md5('1')||id);
commit;
3. 标签
<s:iterator id=s value="list">
<s:if test={s.name=='ss' || s.id==#request.ids}>
</s:if>
</s:iterator>
<s:if test="userId==#request.thisuserid">
${userId}==<s:property value="#request.thisuserid"/>
</s:if>
4. Struts标签执行静态类的方法
<s:if test="#loopTowers.tower.downBase!=null&&#loopTowers.tower.downBase!=0">
<s:property value="%{@com.hhwy.iepip.progress.utils.Arith @format(#loopTowers.tower.downBase)}"/>
</s:if>
EXT.
视频下载: http://www.uspcat.com/forum.php?mod=forumdisplay&fid=53