首页 > 技术文章 > RAD6.0+EJB+WEBSPHERE+JNDI转eclipse+TOMCAT7+JDK1.7+JNDI+SPRING修改总计

tapt 2017-08-18 17:57 原文

##########################1.去除ejb#######################################################################
1.1:导包:javax.xml.rpc-api-1.1.1.jar (复制到路径:webconent/WEB-INF/lib);
1.2:从websphere的lib中复制j2ee.jar这个jar包,用压缩软件打开,(注意:j2ee.jar这个包不要放到tomcat下的lib内,tomcat服务器会跑不起来)
并且删除其中的:
javax/ejb/EJBLocalObject.class,
javax/ejb/SessionBean.class,
javax/ejb/CreateException.class,
javax/ejb/DuplicateKeyException.class,
javax/ejb/FinderException.class
javax/transaction/SystemException.class
等几个文件,然后导入这个jar包到项目中(复制到路径:webconent/WEB-INF/lib);

说明:此jar包包含了sessionbean,EJBLocalObject。原项目中bean实现了sessionbean,local实现了EJBLocalObject,几乎所有的bean文件都与
sessionbean以及j2ee包下的其他某些类产生了关联,不可能手动一个一个从bean中删除这些关联,因此直接导入j2ee这个jar包用于被bean的引用;
上面列出的几个文件被bean频繁引用,即使jar包中包含有这几个文件,编译时还是会报错导致了项目无法启动!!!
解决思路是:手动新建这几个类,用来被bean引用!
因此,现在我们手动在src下面新建一个package,路径就是javax.ejb,在这个包下新建一个接口EJBLocalObject,接口里面定义一个抽象方法remove;
再在包下新建一个SessionBean的空内容接口;
EJBLocalObject代码如下:
 package javax.ejb;
 public interface EJBLocalObject {
 public void remove();
 }
在javax.ejb包下新建一个类CreateException:
 public class CreateException extends Exception {
 public CreateException(){};
 public CreateException(String msg){};
 }
在javax.ejb包下新建一个类DuplicateKeyException
 package javax.ejb;
 public class DuplicateKeyException extends Exception {
 }
在javax.ejb包下新建一个类FinderException
 package javax.ejb;
 public class FinderException extends Exception {
 }
再新建一个包javax.transaction,在包下新建另一个异常类SystemException:
 package javax.transaction; 
 public class SystemException extends Exception{ 
 }

######################################2:人工操作,有一定工作量######(ejbfactory和spring配置文件已改好可直接采用)#####################################################
###############################################有350多个bean需要人工手动修改###########################################################################################
采用spring管理bean的准备工作:
向项目webconent/WEB-INF/lib导入spring的jar包,aop,aspects,beans,context,context-support,core,expression(主要是bean,core,context,context-support,其他几个应该暂时未用到)
在src目录下面新建一个applicationContext.xml,将所有bean配置进IOC容器,配置成多例模式;

必须的手动工作量:
更新到最新版本,在rad里面编译好能运行,这一步主要是让local和localhome全部编译好。
gen里面包含了编译好的local和localhome,将gen/src里面的com文件夹复制到intrust2015\java\EnfoIntrsutEJB\ejbModule,让2个com文件夹融合
这样所有bean,以及其对应的local和localhome都集合到了各自bean所在目录
准备修改的地方:(此文件夹还未进行以下修改):

2.1:所有bean取消implements sessionbean,改为implements本身的local;
(但是如果bean继承了busibean,而busibean默认是实现了Sessionbean的,如果直接更改busibean让其不实现sessionbean,项目中会蹦出来N多继承busibean的bean报错需要更改,因此不要更改busibean)
2.2:所有bean添加一个remove()的空操作方法(很多jsp末尾执行了local.remove()方法)
 在eclipse中点击红线可以自动生成这个未被实现的remove方法
 
2.3:src目录下新建一个applicationContext.xml,配置所有的bean
2.4:EJBFactory更改getbean,
先类中建一个静态成员属性:
 public static ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
