Java-2006工作手记

 
 
1.       URL 中文传输编码 %D5%F8 (java )
a)          顺转码: URLEncoder
b)         反转码: URLDecoder
c)         request.QueryString()
 
2.       tomcat5.0 带传输中文的参数需要在 tomcat 下的 server.xml 下加上 URIEncoding= GBK
3.       取得汉字的拼音码
a)          区位码=区码+位码; 一个汉字两个字节,前一个字节是区位
b)         一级字库区位码从1601-5590 分别对应声母a到z 23个
c)         {1601,1637,1833,2078,2274,2302,2433,2594,2787,3106,3212,3472,3635,3722,3730,3858,4027,4086,4390,4558,4684,4925,5249 }
d)         {'A', 'B','C','D','E','F','G','H','J','K','L','M','N','O','P','Q','R','S','T','W','X','Y','Z'};
4.       tomcat 安装前要安装 jdk ( 并且设置环境变量 )
a)        classpath=.;%JAVA_HOME%/lib/dt.jar;%JAVA_HOME%/lib/tools.jar;%JAVA_HOME%/lib/htmlconverter;
b)        java_home=c:/jdk1.5
c)        path=%JAVA_HOME%/bin;
d)         注意有的环境变量的名称就加在已有的环境变量的内容的前面.
5.       javascript 实现文本框于多选框的联动
a)          <script language="javascript">
b)         <!--
c)              function lian(){
d)                    if(document.form1.check.value==1){
e)                           document.form1.a.disabled = !document.form1.a.disabled ;
f)                         }
g)                 }
h)          
i)           //-->
j)           </script>
k)         ======================================================
l)           <body>
m)       <form id="form1" name="form1" method="post" action="">
n)           <p>
o)             <input name="check" type="checkbox" id="check" value="1" onClick="lian();" />
p)           </p>
q)           <p>
r)              <input name="a" type="text" id="a" />
s)            </p>
t)           </form>
u)         </body>
 
 
 
6.       Ajax 实现不刷新页面的用户名唯一性检测
XmlHttpRequest 通讯
 
