Thinking

快乐编程,开心生活
posts - 21, comments - 27, trackbacks - 0, articles - -5
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

 1 public   void  doDownLoad(HttpServletRequest request, HttpServletResponse response, 
 2             String absolutePath)  {
 3         
 4          // 设置响应头信息
 5         response.setContentType( " application/octet-stream;charset=UTF-8 " ); 
 6         log.debug( " GET:  "   +  absolutePath);
 7         
 8         String str  =  FilePathParseUtil.getFileNameByPath(absolutePath);
 9          // 调用自定义的编码函数,解决不同浏览器上对汉字编码的处理
10         str  =   this .encodeFileName(request, str) == null ? str: this .encodeFileName(request, str);
11          // 设置response头信息,从而显示正确的文件名,并弹出另存对话框
12         response.setHeader( " Content-Disposition " " attachment; filename= "  
13                  +  str);
14         OutputStream out  =   null ;
15          try {
16              // 从response得到输出流,从而向客户端写出文件
17             out  =  response.getOutputStream();
18         }
catch (IOException e) {
19             log.error( " output stream is null " );
20             e.printStackTrace();
21         }

22          this .doDownLoad(out, absolutePath);
23     }

24     
25      /**
26      * 根据不同浏览器对文件名进行编码
27      *  @param  request 客户端请求
28      *  @param  fileName 文件名
29      *  @return  编码后的文件名
30       */

31      public  String encodeFileName(HttpServletRequest request, String fileName) {   
32         String agent  =  request.getHeader( " USER-AGENT " );
33          try {
34              if  ( null   !=  agent  &&   - 1   !=  agent.indexOf( " MSIE " ))  {   
35                  return  URLEncoder.encode(fileName,  " UTF-8 " );   
36             }
else   if  ( null   !=  agent  &&   - 1   !=  agent.indexOf( " Mozilla " ))  {   
37                  return   " =?UTF-8?B? " +
38                          new  String(
39                                 Base64.encodeBase64(
40                                     fileName.getBytes( " UTF-8 " )
41                                 )
42                         )  +   " ?= " ;   
43             }
  else   {   
44                  return  fileName;   
45             }

46         }
catch (UnsupportedEncodingException e) {
47              return   null ;
48         }

49     }
  

posted @ 2007-02-07 14:32 lixw 阅读(239) | 评论 (0)编辑 收藏

来自telio.be的JS:

 1/* Licence:
 2*   Use this however/wherever you like, just don't blame me if it breaks anything.
 3*
 4* Credit:
 5*   If you're nice, you'll leave this bit:
 6*
 7*   Class by Pierre-Alexandre Losson -- http://www.telio.be/blog
 8*   email : plosson@users.sourceforge.net
 9*/

10function refreshProgress()
11{
12    UploadMonitor.getUploadInfo(updateProgress);
13}

