当幸福来敲门

我就会牢牢抓住!
随笔 - 50, 文章 - 3, 评论 - 8, 引用 - 0
数据加载中……

2011年12月9日

需求工程师的工作内容

1.和业务部门 、客户沟通(沟通是整个需求设计到开发使用为止);
2.学习业务;
3.有意识听速求(客户最急需的),也就是优先级问题;
4.搜集需求,整合,提炼,完成分析;(考虑周全找关联 找核心)
5.编写需求产品文档(文字和图列、流程图等相结合)
6.掌握相关工具;(比如visio/axure)
7.文档系统讲解(讲解对象:开发和测试)
8.验证开发完后的产品(验证结束后再测试);
9.用户培训(需求工程师主持);
10.了解相关系统(了解整个业务面 而不是 内部的功能点);

注意:数据表设计中尽量存可分析的信息代码;

posted @ 2014-03-05 15:23 wyx 阅读(184) | 评论 (0)编辑 收藏

面试题积累

  1. struts1和struts2的区别
  2. hibernate和ibatis的区别
  3. json和xml的区别
  4. ajax的原理
  5. ajax和iframe嵌套有什么区别
  6. gbk utf8 iso-8859-1都是多少字节
  7. extjs和jquery的区别
  8. js从前端如何解决跨域问题
  9. 单例模式的优点,工厂模式的原理
  10. spring的mvc模式
  11. jdk1.7新功能
  12. 为什么会出现乱码

posted @ 2014-03-04 15:35 wyx 阅读(215) | 评论 (0)编辑 收藏

Hibernate 查询有关in的查询

http://www.iteye.com/problems/74892

List<Integer> ids = new ArrayList<Integer>();
ids.add(3);
ids.add(4);
ids.add(5);
Query query=session.createQuery(from document where id in (:ids)); 
query.setParameterList("ids", ids);
query.list();

posted @ 2013-11-18 17:42 wyx 阅读(610) | 评论 (0)编辑 收藏

用hibernate插入数据保证插入数据ID同步 ,插入之后返回对象

public FDataReport addFDataReport(FDataReport datareport);//数据新录入返回对象,对应的就会把ID也返回

posted @ 2013-11-04 17:43 wyx 阅读(244) | 评论 (0)编辑 收藏

关于登录界面 记住用户名和密码的一段代码

Cookie cookies[]=request.getCookies();
    Cookie stCookie=null;
    String password=null;
    String passwordvalue=null;
    String usernamevalue=null;
    String cookiename = null;
    String nameandpassword[]=new String[3];
    if (cookies != null) {
   for (int i = 0; i < cookies.length; i++) {
    stCookie = cookies[i];
    cookiename = stCookie.getName();
    if (cookiename!=null && cookiename.equalsIgnoreCase("db_password")) {
     passwordvalue = stCookie.getValue();
     password = passwordvalue;//.substring(8, passwordvalue.length()-3);
     nameandpassword[1] = password.trim();
    }
    if (cookiename!=null && cookiename.equalsIgnoreCase("db_username")) {
     usernamevalue = stCookie.getValue();
     nameandpassword[0] = usernamevalue.trim();
    }
    }
 }





<body>
<p>
       <label for="LoginName">
        用户名 / 邮箱:
       </label>
       <input class="text" type="text" id="LoginName" name="LoginName"
        value="<%=nameandpassword[0]==null?"":nameandpassword[0] %>" />
      </p>
      <p>
       <label for="Password">
        密码:
       </label>
       <input class="text" type="password" value="<%=nameandpassword[1]==null?"":nameandpassword[1] %>" name="Password" id="Password" />
      </p>


</body>

posted @ 2013-11-01 15:08 wyx 阅读(299) | 评论 (0)编辑 收藏

form表单提交两次原因

昨天做用户注册,添加用户时候总是提交两次
最后才找到原因 提交表单的按钮就是设置成button的了 但是名称是submitButton也不可以 所以修改下按钮名称就可以了!!!
⊙﹏⊙b汗

posted @ 2013-10-18 09:21 wyx 阅读(416) | 评论 (0)编辑 收藏

关于安全问题——用户中心

1.当用户操作用户中心的信息,编码获取用户对象应该是通过该用户登录保存的session或者cookie获得,
而不是通过用户ID获得(否则当有人知道通过ID传值,容易轻易修改掉其他用户的信息)

2.前台下载也需要通过后台处理 放置业内人士知道下载文件真实地址,获得大量数据信息

posted @ 2013-09-04 17:13 wyx 阅读(195) | 评论 (0)编辑 收藏

FCKeditor 取值

《转自http://blog.sina.com.cn/s/blog_5f66526e0100kf6b.html

主要步骤:

第一步:导入需要的js文件(根据实际情况修改相应路径)
<script src="js/jquery.js" type=text/javascript></script>   
<script src="fckeditor/fckeditor.js" type="text/javascript"></script>
第二步:初始化(根据实际情况修改相应路径)   

sBasePath    = '/duotunkf/fckeditor/' ;#编辑器所在文件夹;
oFCKeditor    = new FCKeditor('content') ;
oFCKeditor.BasePath = sBasePath ;
oFCKeditor.Value = 'test' ;
oFCKeditor.ToolbarSet = 'Basic' ;
oFCKeditor.Create() ;

其中content为页面你所绑定的textArea的id或name

第三步:取值

var oEditor = FCKeditorAPI.GetInstance('content');  
editorValue = oEditor.GetHTML();  
第四步:赋值(更新的时候先把原有的值赋给textarea)

var oEditor = FCKeditorAPI.GetInstance('content');  
oEditor.SetHTML("value"); 

 

下面是本人写的一个赋值测试程序,供大家参考。源码如下:

<html>
 <head>

     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <script src="js/jquery-1.3.2.min.js"></script>
        <script src="fckeditor/fckeditor.js"></script>
        <script>
        $(document).ready(function(){
          $("#test").click(function(){
    var oEditor = FCKeditorAPI.GetInstance('content');  
    oEditor.SetHTML($("#test option:selected" ).text());
    });
  });
        </script>
 </head>
 <body>
  
  <form action="" method="post">
        <script>
            sBasePath    = '/duotunkf/fckeditor/' ;#编辑器所在文件夹;
            oFCKeditor   = new FCKeditor('content') ;
            oFCKeditor.BasePath = sBasePath ;
            oFCKeditor.Value = 'test' ;
            oFCKeditor.ToolbarSet = 'Basic' ;
            oFCKeditor.Create() ;
  </script>
   <br>
            <label for="test">
      <select name="test" size="4" id="test">
        <option value="1">i.点击这里改变编辑器的值</option>
        <option value="2">ii.点击这里改变编辑器的值</option>
        <option value="3">iii.点击这里改变编辑器的值</option>
           </select>
          </label>
  </form>
 </body>
</html>


posted @ 2013-07-31 14:19 wyx 阅读(171) | 评论 (0)编辑 收藏

关于数据表建设的int 和 number varchar和nvarchar的区别


提交了,刚才修正了一些问题;一主键需要设置number类型同时告诉扩充到10
管华(管华) 10:44:15
你刚才是int类型,,int最大是到6万多吧,,如果你设置这个,意味着到时你到6万多的会员后,系统出问题,插入不进去了,到时你还得改;
管华(管华) 10:45:46
第二,你用的是字符VARCHAR2类型,这个;类型在oracle里不太好,会持久化占用一部分空间,比如你设置的VARCHAR2(1000),他不管你里面有没有数据,都会占用这1000个字符的空间;因此需要改为NVARCHAR2 ,他是自适应,当你没存储值,他不占据空间


另外根据有些字段,比如人名  name  NVARCHAR2(20)分配20个字符就可了,分配500个,会浪费多余的空间同时使得系统慢碎片多;因此根据实际情况,酌情分配

posted @ 2013-07-12 10:49 wyx 阅读(318) | 评论 (0)编辑 收藏