之后所有getbean的方法全部修改为以下这一行:
return (xxxLocal)ctx.getBean("xxxBean");

##############################3:jar包调整(已整合)############################################################################
问题1:有些jsp测试dwr正常,有些jsp页面测试dwr时报异常
测试jsp页面想调用bankcommandservice这个dwr,结果页面报异常java.lang.ClassNotFoundException: net.sf.json.util.PropertyFilter

问题2:调用webservice接口时候会提示class not found
要将enfolib中的axis相关包放到WEBROOT/WEB-INF/lib中
axis.jar,
axis2-adb-1.4.1.jar,
axis2-adb-codegen-1.4.1.jar,
axis2-kernel-1.4.1.jar
commons-discovery.jar
activation-1.1.jar
mail.jar
上述类似问题是因为:
原enfolib用户库默认是在本地java项目时有效,当项目为web项目时,相关类加载器并未加载这些jar包,默认是加载WEB-INF/lib下的,所以会提示找不到相关jar包;
(其实可以通过项目右键-deployment assembly-add-java build path entryes将自定义的用户库enfolib配置进来,现在采用如下更直接的方法)
为避免有其他jar包碰到同样的问题:

最终改动:将原用户库enfolib的jar包全部放到WEBROOT/WEB-INF/lib中,不再采用enfolib用户库

##########################4.导入所有jsp后编译时eclipse直接卡死##############################################################
导入java部分编译没问题,导入所有jsp后,编译卡住直到eclipse崩溃。

4.1:设置eclipse下的elicpse.ini,(按个人配置)
-Xms2048m
-Xmx2048m
-XX:MaxPermSize=2024m

4.2:去掉验证,参考http://www.cnblogs.com/shangxiaofei/p/5403642.html
1:windows–>perferences–>validation
2:重点注意:修改工作空间中,项目内.project文件中,删除掉下面这一行(js验证):
<nature>org.eclipse.wst.jsdt.core.jsNature</nature>

4.3:此时,全部项目可以编译了,但是会有js报红。
右键项目-properties-builders,去掉javascript validator前面的勾,project-build automatically勾选上,项目右键刷新
4.4:修改web.xml
去掉所有ejb-local-ref相关的内容

##############################5.tomcat+sqlserver+jdk1.7的 JNDI配置##########################
5:tomcat+sqlserver的jndi配置

5.1:下载sqlserver的驱动jar包,地址是:http://www.microsoft.com/zh-cn/download/details.aspx?id=11774
 下载其中的exe文件,解压,如果用的是jdk1.7,那么对应的jar包是jre7下面的sqljdbc41.jar
5.2:复制这个驱动包到你的jdk1.7安装目录\jre\lib\ext,比如我的是D:\jdk1.7.0_65\jre\lib\ext;
5.3  复制驱动包到tomcat安装目录的lib中,如我的是D:\Tomcat 7.0\lib
5.4  修改tomcat安装目录\conf\context.xml,在<Context>节点中增加如下JNDI配置:
 <Resource
  name="jdbc/intrust"
  auth="Container"
  type="javax.sql.DataSource"
  maxActive="100"
  maxIdle="30"
  username="sa"
  password="000000"
  dirverClassName="com.microsoft.sqlser.jdbc.SQLServerDriver"
  url="jdbc:sqlserver://127.0.0.1:1433; DatabaseName=intrust"
 />

5.5 如果要在本机eclipse的测试环境中运行项目,那么在eclipse中的server(新建一个server时就会自动生成这个项目),打开context.xml,按5.4一样增加就行了;
 如果加上这些内容后项目跑不起来,尝试把这几行内容都写成一行。

5.6 (可忽略)在webcontent目录下写个测试jsp,里面调用Argument中的一个连接数据库的方法,比如在body中写入下面的java代码
 <%=Argument.getType_content("10010001")%>,(数据表中对应字段是“资金到账”);
 在eclipse左侧项目资源管理器中选中这个jsp文件,右键-run as -run on server,这样会在本地tomcat测试环境中从浏览器打开这个页面,如果页面上显示“资金到账”,说明JNDI配置成功;