7.       可以在 web.xml 中设置过滤器是否对整个网站有效 .
    <filter-mapping>
      <filter-name>filtergbk</filter-name>
      <url-pattern>/*</url-pattern>
    </filter-mapping>
可以设置成只对某个文件夹有效.
<url-pattern>/文件夹名字/*</url-pattern>
 
8. 在平台中退出以后就是把 session 设置为 null, 如果不马上关闭浏览器的话 ,
还是可以盗链的 ?
   答: 使用HTTP 头信息"Expires" 和 "Cache-Control"
         1> no - cache:强制缓存从服务器上获取新的页面
         2> no - store : 在任何环境下缓存不保存任何页面
         过滤器中:
                response.setHeader("Cache-control","no-cache");
                response.setHeader("Cache-control","no-store");
                response.setDateHeader("expires",0);
                response.setHeader("Pragma","no-cache");
 
9. 在启动 tomcat 时可能遇到的几个问题
   在启动To m c a t的过程中,可能会遇到一些问题,这里就常见问题进行一些说明。
1) 启动To m c a t失败。出现这种情况时,可能有两种现象:
第一种:执行s t a r t u p . b a t以后没有Ja v a窗口出现。
第二种:有Ja v a窗口出现,但是接着自行退出。
对于第一种情况,很可能是TOMCAT_HOME环境变量设置有问题,打开s t a r t u p . b a t文件,
观察脚本的写法,一般可以发现问题。
对于第二种情况,可能是当前系统中已经有一个服务器占用了8 0 8 0端口,这时需要把原先
的服务器关闭,或者利用后面讲的To m c a t的配置方法修改To m c a t的服务端口。也可能是由于
CLASSPAT H设置有误,这时需要检查CLASSPATH是否设置正确。
2) 启动To m c a t成功,可以看到首页,但是不能执行JSP脚本。
这种情况一般是由于CLASSPAT H设置有误或JAVA _ HOME设置有误,经过试验发现,当使
用Wi n d o w s自带的j a v a . e x e(c : / w i n n t / s y s t e m 3 2或c : / w i n d o w s / s y s t e m)时可能会出现这种问题。
 
 
 
 
10.Windows 下代码保护的问题
Wi n d o w s 下使用 To m c a t 时有一个问题需要注意,可以做一个试验,启动 To m c a t 后,在浏
览器的地址栏中键入: http://127.0.0.1:8080/examples/jsp/ HelloWorld . JSP (注意后缀要大写)。
就会发现奇怪的现象,浏览器的窗口中什么都没有,查看 H T M L 源文件就会发现,这个 J S P 文件
的源代码被 To m c a t 完全输出到了浏览器!如果是这样,岂不是服务器端的任何源代码都会被暴
露在互联网上。
实际上,解决方法很简单,把各种后缀的组合全部写到 To m c a t _ H o m e / c o n f / w e b . x m l 里就可
以了,这样 t o m c a t 会将不同后缀名的 j s p 分开对待,就不会泄露代码了。
<servlet-mapping>
<servlet-name>
jsp
</servlet-name>
<url-pattern>
*.jsp
</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>
Jsp
</servlet-name>
<url-pattern>
*.Jsp
</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>
JSp
</servlet-name>
<url-pattern>
*.JSp
</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>
JsP
</servlet-name>
<url-pattern>
*.JsP
</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>
JSP
</servlet-name>
<url-pattern>
*.JSP
</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>
jSp
</servlet-name>
<url-pattern>
*.jSp
</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>
jSP
</servlet-name>
<url-pattern>
*.jSP
</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>
jsP
</servlet-name>
<url-pattern>
*.jsP
</url-pattern>
</servlet-mapping>
 
 
 
 
 
 
 
 
 
 
11.jsp文件下载不显示乱码(文件内容) Verdana 字体(文件名可用中文)
   download.jsp
   调用方法 :
<a href src = “download.jsp?filename=文件名.后缀名”>下载</a>
<%
     java.io.BufferedInputStream bis=null;
    java.io.BufferedOutputStream  bos=null;
   try{
    String filename=request.getParameter("filename");
               filename=new String(filename.getBytes("iso8859-1"),"gb2312");
    response.setContentType("application/x-msdownload");
   response.setHeader("Content-disposition","attachment; filename="+new String(filename.getBytes("gb2312"),"iso8859-1"));
   bis =new java.io.BufferedInputStream(new java.io.FileInputStream(config.getServletContext().getRealPath("files/" + filename)));
  bos=new java.io.BufferedOutputStream(response.getOutputStream()); 
  byte[] buff = new byte[2048];
  int bytesRead;
  while(-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
   bos.write(buff,0,bytesRead);
  }
 }
 catch(Exception e){
  e.printStackTrace();
 }
 finally {
  if (bis != null)bis.close();
  if (bos != null)bos.close();
// 自己加的 防止报错
if (response.getOutputStream()!= null){
response.getOutputStream().close();
  }
 %>
 
 
 
 
 
 
 
 
 
 
12.如何实现动态下拉框
―――――――――――――――――――――――――――――――――――――――
在开发项目中,经常会遇到大小类的问题,即有两个下拉框 , 一个为主 , 一个为次 , 如果主下拉框选择更新后根据所选择的项从数据库中读取相关数据并更新到次下拉框中 . 比如主下拉框为大类 , 次下拉框为大类下的选项 , 并且页面是没有提交的。
    
思路是在打开页面时就要所有的大类和小类都从数据库中取出,把所有的小类组装成一个 javascript 小类数组 ( 数组结构为 Array(" 大类编号 "," 小类编号 "," 小类名称 ")) ,当大类改变时,激活一个 javascript 函数从小类数组中取出从属于选中大类的所有小类,把其在小类下拉框显示即可。
* 完整源代码 ( 已经测试通过 )
<%@ page contentType="text/html;charset=gbk" %>
<%@ page import="java.sql.*" %>
<%@ page import="java.util.*" %>
<%@ page import="java.text.*" %>
<jsp:useBean id="dba" scope="page" class="db.DBAccess">
</jsp:useBean>
<HTML>
<HEAD>
<TITLE>JAVA 技术 </TITLE>
</HEAD>
<BODY>
<DIV align=center>
<CENTER>
<form name="main" method="post" action="jsp8.jsp" target="_blank">
<TABLE id=AutoNumber1 style="FONT-SIZE: 10pt; BORDER-COLLAPSE: collapse"
borderColor=#c0c0c0 cellPadding=0 width=760 border=1>
 <TBODY>
 <TR>
    <TD align=middle width=750 bgColor=#f2f2f2 colSpan=2>
    </TD>
 </TR>
 
 <TR>
    <TD align=middle width=68> &nbsp;&nbsp;&nbsp; </TD>
    <TD width=682>&nbsp;<select name="maintype" onChange="javaScript:changemaintype(document.main.maintype.options[document.main.maintype.selectedIndex].value);">
           <!-- 下面的下拉框数据可以自己改成从数据库读出的 -->
           <option value="">-- 请选择 --</option>
           <%
           try{
              dba.getConnection();
              dba.rs = dba.executeQuery("select quybm,quymc from tg_region where len(quybm) = 2 order by quybm");
              int mycount = 0 ;
              while(dba.rs.next()){
                String quybm = "" ;
                String quymc = "" ;
                quybm = dba.rs.getString("quybm");
                quymc = dba.rs.getString("quymc");
                mycount++;
                //System.out.println(mycount);
           %>
           <option value="<%=quybm%>"><%=quymc%></option>
           <%}}catch(Exception aa){aa.printStackTrace();}%>
         </select>
    </TD></TR>
 <script language = "JavaScript">
 var subcat1 = new Array();
 <!-- 下面的数组数据可以自己改成从数据库读出的 , 格式为 Array(" 省份编号 "," 城市编号 "," 城市名称 "), -->
    <%
    try{
    dba.rs = dba.executeQuery("select left(quybm,2) as shenf,quybm as chengs,quymc from tg_region where len(quybm) > 2");
    int iCount = 0;
    while(dba.rs.next()){
    %>
    subcat1[<%=iCount%>] = new Array("<%=dba.rs.getString("shenf")%>","<%=dba.rs.getString("chengs")%>","<%=dba.rs.getString("quymc")%>");
 
    <%
    // 调试
    iCount++;
    }}catch(Exception aa){aa.printStackTrace();}finally{dba.close();}%>
 var js_count=iCount;
 function changemaintype(locationid)
     {
         document.main.detailtype.options[0] = new Option("-- 请选择 --", "");
         document.main.detailtype.length = 1;
         var locationid=locationid;
         var ii;
         // 设定城市的总数
         for (ii=0;ii<3154;ii++)
         {
             if((subcat1[ii][0] == locationid))
             {
                document.main.detailtype.options[document.main.detailtype.length] = new Option(subcat1[ii][2],subcat1[ii][1]);
             }
          }
         //alert(locationid);
        }
 </script>
 <TR>
    <TD align=middle width=68> &nbsp;&nbsp;&nbsp; </TD>
     <TD width=682>&nbsp;<select name="detailtype">
          <option value="">-- 请先选择省份 --</option>
          </select>
     </TD></TR>
 
 
 </TBODY></TABLE>
 <input type="submit" value=" 提交 "/>
 </FORM>
</BODY>
</html>
 
 
13.java中调用数据库的驱动字符串
1.Oracle8/8i/9 i 数据库( thin 模式) Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
String url="jdbc:oracle:thin:@localhost:1521:orcl"; //orcl 为数据库的 SID String user="test"; String password="test"; Connection conn= DriverManager.getConnection(url,user,password); 
2 DB2 数据库 Class.forName("com.ibm.db2.jdbc.app.DB2Driver ").newInstance(); String url="jdbc:db2://localhost:5000/sample"; //sample 为你的数据库名 String user="admin"; String password=""; Connection conn= DriverManager.getConnection(
 
14.JPG 图片上传 ( 未实现中文处理 )
 uploadimage1.jsp
<%@ page contentType="text/html; charset=gbk" %>
<%@ page language="java" %>
<HTML>
<HEAD>
<TITLE>DATABASE</TITLE>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</HEAD>
<FORM METHOD=POST ACTION="uploadimage2.jsp">
人物 :<INPUT TYPE="text" NAME="name"><BR>
图片 :<INPUT TYPE="file" NAME="image"><BR>
<INPUT TYPE="submit" value=" 提交 ">
</FORM>
</BODY>
</HTML>
 
uploadimage2.jsp
    <%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.util.*"%>
<%@ page import="java.text.*"%>
<%@ page import="java.io.*"%>
<%@ page import="com.sun.image.codec.jpeg.*"%>
<%@ page import="java.awt.image.*"%>
<%@ page import="java.awt.*"%>
<%
      String name=request.getParameter("name");
     name=new String(name.getBytes("ISO-8859-1"));
     String ima=request.getParameter("image");
// 中文转换
ima=new String(ima.getBytes("iso8859-1"),"gb2312");
     try{
        String path=request.getRealPath("/");
        FileOutputStream ot = new FileOutputStream(path+name+".jpg");
    // ServletOutputStream ot=response.getOutputStream(); // 也可以直接输出显示
        FileInputStream in=new FileInputStream(ima);
        JPEGImageDecoder jpgCodec = JPEGCodec.createJPEGDecoder(in);
         BufferedImage image = jpgCodec.decodeAsBufferedImage();
        JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(ot);
        encoder.encode(image);
        in.close();
        ot.close();
         out.print(" 上传图片成功! <BR>");
         // 加载上传成功的图片
        out.print("<IMG width=200 height=200 src='"+name+".jpg' />");
}
catch(Exception e)
{
         System.out.print(e.toString());
}
%>
 
 
 
 
 
15.java 中常用的专业共享组件
      Proxool 连接池工具
他不仅实现了连接池的功能 , 而且有一个后端统计接口,可以很方便的了解连接池的使用情况,可以作为项目开发时测试使用,也可以为项目实际运行后为管理员提供访问情、连接情况等信息。
Javazoom uploadbean 文件上传组件
项目中要求文件上传功能,如果要我们项目开发一个功能完善的文件上传组件,确实不是一件容易的事情。该组件不仅能将文件上传到服务器上也可将文件上传到数据库中,同时可对上传文件大小、类型进行控制。
JdonJive 中的一些类型转换、表单接收等工具类
jspSmartUpload 文件下载组件
 
 
16. 打开新窗口之无法使用热键 F11
  <html>
<body onLoad=javascript:window.showModalDialog("setPass.aspx",window,"dialogWidth=350px;dialogHeight=240px;help=no;resizable=no;status=no;scroll=no")>
</body>
</html>
 
17. 在线进销存管理系统
    www.zydsoft.com
 
18.opcs 表结构
select a.a1 c1,a.yaopmc m1,a.a2 c2,b.yaopmc m2 from
(
select
left(tg_xhzy.zuoy1,11) a1,tg_trule.yaopmc,right(tg_xhzy.zuoy1,11) a2 from tg_xhzy,tg_trule
where tg_trule.yaopbm=left(tg_xhzy.zuoy1,11)
) a,tg_trule b
where b.yaopbm=a.a2
19. 取当前路径的方法
String path = Request.getRealPath(“/”);// 该方法过时
String path2 = session.getServletContext.getRealPath(“good.xsl”);
 
20. 如果发布包不在 tomcat/webapps 下面
    server.xml 里面配
           <Context path="/tgjxc"
                reloadable="true"
               docBase="C:/javaexecute/TGJXCAPP/WEBTG"
               workDir="C:/javaexecute/TGJXCAPP/bin">
           </Context>
 
</host> 的上面配置
 
 
20. 取今天的日期
      import java.sql.* ;
       Timestamp ts = new Timestamp(new java.util.Date().getTime());
 String today = ts.toString().substring(0, 10);
 
21. 验证码的 jsp 实现
 1. ACTION SERVLET 中实现验证码图形的绘制 .
public class TestFormValue_Action extends Action {
public ActionForward perform(
            ActionMapping mapping,
            ActionForm form,
            HttpServletRequest request,
            HttpServletResponse response) {
   try{      
            response.setContentType("image/jpeg");
          ServletOutputStream out = response.getOutputStream();
        
          BufferedImage image = new BufferedImage(35, 14, BufferedImage.TYPE_INT_RGB);
          Graphics gra = image.getGraphics();
          gra.setColor(Color.yellow);
          gra.fillRect(1, 1, 33, 12);
          gra.setColor(Color.black);
          gra.setFont(mFont);
    
          /// 分别取 4 个随机数就 OK
          char c = '1';
          char c2 = '2';
          char c3 = '3';
          char c4 = '4';
          String draw ="";
          for (int i = 0; i < 4; i++) {
           if(i==0){draw = String.valueOf(c);}
           if(i==1){draw = String.valueOf(c2);}
           if(i==2){draw = String.valueOf(c3);}
           if(i==3){draw = String.valueOf(c4);}
            gra.drawString(String.valueOf(draw), i * 7 + 4, 11);
          }
 
          JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
          encoder.encode(image);
        
          out.close();
     }catch(Exception ex){
     ex.printStackTrace();
     }
         
            return null;
      }
2 . jsp 中的调用
<img alt="" src="/tgjxc/testFormValue_Action.do" width="40" height="16"/>
 
22.IE 模式对话框中的搜索
window.showModalDialog("<%=SysInitParam.CONTEXT_PATH%>/testViewAction.do",window,"dialogWidth:600px;dialogHeight:600px");
 
  在弹出的对话框中的 <head> <base target="_self"> </head> 加上这一句话 ,
可以实现对话框的刷新 .
     对话框中的链结写法 : <a href="" onclick="document.all.mya.href='testViewAction.do?search='+document.all.search.value" name="mya"> 搜索 </a>
 <a href=”” onclick=”document.all.mya.href=’testViewAction.do?search=’+document.all.search.value” name=”mya” 搜索 </a>
23. 在没有 form 的页面调用表单里的值
     <html>
<head>
     <script language="javascript">
         function myform(){
             alert(document.all.mytext.value);
            
         }
     </script>
</head>
<body>
<input type="text" name="mytext"/>
<input type="button" onclick="myform();" />
</body>
</html>
 
 
 
24 数据库中得一行数据得字段自动加1.
update bbscs_adv set url=url+1 where id = '1'
 
 
25 .过滤.JSP 页面 只能通过程序来转发  不能手动请求?????????????
 
26.  Timestamp ts = new Timestamp( new java.util.Date().getTime());
String today = ts.toString().substring(0, 10);
 
 
 
 
27.Hibernate 的取得连接类 ( 基于线程的 )
   
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.cfg.Configuration;
 
/**
 * Configures and provides access to Hibernate sessions, tied to the
 * current thread of execution. Follows the Thread Local Session
 * pattern, see {@link http://hibernate.org/42.html}.
 */