sql语句特殊字符处理

update tc_report t set xlsfile='ChinaLivestock'||chr(38)||'FeedWeeklyMarketReport20130703.doc' where t.xlsfile like 'China Livestock & Feed Weekly Market Report 20130703%'

posted @ 2013-07-04 10:36 wyx 阅读(262) | 评论 (0)编辑 收藏

Tomcat修改文件重启问题

将tomcat下的bin\startup.bat下的文件打开后,最下面有一句话  call "%EXECUTABLE%" jpda start %CMD_LINE_ARGS%,,复制我这个替换你那个,保存后,即可实现不重启就编译java

posted @ 2013-07-01 11:32 wyx 阅读(171) | 评论 (0)编辑 收藏

JavaBean中打印信息到JSP页面

http://blog.csdn.net/sclxf/article/details/4654080

posted @ 2013-05-16 17:47 wyx 阅读(154) | 评论 (0)编辑 收藏

JS 获得系统当前时间和未来一周时间

例子:

function getDate(day){
   var zdate=new Date();
   var sdate=zdate.getTime()-(1*24*60*60*1000);
   var edate=new Date(sdate-(day*24*60*60*1000)).format("yyyy-MM-dd");
   return edate;
}

 function changevalue(obj){
       alert(obj);
       var a = getDate(+7);
       var b = getDate(+31);
       if(obj=="8"){
       document.getElementById("enddate").value=b;
       }else{
       document.getElementById("enddate").value=a;
       }
 }

posted @ 2013-05-08 15:54 wyx 阅读(374) | 评论 (0)编辑 收藏

转换PDF遇到的问题java.lang.UnsatisfiedLinkError: no jcom in java.library.path

java.lang.UnsatisfiedLinkError: no jcom in java.library.path
将 jcom.dll 文件放在  C:\WINDOWS\system32 和jdk的bin   目录下

posted @ 2013-04-10 16:14 wyx 阅读(416) | 评论 (0)编辑 收藏

BUG 调试 加入断点但是跳转时候没有走

设置问题  Debug model选中

posted @ 2013-04-03 15:34 wyx 阅读(194) | 评论 (0)编辑 收藏

投研项目 文档 总结

1.下载模块:年鉴、研究报告、企业榜单和行业数据(需要权限控制)
2.FTP使用:

posted @ 2013-03-27 11:09 wyx 阅读(248) | 评论 (0)编辑 收藏

2013-03-13 项目开发 总结 连载记录

1.针对不同类型跳转不同的action方法 除了使用JS以外  还可以 使用参数获得参数例如method=....不同值来跳转像不同的方法
例子:分国别 (method="showCountryList")  分地区(method="showAreaList")  
        后台 String method = request.getParameter("method");
             request.setAttribute("method", method);
    if (method != null && method.equals("showCountryList")) {
     return showCountryList(map, form, request, response);//分国别
   } else if (method != null && method.equals("showAreaList")) {
     return showAreaList(map, form, request, response);//分地区
   }
2.Jsp........记得使用IFram嵌套
<iframe width="100%" height="800" class="share_self"  frameborder="0" scrolling="no" src="/tyreportAction.do?method=lookReportInfo&bid=${record.bid } "></iframe>
 总结:思维要活跃些  往往一个问题有很多种解决方法的

posted @ 2013-03-13 09:38 wyx 阅读(168) | 评论 (0)编辑 收藏

大文本值CLOB取值 和 存值

存值
 Clob  organdetail =Hibernate.createClob(request.getParameter("organdetail").equals("")?"":request.getParameter("organdetail").trim());// 机构简介
   取值 显示JSP
<%=ToolsCommon.Clob2String(institutions.getOrgandetail())==null?"":ToolsCommon.Clob2String(institutions.getOrgandetail())%>


 public static String Clob2String(java.sql.Clob clob) {
  String s1 = "";
  char ac[] = new char[200];

  if (clob == null)
   return null;
  java.io.Reader reader = null;
  int i;
  try {
   reader = clob.getCharacterStream();
   while ((i = reader.read(ac, 0, 200)) != -1)
    s1 = s1 + new String(ac, 0, i);
  } catch (Exception exception1) {
   // throw new java.sql.SQLException(exception1.getMessage());
   System.out.println(exception1.toString());
  }

  finally {
   try {
    reader.close();
   } catch (Exception _ex) {
   }
  }
  return s1;

 }

posted @ 2013-02-28 10:20 wyx 阅读(356) | 评论 (0)编辑 收藏

Java 删除文件夹 和 文件 集合

《此文拷贝自http://kxjhlele.iteye.com/blog/323657

1,验证传入路径是否为正确的路径名(Windows系统,其他系统未使用)


// 验证字符串是否为正确路径名的正则表达式
private static String matches = "[A-Za-z]:\\\\[^:?\"><*]*";
// 通过 sPath.matches(matches) 方法的返回值判断是否正确
// sPath 为路径字符串

2,通用的文件夹或文件删除方法,直接调用此方法,即可实现删除文件夹或文件,包括文件夹下的所有文件


    /**
     *  根据路径删除指定的目录或文件,无论存在与否
     *@param sPath  要删除的目录或文件
     *@return 删除成功返回 true,否则返回 false。
     */
    public boolean DeleteFolder(String sPath) {
        flag = false;
        file = new File(sPath);
        // 判断目录或文件是否存在
        if (!file.exists()) {  // 不存在返回 false
            return flag;
        } else {
            // 判断是否为文件
            if (file.isFile()) {  // 为文件时调用删除文件方法
                return deleteFile(sPath);
            } else {  // 为目录时调用删除目录方法
                return deleteDirectory(sPath);
            }
        }
    }

3,实现删除文件的方法,

    /**
     * 删除单个文件
     * @param   sPath    被删除文件的文件名
     * @return 单个文件删除成功返回true,否则返回false
     */
    public boolean deleteFile(String sPath) {
        flag = false;
        file = new File(sPath);
        // 路径为文件且不为空则进行删除
        if (file.isFile() && file.exists()) {
            file.delete();
            flag = true;
        }
        return flag;
    }

4,实现删除文件夹的方法,

    /**
     * 删除目录(文件夹)以及目录下的文件
     * @param   sPath 被删除目录的文件路径
     * @return  目录删除成功返回true,否则返回false
     */
    public boolean deleteDirectory(String sPath) {
        //如果sPath不以文件分隔符结尾,自动添加文件分隔符
        if (!sPath.endsWith(File.separator)) {
            sPath = sPath + File.separator;
        }
        File dirFile = new File(sPath);
        //如果dir对应的文件不存在,或者不是一个目录,则退出
        if (!dirFile.exists() || !dirFile.isDirectory()) {
            return false;
        }
        flag = true;
        //删除文件夹下的所有文件(包括子目录)
        File[] files = dirFile.listFiles();
        for (int i = 0; i < files.length; i++) {
            //删除子文件
            if (files[i].isFile()) {
                flag = deleteFile(files[i].getAbsolutePath());
                if (!flag) break;
            } //删除子目录
            else {
                flag = deleteDirectory(files[i].getAbsolutePath());
                if (!flag) break;
            }
        }
        if (!flag) return false;
        //删除当前目录
        if (dirFile.delete()) {
            return true;
        } else {
            return false;
        }
    }

5,main() 方法


    public static void main(String[] args) {

        HandleFileClass hfc = new HandleFileClass();
        String path = "D:\\Abc\\123\\Ab1";
        boolean result = hfc.CreateFolder(path);
        System.out.println(result);
        path = "D:\\Abc\\124";
        result = hfc.DeleteFolder(path);
        System.out.println(result);

    }


main() 方法只是做了一个简单的测试,建立文件夹和文件都是本地建立,情况考虑的应该很全面了,包括文件夹包含文件夹、文件。文件的不同情况…………

 

实现没有问题,可以正确删除文件夹和文件。

 

对于其他类型文件的操作继续学习…………