########################6.修改项目访问路径,原访问路径包含项目名,必须取消项目名,否则项目中有些页面路径不对报404#####################3
如果是eclipse测试环境:
双击tomcat服务器,弹出测试server的配置页面,点击modules,选择本项目,edit,修改path为"/"(没有双引号)

发布到正式tomcat环境时:

正规的改法应该是配置虚拟目录:(推荐)
项目war包Intrust放到webapp目录下
在tomcat下的server.xml中,找到 <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
在下方添加一行:<Context path="" docBase="Intrust" reloadable="true" />
docBase中的值是项目名字;

也可以:
1.删除ROOT下所有文件及文件夹,或者直接重命名默认的ROOT为ROOT_bak
2.把我们项目的war包解压后,项目目录下的所有文件和子目录都拷贝到ROOT目录下即可
或者有更狠的一招:直接删掉ROOT目录,然后把我们的项目打包名称改成ROOT.war,放到webapps下就行

################7.开始跑项目-细节调整#################################################
1:打开项目首页报错空指针异常,定位到busibean.java,方法:query
原因是rowset一开始并没有被初始化,所以为null,在方法中却直接就调用rowset.close(),所以报空指针异常;
注意:原ejb项目不报异常时因为busibean的EJBCreate方法中对rowset进行的赋值初始化,每个ejb生成时会执行ejbcreate()方法;
最直接的方法:在BUSIBEAN的默认构造方法中,给rowset初始化赋值;
 public BusiBean(){
  try {
   rowset = new sun.jdbc.rowset.CachedRowSet();
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 };
或者直接在query之类要用到rowset的方法内部初始化赋值;

2:busibean中修改next时当游标已经在最后时再次next就报异常的问题:
修改所有next使游标后移的方法
 public boolean getNext() throws Exception{
  boolean hasnext=true;
  try{
   hasnext=rowset.next();
   }catch(Exception e){
   return false;
   }
  return hasnext;
 }
同理有:getNextView,getNextZhcx等2个方法;

3:dwr.xml警告消除(可忽略)
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN" "http://www.getahead.ltd.uk/dwr/dwr10.dtd">
查看dwr.jar是2.0版本的,上面可能要按下行修改来消除警告:
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://www.getahead.ltd.uk/dwr/dwr20.dtd">

############################################################################################################################################
#####################  8.数据库重点改动:关于页面报异常:该存储过程没有返回结果集################################################
############################################################################################################################################
打开当前产品时,基本信息中,页面异常,提示com.microsoft.sqlserver.jdbc.SQLServerException: 该语句没有返回结果集。
打开页面调用的存储过程:
——————————————————————————————————

WITH ENCRYPTION
AS
下一行补上:   SET NOCOUNT ON   (必须添加)
——————————————————————————————————
说明:几乎绝大部分query查询的存储过程都没有添加SET NOCOUNT ON ,大概有1000多条存储过程需要添加!!!
手动一条一条改,太耗时,所以写了个java代码直接通过程序来更改:
事先准备:将database/PROC/query里面所有存储过程复制到D:/modsql/PROC-query,
 将database/TA/PROC文件夹里面所有的query的存储过程复制到D:/modsql/TA-PROC
 (其他应该还有少量的query可逐一添加)
在eclipse中建个项目,建个类,将文件夹中ModSQL.java的方法复制进去,执行程序可批量修改sql,速度很快。
==================================================================================================
注意:main中的path路径,要修改哪个文件夹下的存储过程,就修改为对应文件夹的路径!!!

在eclipse里面执行这个小程序时,会将存储过程自动添加上SET NOCOUNT ON,但以下存储过程除外(写法不一样,没有写加密的语句):
执行这个java程序后会在控制台输出需要手动修改的存储过程的列表,可以将这个列表复制到一个txt文件,以便手动添加SET NOCOUNT ON的时候用于对照查看;
列表如下:
PROC-QUERY目录下
SP_QUERY_INVESTSSINFO_TOTAL.SQL---需要手动添加SET NOCOUNT ON
SP_QUERY_TCHEQUEYE_NO.SQL---需要手动添加SET NOCOUNT ON
SP_QUERY_TCONTRACTSS.SQL---需要手动添加SET NOCOUNT ON
SP_QUERY_TDONATEINFO.SQL---需要手动添加SET NOCOUNT ON
SP_QUERY_TENTCWZBINFO.SQL---需要手动添加SET NOCOUNT ON
SP_QUERY_TENTCWZBINFO_YEAR.SQL---需要手动添加SET NOCOUNT ON
SP_QUERY_TENTLEVELINFO.SQL---需要手动添加SET NOCOUNT ON
SP_QUERY_TENTRELATION.SQL---需要手动添加SET NOCOUNT ON
SP_QUERY_TINVESTFINANCE_COMM.SQL---需要手动添加SET NOCOUNT ON
SP_QUERY_TINVESTFINANCE_ENT.SQL---需要手动添加SET NOCOUNT ON
SP_QUERY_TINVESTSSINFO.SQL---需要手动添加SET NOCOUNT ON
SP_QUERY_TINVESTSSINFO_LIST.SQL---需要手动添加SET NOCOUNT ON
SP_QUERY_TINVESTSSJDINFO.SQL---需要手动添加SET NOCOUNT ON
SP_QUERY_TINVESTSSZXINFO.SQL---需要手动添加SET NOCOUNT ON
SP_QUERY_TINVESTSS_DETAIL.SQL---需要手动添加SET NOCOUNT ON
SP_QUERY_TOTHERBUSIFLAG.SQL---需要手动添加SET NOCOUNT ON
SP_QUERY_TOTHERBUSIFLAG_FOR_CHECK.SQL---需要手动添加SET NOCOUNT ON
至此,经过java程序自动修改,手动补漏修改后,下一步就是将这些更改过的存储过程在数据库上执行一遍;
这里不用一个一个的在数据库上执行,利用工具合并,再执行;
工具:udFile.exe,可以将一个文件夹下的所有存储过程合并到一个sql文件中,然后直接在数据库上执行这个合并后的文件即可;
基于数据库,可能有个别存储过程执行时报错,提示xx列名不对什么的,应该要对数据库进行数据维护,先忽略掉。
############################################################################################################################################


############################9.有些jsp中import包含“,,”导致jsp编译报错的问题######################################

首页:
1:现金管理相关菜单-功能类菜单-基金信息,页面报错打不开
talfund_query.jsp  import中2个连续的",",去掉一个
2:现金管理相关菜单-功能类菜单-基金信息审核,页面报错打不开
talfund_check.jsp  import中2个连续的",",去掉一个

后来发现还是可能存在很多jsp有这种情况,利用问题9的思路,新写一个java程序用于查找所有存在“,,”的jsp文件;
参见文件夹下的modJSP.java,在eclipse中运行这个java程序,会在控制台中打印出所有包含",,c",",,j"的jsp文件,
(所有import中,都是",,com.enfo....."或者",,java.......")
此程序只能打印jsp列表,没有直接将",,"改成",",需要手动修改;我用的项目版本查出来有57个jsp需要手动修改
D:\enfo\javaeclipse\EnfoIntrsutWeb\WebContent\efifs\fee\problem_fee_apply_print.jsp
D:\enfo\javaeclipse\EnfoIntrsutWeb\WebContent\efifs\fee\problem_fee_apply_print11.jsp
D:\enfo\javaeclipse\EnfoIntrsutWeb\WebContent\efifs\fee\problem_fee_apply_print11_zhongtai.jsp
D:\enfo\javaeclipse\EnfoIntrsutWeb\WebContent\efifs\fee\problem_fee_apply_update11.jsp
D:\enfo\javaeclipse\EnfoIntrsutWeb\WebContent\efifs\fee\problem_install_pay_list_print.jsp
D:\enfo\javaeclipse\EnfoIntrsutWeb\WebContent\efifs\fee\problem_start_tspotaward.jsp
D:\enfo\javaeclipse\EnfoIntrsutWeb\WebContent\financing\accountdata\loan_3_2_2.jsp
D:\enfo\javaeclipse\EnfoIntrsutWeb\WebContent\financing\finacialcard\finacialcard_info2.jsp
D:\enfo\javaeclipse\EnfoIntrsutWeb\WebContent\financing\finacialcard\finacialcard_info_add.jsp
D:\enfo\javaeclipse\EnfoIntrsutWeb\WebContent\financing\square\cpoutinfo_update.jsp
D:\enfo\javaeclipse\EnfoIntrsutWeb\WebContent\nav_chart\intrustdetail.jsp
D:\enfo\javaeclipse\EnfoIntrsutWeb\WebContent\nav_chart\intrustscale.jsp
D:\enfo\javaeclipse\EnfoIntrsutWeb\WebContent\newui\employee_main.jsp
D:\enfo\javaeclipse\EnfoIntrsutWeb\WebContent\newui\leader_main.jsp
D:\enfo\javaeclipse\EnfoIntrsutWeb\WebContent\portal\downloadFile.jsp
D:\enfo\javaeclipse\EnfoIntrsutWeb\WebContent\portal\navigator.jsp
D:\enfo\javaeclipse\EnfoIntrsutWeb\WebContent\portal\noticeMoreGzts_1.jsp
D:\enfo\javaeclipse\EnfoIntrsutWeb\WebContent\portal\noticeMoreGzts_1_1.jsp
D:\enfo\javaeclipse\EnfoIntrsutWeb\WebContent\portal\noticeMoreGzts_2.jsp
D:\enfo\javaeclipse\EnfoIntrsutWeb\WebContent\portal\noticeMoreGzts_2012.jsp
D:\enfo\javaeclipse\EnfoIntrsutWeb\WebContent\portal\notice_form_history.jsp
D:\enfo\javaeclipse\EnfoIntrsutWeb\WebContent\portal\notice_form_pages.jsp
D:\enfo\javaeclipse\EnfoIntrsutWeb\WebContent\portal\notice_intrust.jsp
D:\enfo\javaeclipse\EnfoIntrsutWeb\WebContent\portal\potal_dclsw.jsp
D:\enfo\javaeclipse\EnfoIntrsutWeb\WebContent\portal\potal_dplsw.jsp
D:\enfo\javaeclipse\EnfoIntrsutWeb\WebContent\portal\potal_fxyj.jsp
D:\enfo\javaeclipse\EnfoIntrsutWeb\WebContent\portal\potal_fxyj_dclsw.jsp
D:\enfo\javaeclipse\EnfoIntrsutWeb\WebContent\portal\potal_fxyj_yclsw.jsp
D:\enfo\javaeclipse\EnfoIntrsutWeb\WebContent\portal\potal_gl_stgm.jsp
D:\enfo\javaeclipse\EnfoIntrsutWeb\WebContent\portal\potal_gzjh.jsp
D:\enfo\javaeclipse\EnfoIntrsutWeb\WebContent\portal\potal_problem_confirm.jsp
D:\enfo\javaeclipse\EnfoIntrsutWeb\WebContent\portal\potal_problem_stat.jsp
D:\enfo\javaeclipse\EnfoIntrsutWeb\WebContent\portal\potal_work_warn.jsp
D:\enfo\javaeclipse\EnfoIntrsutWeb\WebContent\portal\potal_xmdt.jsp
D:\enfo\javaeclipse\EnfoIntrsutWeb\WebContent\portal\sso_param_info.jsp
D:\enfo\javaeclipse\EnfoIntrsutWeb\WebContent\portal\zjtdefault.jsp
D:\enfo\javaeclipse\EnfoIntrsutWeb\WebContent\portal\zjt_work_index.jsp
D:\enfo\javaeclipse\EnfoIntrsutWeb\WebContent\portal_2012\problem_portal.jsp
D:\enfo\javaeclipse\EnfoIntrsutWeb\WebContent\projects\forms\problem_invest_order_applymoney.jsp
D:\enfo\javaeclipse\EnfoIntrsutWeb\WebContent\projects\problem_fiduciary_scale.jsp
D:\enfo\javaeclipse\EnfoIntrsutWeb\WebContent\projects\problem_fiduciary_scale_1.jsp
D:\enfo\javaeclipse\EnfoIntrsutWeb\WebContent\projects\product_fl_list.jsp
D:\enfo\javaeclipse\EnfoIntrsutWeb\WebContent\system\systemparam\talfund_check.jsp
D:\enfo\javaeclipse\EnfoIntrsutWeb\WebContent\system\systemparam\talfund_query.jsp
D:\enfo\javaeclipse\EnfoIntrsutWeb\WebContent\transaction\project\product_intrustreward.jsp
D:\enfo\javaeclipse\EnfoIntrsutWeb\WebContent\transaction\project\product_intrustreward_check.jsp
D:\enfo\javaeclipse\EnfoIntrsutWeb\WebContent\transaction\project\product_intrustreward_check_back.jsp
D:\enfo\javaeclipse\EnfoIntrsutWeb\WebContent\transaction\project\product_intrustreward_check_do.jsp
D:\enfo\javaeclipse\EnfoIntrsutWeb\WebContent\transaction\project\product_intrustreward_remove.jsp
D:\enfo\javaeclipse\EnfoIntrsutWeb\WebContent\transaction\project\product_statistic.jsp
D:\enfo\javaeclipse\EnfoIntrsutWeb\WebContent\transaction\project\project_problem_start_check_info.jsp
D:\enfo\javaeclipse\EnfoIntrsutWeb\WebContent\transaction\project\project_problem_start_info.jsp
D:\enfo\javaeclipse\EnfoIntrsutWeb\WebContent\transaction\project\project_problem_start_modi.jsp
D:\enfo\javaeclipse\EnfoIntrsutWeb\WebContent\transaction\project\project_problem_start_new.jsp
D:\enfo\javaeclipse\EnfoIntrsutWeb\WebContent\transaction\project\project_problem_start_uncheck_info.jsp
D:\enfo\javaeclipse\EnfoIntrsutWeb\WebContent\webreport\bmgmbc.jsp
D:\enfo\javaeclipse\EnfoIntrsutWeb\WebContent\webreport\xtgmbc.jsp
##################################10:其他细节问题##################################
前台业务
1:项目产品管理-产品管理-产品设置-简介
ProductBean.java 方法public boolean getNext(String DBdriver) throws BusiException
位置:click_flag = Utility.parseInt(Utility.trimNull(rowset.getObject("click_flag")),new Integer(0));
解决方法:要求SP_QUERY_TPRODUCT_ID返回CLICK_FLAG字段
或者直接将上面这行java改成:
 try{
     click_flag = Utility.parseInt(Utility.trimNull(rowset.getObject("click_flag")),new Integer(0));
     }catch(Exception e){
           click_flag = Integer.valueOf("0");
     }

2:产品核算管理-中间收益-审核-付款打印
sk_print.jsp  乱码
综合查询-缴款查询
pay_collection_print.jsp乱码
//String product_code = Utility.trimNull(request.getParameter("product_code"));
String product_code=request.getParameter("product_code")==null?"":new String(request.getParameter("product_code").getBytes("iso-8859-1"), "GBK");
可以像上述改动这样直接在jsp里面改动,但是如果有其他的jsp也乱码,这种就很麻烦。
原项目是以GBK编码运行的。
最直接的方法是直接在tomcat里面改动,tomcat不论测试环境,正式环境,找到server.xml,以下两个位置改动,都是在后面加上URIEncoding='GBK'这个属性。
<Connector connectionTimeout="20000" port="9080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding='GBK'/>
<Connector port="9009" protocol="AJP/1.3" redirectPort="8443" URIEncoding='GBK'/>

###############################关于jdk版本################################################
目前项目修改后成功运行的环境:tomcat7配jdk1.7,elicpse配jdk1.7;
在此基础上,测试:
当tomcat7配jdk1.7,eclipse配1.8时(sqlserver驱动jar包导入到jdk1.8对应的文件夹中,此时tomcat7中的sqlserver驱动jar包配的还是jdk1.7版本的不变),项目可以跑起来
当tomcat7配jdk1.7,eclipse配1.8时(sqlserver驱动jar包没有导入到jdk1.8对应的文件夹中,此时tomcat7中的sqlserver驱动jar包配的还是jdk1.7版本的不变),项目也可以跑起来

 附录:修改sql和查找jsp的java代码

----------批量修改sql

package com.enfo.intrust.test;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;

public class ModSQL {
public void modify(String path) throws IOException{
File dir=new File(path);
String[] fileList=dir.list();
    for(int i=0;i<fileList.length;i++){
    //读取文件
        File currentFile=new File(path+"\\"+fileList[i]);
    //判断是否包含“NOCOUNT”
        if(!hasnocount(currentFile)){//如果当前文件中不包含NOCOUNT
            setNOCOUNT(currentFile);
        }     
    }
}
//判断是否存在SET NOCOUNT ON
public boolean hasnocount(File file) throws IOException{
    boolean flag=false;

    String temp;
    BufferedReader bReader=new BufferedReader(new InputStreamReader(new FileInputStream(file)));
    while((temp=bReader.readLine())!=null ){
        if (temp.contains("NOCOUNT")) return true;
    }
    bReader.close();
    return flag;
} 
//添加 SET NOCOUNT ON
 public void setNOCOUNT(File file) throws IOException{
    StringBuffer sb=new StringBuffer();
    String temp;
    BufferedReader bReader=new BufferedReader(new InputStreamReader(new FileInputStream(file)));
    while((temp=bReader.readLine())!=null ){
        if(temp.contains("WITH ENCRYPTION")){
            sb.append(temp.trim()+"\n");
            }else sb.append(temp+"\n");
    }
    bReader.close();
    int start=sb.indexOf("WITH ENCRYPTION");
    if(start!=-1) {
        sb.insert(start+18, "\nSET NOCOUNT ON");
    }else System.out.println(file.getName()+"---需要手动添加SET NOCOUNT ON");
    
    BufferedWriter bWriter =new BufferedWriter(new FileWriter(file));
    bWriter.write(sb.toString());
    bWriter.close();
    
} 
public static void main(String[] args) throws IOException {
    String path="D:\\modsql\\TA-PROC";
    ModSQL ms=new ModSQL();
    ms.modify(path);
}    
}

 

 

---------查找jsp

package com.enfo.intrust.test;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;

public class modJSP {

public void modify(String path) throws IOException{
File dir=new File(path);
String[] fileList=dir.list();
 for(int i=0;i<fileList.length;i++){  
 //读取文件
  File currentFile=new File(path+"\\"+fileList[i]);
  if(currentFile.isFile()){ //如果是文件
   if( currentFile.getName().contains("jsp")&&hasnocount(currentFile)){//如果是jsp文件并且当前文件中包含,,
    System.out.println(currentFile.getAbsolutePath()); 
   }  
  }else{//如果是文件夹,递归操作
    String newpath=path+"\\"+currentFile.getName();
   modify(newpath);
  }
 }
 
}
//判断是否存在SET NOCOUNT ON
public boolean hasnocount(File file) throws IOException{
 boolean flag=false;
 String temp;
 BufferedReader bReader=new BufferedReader(new InputStreamReader(new FileInputStream(file)));
 while((temp=bReader.readLine())!=null ){
  if (temp.contains(",,c")||temp.contains(",,j")) return true;
 }
 bReader.close();
 return flag;
} 

public static void main(String[] args) throws IOException {
 String path="D:\\enfo\\javaeclipse\\EnfoIntrsutWeb\\WebContent";
  modJSP mj=new modJSP();
 mj.modify(path);
} 
}

 

推荐阅读