14
15function updateProgress(uploadInfo)
16{
17    if (uploadInfo.inProgress)
18    {
19        document.getElementById('uploadbutton').disabled = true;
20        document.getElementById('file1').disabled = true;
21
22        var fileIndex = uploadInfo.fileIndex;
23
24        var progressPercent = Math.ceil((uploadInfo.bytesRead / uploadInfo.totalSize) * 100);
25
26        document.getElementById('progressBarText').innerHTML = 'upload in progress: ' + progressPercent + '%';
27
28        document.getElementById('progressBarBoxContent').style.width = parseInt(progressPercent * 3.5+ 'px';
29
30        window.setTimeout('refreshProgress()', 1000);
31    }

32    else
33    {
34        document.getElementById('uploadbutton').disabled = false;
35        document.getElementById('file1').disabled = false;
36    }

37
38    return true;
39}

40
41function startProgress()
42{
43    document.getElementById('progressBar').style.display = 'block';
44    document.getElementById('progressBarText').innerHTML = 'upload in progress: 0%';
45    document.getElementById('uploadbutton').disabled = true;
46
47    // wait a little while to make sure the upload has started ..
48    window.setTimeout("refreshProgress()"1500);
49    return true;
50}

51

一个可以有其他页面引用的进度条页面:
 1<%
 2    String path = request.getContextPath();
 3    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
 4%>
 5<script src="<%=basePath%>common/js/upload.js"> </script>
 6<script src="<%=basePath%>dwr/interface/UploadMonitor.js"> </script>
 7<script src="<%=basePath%>dwr/engine.js"> </script>
 8<script src="<%=basePath%>dwr/util.js"> </script>
 9<style type="text/css">
10    body { font: 11px Lucida Grande, Verdana, Arial, Helvetica, sans serif; }
11    #progressBar { padding-top: 5px; }
12    #progressBarBox { width: 350px; height: 20px; border: 1px inset; background: #eee;}
13    #progressBarBoxContent { width: 0; height: 20px; border-right: 1px solid #444; background: #9ACB34; }
14</style>
15
16<div id="progressBar" style="display: none;">
17    <div id="theMeter">
18        <div id="progressBarText"></div>
19        <div id="progressBarBox">
20            <div id="progressBarBoxContent"></div>
21        </div>
22    </div>
23</div>

在dwr.xml 中的配置:

 1<?xml version="1.0" encoding="UTF-8"?>
 2<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" 
 3"http://getahead.ltd.uk/dwr/dwr20.dtd">
 4<dwr>
 5    <allow>
 6        <create creator="new" javascript="UploadMonitor" scope="script">
 7            <param name="class" value="be.telio.mediastore.ui.upload.UploadMonitor"/>
 8        </create>
 9        <convert converter="bean" match="be.telio.mediastore.ui.upload.UploadInfo"/>
10    </allow>
11</dwr>

在web.xml中增加如下对DwrServlet的配置:

 1<servlet>
 2    <servlet-name>dwr-invoker</servlet-name>
 3    <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
 4    <init-param>
 5      <param-name>debug</param-name>
 6      <param-value>false</param-value>
 7    </init-param>
 8    <init-param>
 9      <param-name>pollAndCometEnabled</param-name>
10      <param-value>true</param-value>
11    </init-param>
12    <init-param>
13      <param-name>allowGetForSafariButMakeForgeryEasier</param-name>
14      <param-value>true</param-value>
15    </init-param>
16    <load-on-startup>2</load-on-startup>
17  </servlet>
18
19  <servlet-mapping>
20    <servlet-name>dwr-invoker</servlet-name>
21    <url-pattern>/dwr/*</url-pattern>
22  </servlet-mapping>

posted @ 2007-02-07 14:28 lixw 阅读(3597) | 评论 (1)编辑 收藏

### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### direct messages to file hibernate.log ###
#log4j.appender.file=org.apache.log4j.FileAppender
#log4j.appender.file.File=hibernate.log
#log4j.appender.file.layout=org.apache.log4j.PatternLayout
#log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### set log levels - for more verbose logging change 'info' to 'debug' ###
log4j.rootLogger=info, stdout

#hibernate log level
log4j.logger.org.hibernate=error

#struts log level
#log4j.logger.org.apache.struts=error

#spring log level
#log4j.logger.org.springframework=error

#oscache log level
log4j.logger.com.opensymphony.oscache=error

 

posted @ 2007-02-07 14:19 lixw 阅读(751) | 评论 (0)编辑 收藏

利用spring在同一页面提交多个Form,填充多个FormBean。

http://opensource.atlassian.com/confluence/spring/display/COOK/Forms+-+Multiple+forms+on+the+same+page

posted @ 2007-02-07 09:37 lixw 阅读(486) | 评论 (0)编辑 收藏

昨天看了一天的EJB,才刚刚对EJB的流程有了一点了解,现在总结出来,请大家多多指教:

1、创建自己的Bean(现在我只学习了一个会话Bean的例子),其中包含商务方法的实现;

(2--5的操作可由容器自动完成,如WebLogic中的Build EJB,如果在MyEclipse中,可以在生成Bean的时候选择是用XDoclet自动生成以下接口)

2、创建远程接口(继承自EJBObject),其中包括商务方法的空实现(必须抛出远程异常),客户端通过该接口与EJB对象交互,

    它的具体实现由EJB容器供应商实现,实现的对象就是EJB对象,它拥有对实际Bean的引用;

3、创建Home接口(继承自EJBHome),其中至少包含一个create()方法,这个方法返回EJB对象,并抛出远程异常,

    它的作用相当于EJB对象的生成库;

(4和5是可选的操作,本地用户可以通过这些接口而不是远程接口来调用Bean)

4、创建本地接口(继承自EJBLocalObject),方法跟远程接口中的相当,只是不需要抛出远程异常;

5、创建本地Home接口(继承自EJBLocalHome),方法跟Home接口相当,同样不需要抛出远程异常;

6、如果采用自动生成接口的话,同时会在META-INF生成下生成多个XML配置文件:

  ejb-jar.xml:它是EJB规范中要求的配置,是容器无关的。下面是一个实际配置的例子

 1 < ejb-jar >
 2    < enterprise-beans >
 3
 4 <! -配置会话Bean- >
 5      < session >
 6        < ejb-name > HelloBean </ ejb-name >
 7        < home > bean.HelloHome </ home >
 8        < remote > bean.HelloObject </ remote >
 9        < ejb-class > bean.HelloBean </ ejb-class >
10        < session-type > Stateless </ session-type >
11        < transaction-type > Container </ transaction-type >
12      </ session >
13
14      < entity >
15 <! -配置实体Bean- >
16      </ entity >
17    </ enterprise-beans >
18 </ ejb-jar >
19

 还有一个与特定容器相关的配置文件:

如WebLogic中配置文件为weblogic-ejb-jar.xml,下面是一个实际配置的例子:

1 < weblogic-ejb-jar >
2    < weblogic-enterprise-bean >
3      < ejb-name > HelloBean </ ejb-name >
4      < stateless-session-descriptor >
5      </ stateless-session-descriptor >
6        < jndi-name > ejb.helloJNDI </ jndi-name >
7    </ weblogic-enterprise-bean >
8   < weblogic-ejb-jar >

在Jboss则会有相应的配置文件。

7、现在我们看到我们的Bean、Home接口、EJBObject接口已经与特定的命名绑定;

8、现在客户端要调用Bean中的某个商务方法:

  • 通过JNDI查找到Home对象,获得它的引用;
  • Home对象是EJB对象的生成库,由它创建生成新的EJB对象;
  • 客户端调用EJB对象的商务方法;
  • EJB对象将请求委托给实际的Bean;
  • Bean实现商务方法。

 

posted @ 2007-02-06 17:33 lixw 阅读(628) | 评论 (0)编辑 收藏

仅列出标题
共4页: 上一页 1 2 3 4 下一页