java开发总结

来源:互联网 发布:阿里云备案域名购买 编辑:程序博客网 时间:2024/06/05 00:19

java开发经验总结1:
word页面只要在jsp头设置如下指令:
<%@page contentType="application/msword;charset=GBK" %>
 
excel如下:
<%@ page contentType="text/html; charset=GBK" %>
<%@ page import="java.sql.*,java.io.*,ktj.*,java.util.*"%>
<%response.setHeader("Content-disposition","attachment; filename=result.xls" );%>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">//这句话是必须要加的,如果
不加就是乱码。
..........

author=rs.getString("author")+"&nbsp";//在网页的内容里面加一个空格,因为如果没有空格,Excel会把99999999这样的字符串转化成科学                                       //计数法的方式进行显示,如果把网页显示的内容后面加入一个空格,那么Excel就会按照字符串来                                       //对待,就能显示正常了。

......


2:String对象中汉字和英文的识别

//String s1="邱礼强";//输出为6
//String s1="qiuliqiang";//输出为10
String s1="邱qiu";
byte[] b2=new byte[20];
b2=s1.getBytes();

out.println(b2.length);//输出为5,因为‘邱’为两个字节

2 :java中实现同步 synchronized

Synchronized是java实现互斥共享访问同一资源(属性、方法、对象)的一种机制,分为对方法的同步和对代码块的同步:
     对方法的同步又可以分为对静态方法的访问和对非静态方法的访问,如果一个静态方法使用了Synchronized,则对任何对
     该类该方法的访问都是互斥的,如果一个非静态方法使用了Synchronized,则只对同一对象实例所有Synchronized方法访问
     是互斥的。

锁: 分为 对象锁 和 类锁 类锁的实现采用的是对象锁,不同的是,对象锁是针对java.lang.Object对象,而类锁是针对java.lang.Class对象。

A:无论synchronized关键字加在方法上还是对象上,它取得的锁都是对象,而不是把一段代码或函数当作锁――而且同步方法很可能还会被其他线程的对象访问。

B:每一个对象都有且只有一个锁与它相对应(对象锁)。

synchronized (object)就相当于给object对象加了锁。


如下面的代码:
class DBConnectionManager
{
.......
private static Object object=new Object();//object对象只在内存中存在一个,所以如果把
                                          //该对象锁起来,别的程序肯定不能访问被锁住的代码。

public static DBConnectionManager getInstance()
{
if (dbc==null)//只生成一次
{
 
synchronized(object)//第一个先执行到这条语句的对象把object对象加了锁,其他的对象想执行下面的                    //语句,如果别的对象也要执行这部分,就必须要等到限执行的把对象锁释放掉。
 {
      if (dbc==null)
         {
    try
     {
                    //Class c = Class.forName(CLASSNAME);
     dbc=new DBConnectionManager();
              connectionPool = new ConnectionPool(driver, server, username,                       password,minConnections, maxConnections, logPath, connectionTimeout);
           
/*
              initCtx = new InitialContext();
     ctx = (Context) initCtx.lookup("java:comp/env");
              obj = (Object) ctx.lookup("jdbc/xcb");
     ds = (javax.sql.DataSource)obj;
*/
     }
          catch(Exception e)
    {
     System.out.println("DBConectionManager.getInstance() Error");
     return null;
       }

   
         }

    }
}
return dbc;
}
};


如果上面的代码变成如下:
.......
private Object object=new Object();