posted @ 2013-01-18 15:58 wyx 阅读(295) | 评论 (0)编辑 收藏

JFreechar

http://www.blogjava.net/amigoxie/archive/2007/09/30/149765.html

posted @ 2012-12-26 15:51 wyx 阅读(182) | 评论 (0)编辑 收藏

orcle修改属性字段 并且保留原有值

1.原字段类型是字符串 使用“||”连接
update table1 set num = substr(num,0,instr(num,'-'))||(substr(num,instr(num,'-')+1) +9) 
2.原字段是数字 使用+连接
UPDATE table1SET num = num+10 
3.截取 update tc_report t set xlsfile=substr(xlsfile,6) where xlsfile like '%uku\%'

posted @ 2012-11-12 10:20 wyx 阅读(318) | 评论 (0)编辑 收藏

form表单 修改 多选框默认选中

1.放到HashMap中
  String varsort=exp.getVarsort();
   String vars[]=null;
   HashSet setvar = new HashSet();
   if(varsort!=null&&!varsort.trim().equals("")){
    vars=varsort.substring(0,varsort.length()-1).split(",");
    for(int i=0;i<vars.length;i++){
     setvar.add(vars[i].trim());
    }
   }
2. contains比较是否包含
<% if(varsorts!=null&&varsorts.size()>0){
           for(int j=0;j<varsorts.size();j++){
            TDictionarys td=varsorts.get(j);
            %>
         <input type="checkbox" value="<%=td.getDataid() %>" <%if(setvar.contains(String.valueOf(td.getDataid()).trim())){out.print("checked");} %> onclick="getBreeds()" name="varsort" id="varsort" />
         <label for="checkbox" class="font12">
         <%=td.getName() %>
            </label>
            <%
           }
          }
         %>
        

posted @ 2012-09-21 18:03 wyx 阅读(1317) | 评论 (1)编辑 收藏

页面级缓存处理

前提  列表走了数据库查询
1.引入架包  <%@ taglib uri="oscache" prefix="cache"%>
2.包含要缓存的部分
<cache:cache key="dbnewscache" time="3600">  
        <%List<Article> list=new CmsByMysql().getNews(); %>
          <c:forEach var="cu" items="<%=list%>">
               <li>
          <a href="${cu.url}">${cu.titleContent} </a>
            </li>
          </c:forEach>
</cache:cache>

posted @ 2012-09-21 17:25 wyx 阅读(223) | 评论 (0)编辑 收藏

Ifram 父子页面 JS调用

<iframe marginwidth="0" framespacing="0" marginheight="0" frameborder="0"
name="uploadframe" id="uploadframe" src="c.html" scrolling="no" width="100" height="100" ></iframe>
如想在c.html 中写一些代码去改变parent.html 中的一些内容,以下代码可作为参考:

1、parent.window.frames 可返回parent.html 中所有的iframe;返回结果应该是一个数组,用parent.window.frames[iframeId]可得到iframeId;

2、用parent.document.getElementById('xxxx')可得到父里的xxxx,并改变相应的值,例如:parent.document.getElementById('xxxx').className = 'test';

3、如果我想在父中再创建一个元素,直接用parent.appendChild(yyyy)在firefox中是可以的,但在IE(最起码IE6)是不行的; 所以,要把创建这个动作放在父中来完成,在子中调用;

 parent.document.getElementById("pinming").innerHTML = retText2;

posted @ 2012-07-24 15:29 wyx 阅读(709) | 评论 (0)编辑 收藏

jquery目录树 js实现 目录数插件

2011-07-13 10:07

jQuery 目录树插件介绍——ligerTree

 

 

一,简介 

ligerTree的功能列表:

1,支持本地数据和服务器数据(配置data或者url)

2,支持原生html生成Tree

3,支持动态获取增加/修改/删除节点

4,支持大部分常见的事件

5,支持获取选中行等常见的接口方法

 

二,第一个例子

引入库文件

遵循LigerUI系列插件的设计原则(插件尽量单独),ligerTree是一个单独的插件,也就是说只需要引入plugins/ligerTree.js和样式css文件就可以使用(当然必须先引入jQuery),在这个例子中,我把tree用到的样式和图片分离了出来,有兴趣的朋友可以下载来看看

  

<script src="lib/jquery/jquery-1.3.2.min.js" type="text/javascript"></script>
<link href="lib/ligerUI/skins/Aqua/css/ligerui-tree.css" rel="stylesheet" type="text/css"/>
<script src="lib/ligerUI/js/plugins/ligerTree.js" type="text/javascript"></script>

加入HTML

  

<ul id="tree1">
<li>
<span>节点1</span>
<ul>
<li>
<span>节点1.1</span>
<ul>
<li><span>节点1.1.1</span></li>
<li><span>节点1.1.2</span></li>
</ul>
</li>
<li><span>节点1.2</span></li>
</ul>
</li>
</ul>

调用ligerTree

<table style="margin-top: 0px !important; margin-right: 0px !important; margin-bottom: 0px !important; margin-left: 0px !important; padding-top: 0px !important; padding-right: 0px !important; padding-bottom: 0px !important; padding-left: 0px !important; border-top-width: 0px !important; border-right-width: 0px !important; border-bottom-width: 0px !important; border-left-width: 0px !important; border-style: initial !important; border-color: initial !important; outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; background-image: none !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: initial !important; text-align: left !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; font-weight: normal !important; font-style: normal !important; font-size: 1em !important; min-height: inherit !important; border-collapse: collapse !important; background-position: initial initial !important; background-repeat: initial initial !important; "><td style="font-size: 1em !important; margin-top: 0px !important; margin-right: 0px !important; margin-bottom: 0px !important; margin-left: 0px !important; padding-top: 0px !important; padding-right: 0px !important; padding-bottom: 0px !important; padding-left: 0.5em !important; border-top-width: 0px !important; border-right-width: 0px !important; border-bottom-width: 0px !important; border-left-width: initial !important; border-style: initial !important; border-color: initial !important; outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; background-image: none !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: initial !important; text-align: left !important; float: none !important; vertical-align: top !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; font-weight: normal !important; font-style: normal !important; min-height: inherit !important; border-left-style: none !important; border-left-color: initial !important; color: rgb(0, 0, 0) !important; background-position: initial initial !important; background-repeat: initial initial !important; ">$("#tree1").ligerTree();

效果图

三,常用场景

场景一:不使用复选框: 

$("#tree2").ligerTree({ checkbox: false });

场景二:不使用复习框和图标: 

$("#tree3").ligerTree({ checkbox: false, parentIcon: null, childIcon: null });

效果如图:



append(parentNode, newdata)增加节点集合clear()清空collapseAll()全部节点都折叠demotion(treenode)降级为叶节点级别expandAll()全部节点都展开getChecked()获取选择的行(复选框)getData()获取树的数据源getParentTreeItem(treenode, level)获取父节点getSelected()获取选择的行hasChildren(treenode)是否包含子节点 loadData(node, url, param)加载数据remove(node)删除节点upgrade(treenode)升级为父节点级别

posted @ 2012-07-04 16:59 wyx 阅读(2082) | 评论 (1)编辑 收藏

读取 文本 文件内容 FileInputStream 乱码处理

  StringBuffer content = new StringBuffer();
