启网、虚拟主机、域名注册、服务器合租
精致合租、5人、10人、15人服务器合租、freebsd合租
当前位置:站长中国 > JSP技巧 > weblogic的jsp问题解决方法2

weblogic的jsp问题解决方法2

2009 - 02 - 03  作者:  来源:  浏览:554  评论: 发布评论 问高手
推荐:启网 - 专业的主机、服务器合租提供商 17hz.net - 5年服务器合租精品服务
    

 


问题7:

使用vector+hashtable 一次返回查询结果resulset.


解决方法: 记录集:将一条记录放到一个hashtable里面,然后把它再

       添加到vector里面,循环记录下结果集,返回vector

具体见后面的java文件的部分代码(不包扩数据库的连接和关闭)




 package zjdx.bean.common;


/********************************************

 ***** Title:      hashtable_vector_rs 

 ***** Description: 数据显示          

 ***** Copyright:  Copyright (c) 2002  

 ***** Company:       DHC           

 ***** author:     wangyl              

 ***** version:    1.0                 

 ***** 说明:

 ***** 记录集:一条记录用放到一个hashtable里面,然后把它再

       放到vector里面,循环记录下结果集,返回vector

      

*********************************************/


import java.io.*;

import java.sql.*;

import java.util.*;

import java.text.*;


public class hashtable_vector_rs

{

    /*----------------------------------------------------------------*/

    /* 函数名称: getMultiRowInfo

    /* 功能描述: 返回记录集,放到Hashtable里面

    /* 参数:    sql 语句,字段个数

    /* 返回值:   成功---htable, 失败---null

    /*----------------------------------------------------------------*/

    public Vector ListResult(String sqlStatement,int num)

    {

        Vector ListRs=new Vector();

       

        try

        {

            connectDB();

            rs=stmt.executeQuery(sqlStatement);

            //判断字段数据类型

            //date型 返回 93

            //int型 返回 2,4

            //bigint型 返回 3

            //String型 返回 12

            //(char 型)返回 1

            int t = -1;

            rsmd = rs.getMetaData();

            int ColumnCount=0;

            if(num>0)

                ColumnCount = num;

            else

                ColumnCount = rsmd.getColumnCount();

            while(rs.next())

            {                            

                Hashtable htable =new Hashtable();

                for (int i = 1; i <= ColumnCount; i++)

                {

                    t=rsmd.getColumnType(i);

                    System.out.println("i="+i+",t="+t+"name="+rsmd.getColumnName(i));

                    if(t==12||t==1||t==3)

                    {

                        if(rs.getString(i)==null|| rs.getString(i).equals(""))

                            htable.put(rsmd.getColumnName(i),"");

                        else

                            htable.put(rsmd.getColumnName(i),rs.getString(i));

                    }

                    else if(t==93)

                    {

                        htable.put(rsmd.getColumnName(i),rs.getDate(i).toString());

                    }

                    else if(t==2||t==4)

                    {

                        htable.put(rsmd.getColumnName(i),Integer.toString(rs.getInt(i)));

                    }

                }

                ListRs.add(htable);

            }//e

            return ListRs;               

        }

        catch(Exception listError)

        {

            System.out.println("数据库操作失败!"+listError);

            return null;

        }

        finally

        {

            try

            {

                closeDB();

            }   

            catch(Exception closeErr)

            {

                System.out.println("关闭数据库出错:"+closeErr);   

            }

        }    

    }

}


 问题8: jsp的程序也有设计的不够合理的地方

     例如:选择一个下拉框,提交一次,列出所选的数据,选择另外一个下拉框再次提交,再次列出所选的数据。

解决方法:

     尽量一次把条件选择完毕,然后列出所选择的数据,并且在数据多的时候,尽量使用翻页,减少运行时间。


问题9:性能优化,尽量使用PreparedStatement

解决方法:

PreparedStatement 对象和使用的普通的 Statement 对象有两点不同。

第一,    它们是为了性能更快而由 JDBC 驱动程序或数据库编译(预编译)的。

第二,    它们接受一个或多个动态输入参数,称为 IN 参数。这两点让 PreparedStatement 对象适用于重复的 SQL 操作,其中操作基本上都是一样的,只有微小的差异(如数据载入)。要让 SQL 语句在使用前预备好,在 PreparedStatement 对象创建时必须将 SQL 传送到 JDBC 驱动程序,而不是在其执行时才传送。


IN 参数用 SQL String 中的 ? 占位符表示。在 PreparedStatement 能够成功地执行前,还必须调用 PreparedStatement 对象的 setXXX() 方法来设置 IN 参数,在这里 XXX 被设置的参数的数据类型所替换。因而,要将第一个 IN 参数设置为整数值 100,您应该调用 setInt(1, 100)。同样地,要将第二个 IN 参数设置为字符串值“rjb”,您应该调用 setString(2, "rjb")。最后一点是,设置好的参数值在设置为一个新的值,或用 clearParameters() 显式地清除之前会保持不变。这很重要,因为 PreparedStatement 可以被多次执行;如果您不注意的话,就会让您的数据库充满无用数据。

问题10 :

  1、我把包含SQLBridge 的java文件改了一遍,有32个java文件(已经改完)。

   2、我把包含SQLPool 的java文件改了一遍,有27个java文件(已经改完)。

   3、我把不用的jsp文件整理了一下,大概有17 个目录的jsp文件不用或者没有上线。(整理完毕)

问题11:提交页面,每次都提交两次。

原因:

  1、


这里如果type=”sbumit”,页面就会提交两次。(花费了一天的时间才找到原因)。

在onclick事件里面会提交一次,而submit 按钮本身也会提交一次。


解决方法:

   如果在onclick 事件里面提交页面,按钮的类型type 一定不可以是”submit”  按钮。

可以是”button”.

   全文搜索共有33个类似的文件。

java.net.SocketException: ReadFile failed: 指定的网络名不再可用。

主要是由于这个引起的。

问题12:定时刷新页面,600秒(不是必要的,不要这样做)

原因:

  

解决方法:

       去掉这样的语句。

   

全文搜索共有12个类似的文件。


问题13:在跳转到别的页面的时候,要加return。

否则可能会引起错误。跳转不过去。

If{

request.getRequestDispatcher("/zjdx/jsp/common/ErrorPage.jsp?s_mark=error:record have existed").forward(request,response);

return;

}

else

{

response.sendRedirect();

//建议用上面的方法

return;

}




推荐教程