public class HibernateSessionFactory {
 
    /**
     * Location of hibernate.cfg.xml file.
     * NOTICE: Location should be on the classpath as Hibernate uses
     * #resourceAsStream style lookup for its configuration file. That
     * is place the config file in a Java package - the default location
     * is the default Java package.<br><br>
     * Examples: <br>
     * <code>CONFIG_FILE_LOCATION = "/hibernate.conf.xml".
     * CONFIG_FILE_LOCATION = "/com/foo/bar/myhiberstuff.conf.xml".</code>
     */
    private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";
 
    /** Holds a single instance of Session */
      private static final ThreadLocal threadLocal = new ThreadLocal();
 
    /** The single instance of hibernate configuration */
    private static final Configuration cfg = new Configuration();
 
    /** The single instance of hibernate SessionFactory */
    private static org.hibernate.SessionFactory sessionFactory;
 
    /**
     * Returns the ThreadLocal Session instance. Lazy initialize
     * the <code>SessionFactory</code> if needed.
     *
     * @return Session
     * @throws HibernateException
     */
    public static Session currentSession() throws HibernateException {
        Session session = (Session) threadLocal.get();
 
           if (session == null || !session.isOpen()) {
                 if (sessionFactory == null) {
                       try {
                             cfg.configure(CONFIG_FILE_LOCATION);
                             sessionFactory = cfg.buildSessionFactory();
                       } catch (Exception e) {
                             System.err
                                        .println("%%%% Error Creating SessionFactory %%%%");
                             e.printStackTrace();
                       }
                 }
                 session = (sessionFactory != null) ? sessionFactory.openSession()
                            : null;
                 threadLocal.set(session);
           }
 
        return session;
    }
 