//  FileInputStream fis = null;
//  byte[] b = new byte[2048];
//  try {
//    if(lang!=null&&lang.trim().equals("10")){
//     fis = new FileInputStream(passwordTemplatePath);
//     }else if(lang!=null&&lang.trim().equals("20")){
//      fis = new FileInputStream(passwordTemplateEnPath);
//     }else if(lang!=null&&lang.trim().equals("30")){
//      fis = new FileInputStream(passwordTemplateChinaEnPath);
//     }
//     int m = 0;
//   while ((m = fis.read(b)) != -1) {
//    content.append(new String(b, 0, m));
//   }
//passwordTemplatePath 文本 文件地址
  BufferedReader br = null;
  try {
    if(lang!=null&&lang.trim().equals("10")){
         br =  new BufferedReader(new InputStreamReader(new FileInputStream(passwordTemplatePath), "utf-8"));
      }else if(lang!=null&&lang.trim().equals("20")){
       br =  new BufferedReader(new InputStreamReader(new FileInputStream(passwordTemplateEnPath), "utf-8"));
     }else if(lang!=null&&lang.trim().equals("30")){
        br =  new BufferedReader(new InputStreamReader(new FileInputStream(passwordTemplateChinaEnPath), "utf-8"));
      }
    String s = null;
    while ((s = br.readLine()) != null) {
    content.append(s);
   }
  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   try {
    br.close();
   } catch (IOException e) {
    e.printStackTrace();
   }
  }

posted @ 2012-06-26 17:15 wyx 阅读(2088) | 评论 (2)编辑 收藏

线程等待问题处理

class MyThread implements Runnable {
@Override
public void run() {
  System.out.println("1、进入run()方法休眠");
  try {
   System.out.println("2、线程休眠20秒");
   Thread.sleep(20000);//这里休眠20秒
   System.out.println("3、线程正常休眠完毕");
  } catch (InterruptedException e) {
   System.out.println("4、线程发生异常休眠被中断");
   return;//返回方法调用处
  }
  System.out.println("5、线程正常结束run()方法体");
}
}
public class InterruptDemo {

public static void main(String[] args) {
  MyThread mt = new MyThread();
  Thread t = new Thread(mt,"线程A");
  t.start();//启动线程
//========================================================
  try {
   Thread.sleep(2000);  //保证线程至少执行2秒
  } catch (InterruptedException e) {
   e.printStackTrace();
  }
//========================================================
  t.interrupt();//中断线程
}
}

posted @ 2012-06-21 15:21 wyx 阅读(189) | 评论 (0)编辑 收藏

"Mon Dec 28 00:00:00 CST 2008"的格式字符串转换 yyyy-MM-dd 格式

public static void main(String[] args)
 {
   try {
      java.util.Date date;
      // 首先设置"Mon Dec 28 00:00:00 CST 2008"的格式,用来将其转化为Date对象
      DateFormat df = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.US);

      //将已有的时间字符串转化为Date对象
      date = df.parse("Tue Jun 19 00:00:00 CST 2012");// 那天是周一
      // 创建所需的格式
      df = new SimpleDateFormat("yyyy-MM-dd");
      String str = df.format(date);// 获得格式化后的日期字符串
      System.err.println(str);// 打印最终结果
     } catch (Exception e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
     }


 }

posted @ 2012-06-19 16:12 wyx 阅读(6928) | 评论 (1)编辑 收藏