public DBConnectionManager getInstance(){
.......

 

那么假设在dbBean对象中用:DBConnectionManager dbc=new DBConnectionManager();
                         DBConnectionManager dbc1=new DBConnectionManager();
假设下面的两条语句同时执行,那么是可以同时执行的,因为每个对象的内部都有一个object。                        
                         dbc.getInstance();
                         dbc1.getInstance();


3:修改news1表中的file1字段的类型为varchar(200).

sql="ALTER TABLE news1 ALTER COLUMN file1 varchar(200)";


4:只显示1900年1月1到2006年1月10日的新闻

SELECT * FROM news1 WHERE (uptime BETWEEN '1900 - 1 - 1' AND '2006 - 1 - 10')

 

5:
ISO8859-1:8-位
UTF-8和Unicode所对应的汉字的编码都一样,都是遵守的GB2312编码。

可以这么描述JAVA程序中Unicode与UTF的关系,虽然不绝对:
字符串在内存中运行时,表现为Unicode代码,而当要保存到文件或其它介质中去时,用的是UTF。这个转化过程是由writeUTF和readUTF来完成的。(因为有好多字符用UTF编码表示只用1个字符就可以,可以节省空间)

如果jsp文件中没有指明所用的字符集,那么编译jsp文件的时候jdk就认为jsp文件采用的字符集是ISO8859-1,把jsp文件读入内存的时候按照
ISO8859-1---->Unicode的转换规则(8位转换为16位简单的把每个字节高八位补0)把jsp文件中的字符集转化为Unicode。正确的应该为
GB2312------->Unicode的转换规则进行转换。


6:
vector和HashTable是线程同步的,ArrayList和HashMap不是线程同步的。ArrayList以一个整数作为索引,HashMap以一个对象作为索引。
可以把ArrayList 对象放到HashMap对象中。


7:用dom4j解析xml文件。

SAXReader reader = new SAXReader(); 
reader.setValidation(true);//用xml文件头部定义的DTD文件来对xml进行检查。如
<!DOCTYPE  hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "hibernate-mapping-3.0.dtd">
//如果用DTD文件对xml文件进行检查千万不要用"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
因为这样还得要jdk下载DTD文件,如果网速慢这样要等好长时间。可以采用两种方法解决:
1:不对xml进行检查。2:把DTD文件下载下来用"hibernate-mapping-3.0.dtd"本地格式。

 

8:对于要经常变化的字符串要用StringBuffer不要用String
java中的变量相当于一个地址指针(指向地址的指针)

如:String a="qiuliqiang";//jvm在内存中创建一个String对象,内容是“qiuliqiang”,a指向这个String对象的地址。
    String a="hejingjing";//又生成了一个新的String对象,a又指向这个新的对象的地址。
    String b="zhutou";
    String a=a+b;//a+b后又生成了一个新的对象,内容是"hejingjingzhutou"然后a指向该对象。

如果上面改用StringBuffer就可以了。

 

9:引起内存溢出的原因:
 
  静态的HashMap或HashTable,Vector,ArrayList对象对其他对象的引用使被引用的那个对象不能释放。
 
  最好避免用过多的的局部变量。(String对象的相加会产生很多的局部变量)
  用完对象后争取在最短的时间内让它为null,使得它能在最近的一次垃圾回收中被回收。


10:
在当前的弹出窗口内执行一面的语句,能改变原始的窗口的数据。(极品OA就用到了)
eval("window.opener."+obj_name+".value='" + name + "'");


11:遍历HashMap
用Entry
for (Iterator i=m.entrySet().iterator(); i.hasNext(); ) {
    Map.Entry e = (Map.Entry) i.next();
    System.out.println(e.getKey() + ": " + e.getValue());
}
或者用keySet
for (Iterator i=m.keySet().iterator(); i.hasNext(); ){
    System.out.println(i.next()+":"i.get(i.next()));
}


12:
    LinkedHashMap这个对象很适合作为缓存,它默认(accessOrder=false)情况下iterator能够按照添加的顺序进行遍历整个容器(它里面的每条记录都有一个指向下一个记录的链接),这样就可以很方便的找到最先添加到容器里面的那条记录(因为做缓存的时候要删除这条记录)
,这样就不用再为容器建立一个mapping了。
    当(accessOrder=true)的时候,它能够把当前访问的记录放到iterator链的最后面,这样就可以让那些不经常访问的新闻到iterator链的最前面,然后删除的时候删除最前面的记录就可以了.

   LinkedHashMap存取的速度很快(与HashMap一样),遍历的速度因为每条记录都有指向下条记录的指针,避免向HashMap一样查找,我觉得遍历速度要快于HashMap.

   
13:<jsp:include page="top.jsp"></jsp:include>和<%@ include file="top.jsp"%>的区别
  (1):用<%@ include file="top.jsp"%>包含后可以使用top.jsp里面定义的变量。而前者就不可以.
  
   除此之外基本相同;
   两者都可以选择性的执行.(放到if else里面),不过原来好像只有<jsp:include page="top.jsp">可以。

 

14:tomcat5.0和jdk5组合的时候把一个项目设成reloadable="true"的时候,重新编译bean后出错,如果
用tomcat5.5和 jdk5组合就可以。不知道怎么回事,原来的tomcat 5好像可以


15:SqlServer数据分页

分页方案一:(利用Not In和SELECT TOP分页)
语句形式:SELECT TOP 10 *
FROM TestTable
WHERE (ID NOT IN
(SELECT TOP 20 id
FROM TestTable
ORDER BY id))
ORDER BY ID

SELECT TOP 页大小 *
FROM TestTable
WHERE (ID NOT IN
(SELECT TOP 页大小*页数 id
FROM 表 ORDER BY id))
ORDER BY ID

-------------------------------------

分页方案二:(利用ID大于多少和SELECT TOP分页)语句形式:SELECT TOP 10 *
FROM TestTable
WHERE (ID >
(SELECT MAX(id)
FROM (SELECT TOP 20 id
FROM TestTable
ORDER BY id) AS T))
ORDER BY ID

SELECT TOP 页大小 *
FROM TestTable
WHERE (ID >
(SELECT MAX(id)
FROM (SELECT TOP 页大小*页数 id
FROM 表 ORDER BY id) AS T))
ORDER BY ID

-------------------------------------

分页方案三:(利用SQL的游标存储过程分页)
createprocedure XiaoZhengGe
@sqlstr nvarchar(4000), --查询字符串@currentpage int, --第N页@pagesize int --每页行数as
set nocount on
declare @P1 int, --P1是游标的id
@rowcount int
exec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output
select ceiling(1.0*@rowcount/@pagesize) as 总页数--,@rowcount as 总行数,@currentpage as 当前页
set @currentpage=(@currentpage-1)*@pagesize+1
exec sp_cursorfetch @P1,16,@currentpage,@pagesize
exec sp_cursorclose @P1
set nocount off

其它的方案:如果没有主键,可以用临时表,也可以用方案三做,但是效率会低。建议优化的时候,加上主键和索引,查询效率会提高。

通过SQL 查询分析器,显示比较:我的结论是:
分页方案二:(利用ID大于多少和SELECT TOP分页)效率最高,需要拼接SQL语句分页方案一:(利用Not In和SELECT TOP分页) 效率次之,需要拼接SQL语句分页方案三:(利用SQL的游标存储过程分页)效率最差,但是最为通用


16:struts标签库显示list
LOGIC:ITERATE- -

<logic:iterate id="user" property="users" name="usersForm" type="net.wjp.pro.db.entity.logon.User">

<bean:write name="user" property="username"/><br/>

//代表的意思是:从USERSFORM中取的users的LIST,list里面的type是User里面的PROPERTY是USERNAME

</logic:iterate>


如:
<logic:iterate id="news" name="indexForm" property="tzgg"   type="struts.pojo.SimpleObject">   
         
<tr>
                  <td height="28" align="left" valign="top"><div align="center">&nbsp;<img src="images/01_01.gif" width="6" height="5"></div></td>
                  <td align="left" valign="middle"><div align="left">
  <a href="read.jsp?id=<bean:write name='news' property='id' format=''/>" target="_blank" class=hei12>&nbsp;
 
                <bean:write name="news" property="title"/>
               
                </a></div></td>
                </tr>
               
 </logic:iterate>

//indexForm是在struts-config.xml文件里定义

17:一段javascript代码


<script language=javascript>
 function CheckForm()
 {

for (x=0;x<200;x++){
 oa=document.all("q"+x);

  if(oa!=null&&oa.value=="")
     {
   alert("请输入药品价格!");
   oa.focus();
   return false;
  }

  }
}
</script>

<style type="text/css">
<!--
.style1 {
 font-size: 24px;
 font-weight: bold;
 color: #FFFFFF;
}
-->
</style>
<table width="100%" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td align="center"><table width="600" border="0">
      <tr>
        <td align="center" bgcolor="#336666"><span class="style1">医药公司上传价格表</span></td>
      </tr>
    </table>
      <table width="600" border="0" align="center" cellpadding="0" cellspacing="1">

        <form name="gm" method="post" action="yyscok.asp" onSubmit="return CheckForm();">
  <tr align="center" bgcolor="#999999">
          <td width="131" height="13">药品名称</td>
          <td width="97">药品剂型</td>
    <td width="148">药品规格</td>
          <td width="136">生产厂家</td>
    <td width="82">价格</td>
        </tr>

        <tr bgcolor="#cccccc" onmouseover="javascript:this.style.background= '#ECF2FC'"
  onmouseout="javascript:this.style.background = '#cccccc'">
          <td>sdf</td>
          <td>sdfsd</td>
    <td>sdf</td>
          <td>sdfs</td>
    <td align="center">
      <input id="q2" name="2"  type="text" size="8" maxlength="8">
          </td>
        </tr>
 
 
 
 
     <tr align="center">
    <td colspan="5"><input type="submit" name="gm" value=" 提  交 "></td>
  </tr>

  </form>
      </table>
      </td>
  </tr>
</table>

18:struts 下判断null值

如  <logic:notEmpty name="indexForm" property="tzgg">
   <logic:iterate id="news" name="indexForm" property="tzgg"   type="struts.pojo.SimpleObject">
  
         
<tr>
                  <td height="28" align="left" valign="top"><div align="center">&nbsp;<img src="images/01_01.gif" width="6" height="5"></div></td>
                  <td align="left" valign="middle"><div align="left">
      <a href="read.jsp?id=<bean:write name='news' property='id' format=''/>" target="_blank" class=hei12>&nbsp;
      <bean:write name="news" property="title"/></a></div></td>
                  </tr>
  
 </logic:iterate>         
</logic:notEmpty>

 

原创粉丝点击