    /**
     * Close the single hibernate session instance.
     *
     * @throws HibernateException
     */
    public static void closeSession() throws HibernateException {
        Session session = (Session) threadLocal.get();
        threadLocal.set(null);
 
        if (session != null) {
            session.close();
        }
    }
 
    /**
     * Default constructor.
     */
    private HibernateSessionFactory() {
   }
 
}
 
 
 
28.jdk 配置
classpath=.;%JAVA_HOME%/lib/dt.jar;%JAVA_HOME%/lib/tools.jar;
%JAVA_HOME%/lib/htmlconverter;
 
java_home=c:/jdk1.5
 
path=%JAVA_HOME%/bin;
 
 
 
 
 
 
 
29 .常用工具
   1. CVS cvsnt-2.5.03.2151.msi
2. My.Eclipse.Enterprise.WorkBench.v4.0.1 只能使用于 eclipse-SDK-3.1 full "Eclipse sdk" 版本
3. jdk classpath=.;%JAVA_HOME%/lib/dt.jar;%JAVA_HOME%/lib/tools.jar;
        %JAVA_HOME%/lib/htmlconverter;
        java_home=c:/jdk1.5
        path=%JAVA_HOME%/bin;
4. Embarcadero DBArtisan Version 8.1.0(Build 3097) http://www.embarcadero.com
5. PL/SQL Developer Version 6.0.6.947   http://www.allroundautomations.com/plsqldev.html
6. PowerDesigner10
7. AllFusion ERwin DataModeler
8. oracle9i-9.2.0.1
 
 
30. oracle 中删除与用户有关的表 , 索引等
   drop user tgjxc cascade;
 

你可能感兴趣的:(JavaScript,工作,String,session,import,文件上传组件)