JAVA开发者最常去的25个英文网站 (转载http://handawei.iteye.com/blog/675034)

  • http://www.infoq.com/ - Info IT新闻
  • http://www.apache.org/ - Apache基金会
  • http://www.springsource.org/ - 广大Java开发者喜爱的Spring
  • http://www.hibernate.org/ - 开源ORM框架
  • http://sourceforge.net/ - 开源技术的集结地
  • http://www.javaalmanac.com – Java开发者年鉴一书的在线版本. 要想快速查到某种Java技巧的用法及示例代码, 这是一个不错的去处.
  • http://www.onjava.com – O’Reilly的Java网站. 每周都有新文章.
  • http://java.sun.com – 官方的Java开发者网站 – 每周都有新文章发表.
  • http://www.developer.com/java – 由Gamelan.com 维护的Java技术文章网站.
  • http://www.java.net – Sun公司维护的一个Java社区网站.
  • http://www.builder.com – Cnet的Builder.com网站 – 所有的技术文章, 以Java为主.
  • http://www.ibm.com/developerworks/java – IBM的Developerworks技术网站; 这是其中的Java技术主页.
  • http://www.javaworld.com – 最早的一个Java站点. 每周更新Java技术文章.
  • http://www.devx.com/java – DevX维护的一个Java技术文章网站.
  • http://www.fawcette.com/javapro – JavaPro在线杂志网站.
  • http://www.sys-con.com/java – Java Developers Journal的在线杂志网站.
  • http://www.javadesktop.org – 位于Java.net的一个Java桌面技术社区网站.
  • http://www.theserverside.com – 这是一个讨论所有Java服务器端技术的网站.
  • http://www.jars.com – 提供Java评论服务. 包括各种framework和应用程序.
  • http://www.jguru.com – 一个非常棒的采用Q&A形式的Java技术资源社区.
  • http://www.javaranch.com – 一个论坛,得到Java问题答案的地方,初学者的好去处。
  • http://www.ibiblio.org/javafaq/javafaq.html – comp.lang.java的FAQ站点 – 收集了来自comp.lang.java新闻组的问题和答案的分类目录.
  • http://java.sun.com/docs/books/tutorial/ – 来自SUN公司的官方Java指南 – 对于了解几乎所有的java技术特性非常有帮助.
  • http://www.javablogs.com – 互联网上最活跃的一个Java Blog网站.
  • http://java.about.com/ – 来自About.com的Java新闻和技术文章网站.
  • posted @ 2012-06-15 15:44 wyx 阅读(198) | 评论 (0)编辑 收藏

    EL表达式处理字符串 是否 包含 某字符串 截取 拆分...............

    JSP页面页头添加
    <%@ taglib uri="/WEB-INF/taglib/c.tld" prefix="c"%>
    <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>  两个标签
    页面内容如下: 

    <c:if test="${fn:contains(record.name,'样例')==false}">
                                     <%
             if ((f != null && f.trim().equals("0"))&&name!=null&&!name.trim().equals("免费报告")) {
            %><a
             href="javascript:void(0);alert('很抱歉,您无权访问!如需访问请购买产品或联系管理员...');">
             ${record.name} </a>
            <%
             } else {
            %>
            <a
             href="/tcreportAction.do?method=lookReportInfo&bid=${record.bid } ">${record.name}</a>
            <%
             }
            %>
             </c:if>
               <c:if test="${fn:contains(record.name,'样例')}">
                                       <a
             href="/tcreportAction.do?method=lookReportInfo&bid=${record.bid } ">${record.name}</a>
           
                                     </c:if>



    ${wjcd.lrsj}原来得到的是如2006-11-12 11:22:22.0

    ${fn:substring(wjcd.lrsj, 0, 16)}

    使用functions函数来获取list的长度

    ${fn:length(list)}

     

     

     

    1. fn:contains(string, substring)   
    2. 假如参数string中包含参数substring,返回true   
    3.   
    4. fn:containsIgnoreCase(string, substring)   
    5. 假如参数string中包含参数substring(忽略大小写),返回true   
    6.   
    7. fn:endsWith(string, suffix)   
    8. 假如参数 string 以参数suffix结尾,返回true   
    9.   
    10. fn:escapeXml(string)   
    11. 将有非凡意义的XML (和HTML)转换为对应的XML character entity code,并返回   
    12.   
    13. fn:indexOf(string, substring)   
    14. 返回参数substring在参数string中第一次出现的位置   
    15.   
    16. fn:join(array, separator)   
    17. 将一个给定的数组array用给定的间隔符separator串在一起,组成一个新的字符串并返回。   
    18.   
    19. fn:length(item)   
    20. 返回参数item中包含元素的数量。参数Item类型是数组、collection或者String。假如是String类型,返回值是String中的字符数。   
    21.   
    22. fn:replace(string, before, after)   
    23. 返回一个String对象。用参数after字符串替换参数string中所有出现参数before字符串的地方,并返回替换后的结果   
    24.   
    25. fn:split(string, separator)   
    26. 返回一个数组,以参数separator 为分割符分割参数string,分割后的每一部分就是数组的一个元素   
    27.   
    28. fn:startsWith(string, prefix)   
    29. 假如参数string以参数prefix开头,返回true   
    30.   
    31. fn:substring(string, begin, end)   
    32. 返回参数string部分字符串, 从参数begin开始到参数end位置,包括end位置的字符   
    33.   
    34. fn:substringAfter(string, substring)   
    35. 返回参数substring在参数string中后面的那一部分字符串   
    36.   
    37. fn:substringBefore(string, substring)   
    38. 返回参数substring在参数string中前面的那一部分字符串   
    39.   
    40. fn:toLowerCase(string)   
    41. 将参数string所有的字符变为小写,并将其返回   
    42.   
    43. fn:toUpperCase(string)   
    44. 将参数string所有的字符变为大写,并将其返回   
    45.   
    46. fn:trim(string)   
    47. 去除参数string 首尾的空格,并将其返回 


    截取字符串!使用!

     
    <c:if test="${fn:length(onebeans.info)>100 }">${ fn:substring( onebeans.info ,0,100)} ...</c:if>
     <c:if test="${fn:length(onebeans.info)<=100 }">${  onebeans.info }</c:if>


    posted @ 2012-06-14 14:38 wyx 阅读(29438) | 评论 (0)编辑 收藏

    Enter回车 键盘事件 终止提交表单方法 终止执行submit

    终止执行submit
    <form name="myf" action="/....."> 
    <input name="pmcode" id="pmcode" value="<%=pmcode%>"
                type="text" class="shuihao" onkeydown="if(event.keyCode==13){event.keyCode = 9 ;searchCodes();return false;}" size="20" maxlength="20" />
    </form>
     当回车的时候 将键盘码变成别的  例如 If( event.keyCode == 13) event.keyCode = 9 之类。

    posted @ 2012-05-17 11:20 wyx 阅读(284) | 评论 (0)编辑 收藏

    js传以 0 开头的值问题解决

      msg+="<li id=\""+codes[i].value+"\" name=\""+codes[i].value+"\" ><INPUT class=\"ac\" onclick=\"javascript:nextSetcode('"+codes[i].value+"');oper('"+codes[i].value+"');\" type=\"button\" name=\"codes\" value=\""+codes[i].value+"\" /></li>";
    动态参数据 JS方法加 单引号  方法如上

    posted @ 2012-05-11 10:37 wyx 阅读(909) | 评论 (0)编辑 收藏

    JSP中实现添加一行,删除一行操作

    <%@ page language="java" import="java.util.*" pageEncoding="GBK"%>

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <SCRIPT type="text/javascript">
    function numberCells()
    {
        var count=0;
        for (i=0; i < document.all.Tab.rows.length; i++)
        {
            for (j=0; j < document.all.Tab.rows(i).cells.length; j++)
            {
                document.all.Tab.rows(i).cells(j).innerText = count;
                count++;
            }
        }
    }

    function tb_addnew()
    {
    var ls_t=document.all("Tab")
    maxcell=ls_t.rows(0).cells.length;
    mynewrow = ls_t.insertRow();
        for(i=0;i <maxcell;i++)
        {
    mynewcell=mynewrow.insertCell();
    mynewcell.innerText="a"+i;

        }
    }

    function tb_delete()
    {
    var ls_t=document.all("Tab");

    ls_t.deleteRow() ;
    }

    </SCRIPT>
    <html>
     <head>
     <script type="text/javascript">
      function addRow(TabId){
      //获取要插入行的表格
      var table = document.getElementByIdx_x(TabId);
       //在最后一行插入一行
       var newRow = table.insertRow(table.rows.length);
        //在该行插入单元格
        var newCel1 = newRow.insertCell(0);
         var newCel2 = newRow.insertCell(1);
         var newCel3 = newRow.insertCell(2);
         newCel1.innerHTML = "第一列";
         newCel2.innerHTML = "第二列";
         newCel3.innerHTML = "第三列";
         }
         </script>
     </head>
     <body>
      <center>
       <table id="Tab" border="1" cellspacing="0" cellpadding="0">
        <tr>
         <td>
          第一列
         </td>
         <td>
          第二列
         </td>
         <td>
          第三列
         </td>
       </table>
       <br>
       <input type="button" onclick="addRow('Tab');" value="插入行"/>
       <input type="button" onclick="tb_delete();" value="删除行"/>
       <input type="button" onclick="tb_addnew();" value="添加行"/>
       <input type="button" onclick="numberCells();" value="显示单元个数"/>
       
      </center>
     </body>
    </html>

    posted @ 2012-03-21 16:52 wyx 阅读(3061) | 评论 (1)编辑 收藏

    FineReport学习(一)

    设置单元格的显示格式 :
      单击单元格右键——样式——自定义 就OK了
    输出保存各种文件格式:导航栏,文件——输出
    http://www.finereport.com/knowledge/faq

    posted @ 2012-03-12 16:06 wyx| 编辑 收藏

    A.jsp iframe B.jsp 子页面调用父页面控件

    parent.function()  就可以通过B.jsp去调用A。jsp的函数

    在B.jsp中通过javascript代码中可以通过parent对象来访问A.jsp中的内容。在A.jsp中写的代码差不多,只要加上"parent."前缀就可以访问了。

    posted @ 2012-03-07 11:26 wyx 阅读(843) | 评论 (1)编辑 收藏

    MyEclipse8.6 编辑JSP页面卡 优化

    步骤:
      1.windows--》preferences
        ——
    2.General——Editors
      ———

    3.File Associations


    将改图的值设为默认的

    posted @ 2012-03-07 09:49 wyx 阅读(1493) | 评论 (0)编辑 收藏

    lucenes 查询

    --分词收索  
    创建
    String name = rs.getString("name");
        if (name != null && !name.equals(""))
         document.add(new Field("name", name, Field.Store.YES,
           Field.Index.UN_TOKENIZED));
    检索
    query = new TermQuery(new Term("name", name));      
      booleanQuery.add(query, BooleanClause.Occur.MUST);

    posted @ 2012-02-22 12:29 wyx 阅读(195) | 评论 (0)编辑 收藏

    java.util.Date和java.sql.Date 转换问题

    SimpleDateFormat bartDateFormat =   new SimpleDateFormat("yyyy-MM-dd");  
          java.sql.Date btime=null;;
          if(cdata.getBegintime()!=null){
          java.util.Date date = bartDateFormat.parse(cdata.getBegintime().toString()); 
            btime= new java.sql.Date(date.getTime());
           
          }else{
           java.util.Date date = bartDateFormat.parse("1970-01-01");
           btime= new java.sql.Date(date.getTime());
          }

    posted @ 2012-01-17 10:59 wyx 阅读(209) | 评论 (0)编辑 收藏

    Mysql插入 关键字 属性设置

    insert into v9_dataen_data (content, `from`, gengxin, danwei, btime, etime)values( '碳酸饮料 价格', 'BOABC','3', 'Yuan',1262275200, 1320076800)
    注意from的设置   `` 符号

    posted @ 2012-01-12 16:58 wyx 阅读(199) | 评论 (0)编辑 收藏

    Lucene搜集 排序 、过滤、分词

    2010-03-24 22:05 859人阅读 评论(0) 收藏 举报

    1.    排序

    1.1. Sort

    public Sort()

    public Sort(String field)

    public Sort(String field,Boolean reverse) //默认为false,降序排序

    public Sort(String[] fields)

    public Sort(SortField field)

    public Sort(SortField[] fields)

    Sort sort=new Sort(bookname);按照“bookname“这个Field值进行降序排序

    Sort sort=new Sort(bookname,true) //升序排序

    Sort sort=new Sort(new String[]{bookNumber,bookname,publishdate});按照三个Field进行排序,但无法指定升序排序,所以用SortField

    1.2. SortField

    public SortField(String field)

    public SortField(String field,Boolean reverse)

    public SortField(String field,int type) //type表示当前Field值的类型

    public SortField(String field,int type,boolean reverse) //默认为false,升序

    Field值的类型:SortField.STRINGSortField.INTSortField.FLOAT

    SortField sf1=new SortField(“bookNumber”,SortField.INT,false);

    SortField sf2=new SortField(“bookname”,SortField.STRING,false);

    1.3. 指定排序的法则

    1.3.1.按照文档的得分降序排序

    Hits hits=searcher.search(query,Sort.RELEVANCE);

    1.3.2.按文档的内部ID升序排序

    Hits hits=searcher.search(query, Sort.INDEXORDER);

    1.3.3.按照一个Field来排序

    Sort sort=new Sort();

    SortField sf=new SortField(“bookNumber”,SortField.INT,false);

    sort.setSort(sf);

    Hits hits=searcher.search(query,sort);

    1.3.4.按照多个Field来排序

    Sort sort=new Sort();

    SortField sf1=new SortField(bookNumber,SortField.INT,false);//升序

    SortField sf2=new SortField(publishdate,SortField.STRING,true);//降序

    sort.setSort(new SortField[]{sf1,sf2});

    Hits hits=searcher.search(query,sort);

    1.3.5.改变SortField中的Locale信息

    String str1=”我”; String str2=”你”;

    Collator co1=Collator.getInstance(Locale.CHINA);

    Collator co2=Collator.getInstance(Locale.JAPAN);

    System.out.println(Locale.CHINA+:+co1.compare(str1str2));

    System.out.println(Locale.JAPAN+”:”+co2.compare(str1,str2));

    输出结果为:

    zh_CN:1

    ja_JP:-1

    所以

    public SortField(String field,Locale locale)

    public SortField(String field,Locale locale,boolean reverse)

    2.    过滤器

    使用public Hits search(Query query,Filter filter)

    1)简单过滤

    Hits hits=searcher.search(query,new AdvancedSecurityFilter());//过滤掉securitylevel0的结果

    2)范围过滤—RangeFilter

    只显示中间的

    RangeFilter filter=new RangeFilter(“publishdate”,”1970-01-01”,”1998-12-31”,true,true”);

    Hits hits=searcher.search(query,filter);

     

    无上边界

    public static RangeFilter More(String fieldname,String lowerTerm)

     

    无下边界

    public static RangeFilter Less(String fieldname,String upperTerm)

    (3)在结果中查询QueryFilter

    RangeQuery q=new RangeQuery(new Term(“publicshdate”,”1970-01-01”),

    new Term(“publishdate”,”1999-01-01”),true);

    QueryFilter filter=new QueryFilter(q);

    Hits hits=searcher.search(query,filter);

    3.    分析器Analysis

    3.1. 自带分析器和过滤器

    Ø         标准过滤器:StandardAnalyzer

    Ø         大小写转换器:LowerCaseFilter

    Ø         忽略词过滤器:StopFilter

    public StopFilter(TokenStream input,String [] stopWords)

    public StopFilter(TokenStream in,String [] stopWords,boolean ignoreCase)

    public StopFilter(TokenStream input,Set stopWords,boolean ignoreCase)

    public StopFilter(TokenStream in, Set stopWords)

    其中,参数TokenStream代表当前正在进行处理的流;String类型的数组代表一个用数组表示的忽略词集合;Set类型的参数与String一样,是用来表示忽略词集合的;boolean表示当与忽略词集合中的词进行匹配时,是否需要忽略大小写。

    Ø         长度过滤器:LengthFilter

    Ø         PerFieldAnalyzerWrapper

    Ø         WhitespaceAnalyzer

    String str="str1 str2 str3";

           StringReader reader=new StringReader(str);

           Analyzer anlyzer=new WhitespaceAnalyzer();

          

           TokenStream ts=anlyzer.tokenStream("", reader);

           Token t=null;

           while( (t=ts.next())!=null ){

               System.out.println(t.termText());

           }

    3.2. 第三方过分析器

    Ø         单字分词

    Ø         二分法:CJKAnalyzer、中科院ICTCLAS分词、JE分词

    Ø         词典分词

    3.2.1.JE分词用法

    3.2.1.1.    示例

    import jeasy.analysis.MMAnalyzer;

    IndexWriter writer = new IndexWriter(INDEX_STORE_PATH, new MMAnalyzer()

    , true);

    String str=" Lucene是一个全文检索引擎的架构,"+

               "提供了完整的查询引擎和索引引擎。Lucene以其方便使用、快" +

               "速实施以及灵活性受到广泛的关注。它可以方便地嵌入到各种应用" +

               "中实现针对应用的全文索引、检索功能,本总结使用lucene--2.3.2";

           MMAnalyzer analyzer=new MMAnalyzer();

           try{

               System.out.println(analyzer.segment(str, "|"));

           }

           catch(Exception e)

           {

               e.printStackTrace();

           }

    输出结果:lucene|一个|全文|检索|引擎|架构|提供|完整|查询|。。。。

    3.2.1.2.    设定正向最大匹配的字数

    MMAnalyzer analyzer=new MMAnalyzer(4);

    3.2.1.3.    添加新词

    MMAnalyzer.addWord(String word);

    MMAnalyzer.addDictionary(Reader reader);

     

    MMAnalyzer analyzer=new MMAnalyzer();

    MMAnalyzer.addWord("迈克尔雷第");

     

    4.    索引的合并

    RAMDirectory RAMDir=new RAMDirectory();

    IndexWriter writer = new IndexWriter(RAMDir, new StandardAnalyzer(), true);//删除原有索引

    IndexWriter writer2=new IndexWriter(FSDirectory.getDirectory(path,true),

    new StandardAnalyzer(), true);

    writer.addDocument(doc1);

    writer2.addDocument(doc2);

    writer.close();

    writer2.addIndexes(new Directory[]{RAMDir});

    writer2.close();

    posted @ 2011-12-30 16:34 wyx 阅读(1371) | 评论 (0)编辑 收藏

    Java方法导出Excel数据

    public ActionForward exportExcel(ActionMapping mapping,
       ActionForm form, HttpServletRequest request,
       HttpServletResponse response) {  
      String sfile = this.getServlet().getServletContext().getRealPath("/upload/")+ File.separator +"data.xls";// 服务器端名字
      String filename ="data.xls";// 客户端名字
      OutputStream os = null;
      WritableWorkbook wwb = null;
      try {
       os = new FileOutputStream(savePath);
       wwb = Workbook.createWorkbook(os);//第一步,创建一个webbook,对应一个Excel文件
       WritableSheet ws = wwb.createSheet("statistics", 0); //第二步,在webbook中添加一个sheet,对应Excel文件中的sheet
           for (int i = 0; i < titleList.size(); i++) {
        String title = (String) titleList.get(i);
        Label titleLabel = new Label(i+1, 0, title);//从第二列   第一行 开始
        ws.addCell(titleLabel);
       }
       for (int i = 0; i < dataList.size(); i++) {
        Map  obj= (HashMap) dataList.get(i);
        String areaName = (String) obj.get("时间");//价格
        Label areaNameLabel = new Label(0, i+1, areaName);
        ws.addCell(areaNameLabel);//第一行的值
        for (int k = 0; k < str.length; k++) {
         if(db != null&& db.trim().equals("0")&&i>2){
          Label label = new Label(1+(k*3), i + 1, "xxx");
          ws.addCell(label);
             label = new Label(2+(k*3), i + 1, "xxx");
          ws.addCell(label);
          label = new Label(3+(k*3), i + 1, "xxx");
          ws.addCell(label); 
         }else{
         String number = (String) obj.get(str[k][0] + "n");//数量
               String sum = (String) obj.get(str[k][0] + "s");//金额
               String cif = (String) obj.get(str[k][0] + "c");//价格
          Label label = new Label(1+(k*3), i + 1, number==null?"0":number);
         ws.addCell(label);
            label = new Label(2+(k*3), i + 1, sum==null?"0":sum);
         ws.addCell(label);
         label = new Label(3+(k*3), i + 1, cif==null?"0":cif);
         ws.addCell(label);
         }
            }
       }
       wwb.write();
      } catch (Exception ex) {
       ex.printStackTrace();
      } finally {
       try {
        wwb.close();
        os.close();
       } catch (Exception e) {
        e.printStackTrace();
       }
      }
    try {
        response.setHeader("Content-Disposition", "attachment;filename="
         + filename);
       response.setContentType("application/vnd.ms-excel");
       BufferedOutputStream out = new BufferedOutputStream(
         new DataOutputStream(response.getOutputStream()));
       BufferedInputStream in = new BufferedInputStream(
         new FileInputStream(sfile));
       byte[] b = new byte[in.available()];
       in.read(b);
       out.write(b);
       out.close();
       in.close();
       } catch (IOException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
      }


    }

    posted @ 2011-12-30 13:45 wyx 阅读(171) | 评论 (0)编辑 收藏

    JSP下载txt 和 Excel两种文件

    jsp 下载txt文件和excel文件

    最近做了个用jsp下载的页面 将代码贴出来 权作记录吧

    1 下载txt文件 

    这个花了我不少时间 原因是用ie下载txt文件时是在页面中直接打开了文件.虽然查了一些资料,也看了别人的解决方案,可还是解决不了问题,最后发现是一个字母惹的祸:少写一个字母 嘿嘿 够马虎!!!

    代码如下:

    OutputStream o=response.getOutputStream();
       byte b[]=new byte[500];
       File fileLoad=new File("e:/test.txt");
        response.setContentType("application/octet-stream");

       response.setHeader("content-disposition","attachment; filename=text.txt");
       long fileLength=fileLoad.length();
       String length1=String.valueOf(fileLength);
       response.setHeader("Content_Length",length1);
       FileInputStream in=new FileInputStream(fileLoad);
       int n;
       while((n=in.read(b))!=-1){
        o.write(b,0,n);
       }
      
       in.close();
       out.clear();
       out = pageContext.pushBody();

    2 下载excel文件 

    跟下载txt文件时的唯一区别是ContentType值的设置不同:

    OutputStream o=response.getOutputStream();
       byte b[]=new byte[500];
       File fileLoad=new File("e:/text.xls");
       response.reset();
      

        response.setContentType("application/vnd.ms-excel");

       response.setHeader("content-disposition","attachment; filename=text.xls");
       long fileLength=fileLoad.length();
       String length1=String.valueOf(fileLength);
       response.setHeader("Content_Length",length1);
       FileInputStream in=new FileInputStream(fileLoad);
       int n;
       while((n=in.read(b))!=-1){
        o.write(b,0,n);
       }
      
       in.close();
       out.clear();
       out = pageContext.pushBody();

     

     

    这两个本来是放在一起的,因为我的页面中需要判断是下载的txt文件还是xls文件  在这里给分开了 需要注意的是,最后两句一定要加上,否则会出现getOutputStream()错误的!!!!

     

     

     

     

     

     

     

     

    实例:

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
        <base href="<%=basePath%>">
        <title>My JSP 'index.jsp' starting page</title>
        <script type="text/javascript">
           function download(filename){
             var url = encodeURI("down2.jsp?filename="+filename);
             window.location.href= url;
           }
        </script>
    </head>

    <body>
    普通测试:
    <a href="javascript:void(0)" onclick="download('a.txt');">Down a.txt</a>  
    中文文件名测试:
    <a href="javascript:void(0)" onclick="download('中文.txt');">Down 中文.txt</a>  
    普通转向:
    <a href="a.txt">down.txt</a>  
    </body>
    </html>

     

    down2.jsp:
    <%@ page language="java" import="java.util.*,java.io.* " pageEncoding="UTF-8"%>
    <%
    request.setCharacterEncoding("utf-8");
    String filename = request.getParameter("filename");
    filename = new String(filename.getBytes("ISO-8859-1"),"UTF-8");
    System.out.println(filename);
    OutputStream o=response.getOutputStream();
    byte b[]=new byte[500];
    /** * 得到文件的当前路径 * @param args */
    String   serverpath=request.getRealPath("\\");
    File fileLoad=new File(serverpath+filename);
    response.setContentType("application/octet-stream");
    response.setHeader("content-disposition","attachment; filename="+filename);
    long fileLength=fileLoad.length();
    String length1=String.valueOf(fileLength);
    response.setHeader("Content_Length",length1);
    FileInputStream in=new FileInputStream(fileLoad);
    int n;
    while((n=in.read(b))!=-1){
       o.write(b,0,n);
    }
    in.close();
    out.clear();
    out = pageContext.pushBody();
    %>

    posted @ 2011-12-21 10:53 wyx 阅读(4808) | 评论 (0)编辑 收藏

    JS导出Excel

     JS导出EXCEL的两种方法

    function method1(tableid) {//整个表格拷贝到EXCEL中
        var curTbl = document.getElementById(tableid);
        var oXL = new ActiveXObject("Excel.Application");
        //创建AX对象excel
        var oWB = oXL.Workbooks.Add();
        //获取workbook对象
            var oSheet = oWB.ActiveSheet;
        //激活当前sheet
        var sel = document.body.createTextRange();
        sel.moveToElementText(curTbl);
        //把表格中的内容移到TextRange中
        sel.select();
        //全选TextRange中内容
        sel.execCommand("Copy");
        //复制TextRange中内容
        oSheet.Paste();
        //粘贴到活动的EXCEL中      
        oXL.Visible = true;
        //设置excel可见属性
    }
    function method2(tableid) //读取表格中每个单元到EXCEL中
    {
        var curTbl = document.getElementById(tableid);
         var oXL = new ActiveXObject("Excel.Application");
         //创建AX对象excel
         var oWB = oXL.Workbooks.Add();
         //获取workbook对象
        var oSheet = oWB.ActiveSheet;
        //激活当前sheet
         var Lenr = curTbl.rows.length;
         //取得表格行数
         for (i = 0; i < Lenr; i++)
         {
             var Lenc = curTbl.rows(i).cells.length;
             //取得每行的列数
             for (j = 0; j < Lenc; j++)
             {
                 oSheet.Cells(i + 1, j + 1).value = curTbl.rows(i).cells(j).innerText;
                 //赋值
             }
         }
         oXL.Visible = true;
         //设置excel可见属性
    }

     

    <input type="button" onclick="javascript:method1('TableExcel');" value="第一种方法导入到EXCEL">
    <input type="button" onclick="javascript:method2('TableExcel');" value="第二种方法导入到EXCEL">

     

    posted @ 2011-12-20 11:27 wyx 阅读(4778) | 评论 (2)编辑 收藏

    分享示例Lucene.NET 2.9版本基本用法

    5. 排序

    通过 SortField 的构造参数,我们可以设置排序字段,排序条件,以及倒排。
    Sort sort = new Sort(new SortField(FieldName, SortField.DOC, false)); IndexSearcher searcher = new IndexSearcher(reader); Hits hits = searcher.Search(query, sort);
    排序对搜索速度影响还是很大的,尽可能不要使用多个排序条件。

    6. 过滤

    使用 Filter 对搜索结果进行过滤,可以获得更小范围内更精确的结果。

    举个例子,我们搜索上架时间在 2005-10-1 到 2005-10-30 之间的商品。
    对于日期时间,我们需要转换一下才能添加到索引库,同时还必须是索引字段。
    // index document.Add(FieldDate, DateField.DateToString(date), Field.Store.YES, Field.Index.UN_TOKENIZED); //... // search Filter filter = new DateFilter(FieldDate, DateTime.Parse("2005-10-1"), DateTime.Parse("2005-10-30")); Hits hits = searcher.Search(query, filter);
    除了日期时间,还可以使用整数。比如搜索价格在 100 ~ 200 之间的商品。
    Lucene.Net NumberTools 对于数字进行了补位处理,如果需要使用浮点数可以自己参考源码进行。
    // index document.Add(new Field(FieldNumber, NumberTools.LongToString((long)price), Field.Store.YES, Field.Index.UN_TOKENIZED)); //... // search Filter filter = new RangeFilter(FieldNumber, NumberTools.LongToString(100L), NumberTools.LongToString(200L), true, true); Hits hits = searcher.Search(query, filter);
    使用 Query 作为过滤条件。
    QueryFilter filter = new QueryFilter(QueryParser.Parse("name2", FieldValue, analyzer));
    我们还可以使用 FilteredQuery 进行多条件过滤。
    Filter filter = new DateFilter(FieldDate, DateTime.Parse("2005-10-10"), DateTime.Parse("2005-10-15")); Filter filter2 = new RangeFilter(FieldNumber, NumberTools.LongToString(11L), NumberTools.LongToString(13L), true, true); Query query = QueryParser.Parse("name*", FieldName, analyzer); query = new FilteredQuery(query, filter); query = new FilteredQuery(query, filter2); IndexSearcher searcher = new IndexSearcher(reader); Hits hits = searcher.Search(query);
    7. 分布搜索

    我们可以使用 MultiReader 或 MultiSearcher 搜索多个索引库。
    MultiReader reader = new MultiReader(new IndexReader[] { IndexReader.Open(@"c:\index"), IndexReader.Open(@"\\server\index") }); IndexSearcher searcher = new IndexSearcher(reader); Hits hits = searcher.Search(query);

    IndexSearcher searcher1 = new IndexSearcher(reader1); IndexSearcher searcher2 = new IndexSearcher(reader2); MultiSearcher searcher = new MultiSearcher(new Searchable[] { searcher1, searcher2 }); Hits hits = searcher.Search(query);
    还可以使用 ParallelMultiSearcher 进行多线程并行搜索。

    8. 合并索引库

    将 directory1 合并到 directory2 中。
    Directory directory1 = FSDirectory.GetDirectory("index1", false); Directory directory2 = FSDirectory.GetDirectory("index2", false); IndexWriter writer = new IndexWriter(directory2, analyzer, false); writer.AddIndexes(new Directory[] { directory }); Console.WriteLine(writer.DocCount()); writer.Close();
    9. 显示搜索语法字符串

    我们组合了很多种搜索条件,或许想看看与其对等的搜索语法串是什么样的。
    BooleanQuery query = new BooleanQuery(); query.Add(query1, true, false); query.Add(query2, true, false); //... Console.WriteLine("Syntax: {0}", query.ToString());
    输出:
    Syntax: +(name:name* value:name*) +number:[0000000000000000b TO 0000000000000000d]

    呵呵,就这么简单。

    10. 操作索引库

    删除 (软删除,仅添加了删除标记。调用 IndexWriter.Optimize() 后真正删除。)
    IndexReader reader = IndexReader.Open(directory); // 删除指定序号(DocId)的 Document。 reader.Delete(123); // 删除包含指定 Term 的 Document。 reader.Delete(new Term(FieldValue, "Hello")); // 恢复软删除。 reader.UndeleteAll(); reader.Close();
    增量更新 (只需将 create 参数设为 false,即可往现有索引库添加新数据。)
    Directory directory = FSDirectory.GetDirectory("index", false); IndexWriter writer = new IndexWriter(directory, analyzer, false); writer.AddDocument(doc1); writer.AddDocument(doc2); writer.Optimize(); writer.Close();
    11. 优化

    批量向 FSDirectory 增加索引时,增大合并因子(mergeFactor )和最小文档合并数(minMergeDocs)有助于提高性能,减少索引时间。
    IndexWriter writer = new IndexWriter(directory, analyzer, true);  writer.maxFieldLength = 1000; // 字段最大长度 writer.mergeFactor = 1000; writer.minMergeDocs = 1000;  for (int i = 0; i < 10000; i++) { // Add Documentes... }  writer.Optimize(); writer.Close();
    文章来自学IT网:http://www.xueit.com/LuceneNet/show-10315-2.aspx


    转自《深入 Lucene 索引机制》

    利用 Lucene,在创建索引的工程中你可以充分利用机器的硬件资源来提高索引的效率。当你需要索引大量的文件时,你会注意到索引过程的瓶颈是在往磁盘上写索引文件的过程中。为了解决这个问题, Lucene 在内存中持有一块缓冲区。但我们如何控制 Lucene 的缓冲区呢?幸运的是,Lucene 的类 IndexWriter 提供了三个参数用来调整缓冲区的大小以及往磁盘上写索引文件的频率。

    1.合并因子 (mergeFactor)

    这个参数决定了在 Lucene 的一个索引块中可以存放多少文档以及把磁盘上的索引块合并成一个大的索引块的频率。比如,如果合并因子的值是 10,那么当内存中的文档数达到 10 的时候所有的文档都必须写到磁盘上的一个新的索引块中。并且,如果磁盘上的索引块的隔数达到 10 的话,这 10 个索引块会被合并成一个新的索引块。这个参数的默认值是 10,如果需要索引的文档数非常多的话这个值将是非常不合适的。对批处理的索引来讲,为这个参数赋一个比较大的值会得到比较好的索引效果。

    2.最小合并文档数 (minMergeDocs)

    这个参数也会影响索引的性能。它决定了内存中的文档数至少达到多少才能将它们写回磁盘。这个参数的默认值是10,如果你有足够的内存,那么将这个值尽量设的比较大一些将会显著的提高索引性能。

    3.最大合并文档数 (maxMergeDocs)

    这个参数决定了一个索引块中的最大的文档数。它的默认值是 Integer.MAX_VALUE,将这个参数设置为比较大的值可以提高索引效率和检索速度,由于该参数的默认值是整型的最大值,所以我们一般不需要改动这个参数。

     

    文章来自学IT网:http://www.xueit.com/LuceneNet/show-10315-2.aspx



    posted @ 2011-12-14 14:05 wyx 阅读(1914) | 评论 (0)编辑 收藏

    Lucence学习记录

     

    一、创建索引 TDictionaryIndex.java 例子

    二、实用Lucene收索

    A.      普通查询

        if (pname != null && !("").equals(pname)) {

                             queryParser = new QueryParser("name", analyzer);

                             query = queryParser.parse(pname);

                             booleanQuery.add(query, BooleanClause.Occur.MUST);

                        }

    B.      In 范围查询

     if(datavarsor.trim().equals("30,22,4,14,12,2,7,15,21,1,6,8,5,28")){

                   datavarsor="30 22 4 14 12 2 7 15 21 1 6 8 5 28";

                  queryParser = new QueryParser("datavarsort", analyzer);

         queryParser.setDefaultOperator(QueryParser.Operator.OR);//

                  query = queryParser.parse(datavarsor);// 多选择产品税号

                  booleanQuery.add(query, BooleanClause.Occur.MUST);

             }

    C.      选择查询 关键字

     if (wd != null && !wd.equals("")) {

                  queryParser = new MultiFieldQueryParser(new String[] {// 查询条件是或的关系。。。

                         "department", "isorno", "filename" }, analyzer);

                  query = queryParser.parse(wd);

                  booleanQuery.add(query, BooleanClause.Occur.MUST);

                  HeighlighterQuery = query;

    D.准确查询

       注意创建索引的时候:

    if (typename != null && !typename.equals(""))

                      document.add(new Field("typename", typename, Field.Store.YES,

                             Field.Index.UN_TOKENIZED));

        查询的时候:

      query = new TermQuery(new Term("typename", typename));     

                  booleanQuery.add(query, BooleanClause.Occur.MUST);

    E.时间排序

        org.apache.lucene.search.Sort sort2 = new org.apache.lucene.search.Sort(new SortField("endtime", SortField.STRING,

                  true));// 完成按照时间来排序

     

               hits = search.search(booleanQuery, null, toIndex,sort2).scoreDocs;

     }

    posted @ 2011-12-09 17:38 wyx 阅读(271) | 评论 (0)编辑 收藏