import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.jazzlib.ZipEntry;
import net.sf.jazzlib.ZipOutputStream;
public class BatchDownload extends HttpServlet {
public BatchDownload() { public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("APPLICATION/OCTET-STREAM");
response.setHeader("Content-Disposition","attachment; filename="+this.getZipFilename());
System.out.println("in BatchDownload................");
ZipOutputStream zos = new ZipOutputStream(response.getOutputStream());
File[] files = new File[2];
files[0]=new File("c:/zip/文gA.doc");
files[1]=new File("c:/zip/文gB.doc");
zipFile(files, "", zos);
zos.flush();
zos.close();
}
private void zipFile(File[] subs, String baseName, ZipOutputStream zos) throws IOException {
for (int i=0;i<subs.length;i++) {
File f=subs[i];
zos.putNextEntry(new ZipEntry(baseName + f.getName()));
FileInputStream fis = new FileInputStream(f);
byte[] buffer = new byte[1024];
int r = 0;
while ((r = fis.read(buffer)) != -1) {
zos.write(buffer, 0, r);
}
fis.close();
}
}
private String getZipFilename(){
Date date=new Date();
String s=date.getTime()+".zip";
return s;
}
Hibernate的Lazy初始?:n关系Ӟ必须保证是在同一个Session内部使用q个关系集合Q不然Hiernate抛出异常:org.hibernate.LazyInitializationException: failed to lazily initialize of....
两种处理ҎQ?br />
一、设|lazy=falseQ此Ҏ不再累述?br />
二、用OpenSessionInViewFilterqo器,注意hibernateFilterqo器和struts2qo器在映射时的先后序。同时要配置事物处理Q否则会Dsession处于只读状态而不能做修改、删除的动作?br />
卛_web.xml文g中如下配|:
<!-- Spring ApplicationContext配置文g的加载目录?-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:spring/applicationContext.xml</param-value>
</context-param>
<!-- 解决延迟加蝲的问?-->
<filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
</filter-class>
</filter>
<!-- l承Struts2的FilterDispatcherc,具备GBK{编码设定功能与struts2的actionqo功能?-->
<filter>
<filter-name>struts2</filter-name>
<filter-class>
com.iman.nrms.opm.web.common.FilterDispatcher
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>
<filter>
<filter-name>struts-cleanup</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ActionContextCleanUp
</filter-class>
</filter>
<filter-mapping>
<filter-name>hibernateFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts-cleanup</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Hibernate 允许对关联对象、属性进行gq加载,但是必须保证延迟加蝲的操作限于同一?Hibernate Session 范围之内q行。如?Service 层返回一个启用了延迟加蝲功能的领域对象给 Web 层,?Web 层访问到那些需要gq加载的数据Ӟ׃加蝲领域对象?Hibernate Session 已经关闭Q这些导致gq加载数据的讉K异常。而Spring为我们提供的OpenSessionInViewFilterqo器ؓ我们很好的解决了q个问题。OpenSessionInViewFilter的主要功能是使每个请求过E绑定一?Hibernate SessionQ即使最初的事务已经完成了,也可以在 Web 层进行gq加载的操作。OpenSessionInViewFilter qo器将 Hibernate Session l定到请求线E中Q它自动被 Spring 的事务管理器探测到。所?OpenSessionInViewFilter 适用?Service 层用HibernateTransactionManager ?JtaTransactionManager q行事务理的环境,也可以用于非事务只读的数据操作中?
request-->open session-->打开q接、开始事?->持久操作-->渲染Q关闭连接、sessionQ?->response 其中一些过E省略了Q不是很兛_?/p>
引自Q?a >http://blog.csdn.net/fhwbj/archive/2009/03/25/4022805.aspx
在?/span>JDBC来查询数据库的时候,通常的步骤是Q?/span>
1Q?nbsp;注册驱动E序
2Q?nbsp;获取数据库连?/span>
3Q?nbsp;执行查询语句
4Q?nbsp;关闭q接?/span>
在获得数据库q接后,可以通过getMetaDataQ)Ҏ来获?/span>DatabaseMetaData;然后通过DatabaseMetaData?/span>getPrimaryKeys ()Ҏ来获取主键的信息?/span>
下面是我做的CZE序Q该E序?/span>JBuilder2005Q?/span>oracle8i下通过Q?/span>
import java.sql.*;
import javax.sql.*;
public class TestJDBC {
public TestJDBC() {
}
public static void main(String[] args) throws SQLException {
Connection con = null;
Statement st = null;
ResultSet rst = null;
try{
//注册数据库驱动程?/span>
Class.forName("oracle.jdbc.driver.OracleDriver");
//获取数据库连?/span>
con = DriverManager.getConnection("jdbc:oracle:thin:@10.60.203.80:1521:TestDB","123","123");
//获取主键信息
rst = con.getMetaData().getPrimaryKeys(null,null,"USER");
//打印主键信息
if (!rst.isAfterLast()) {
rst.next();
System.out.println(rst.getString("TABLE_NAME") + " " +
rst.getString("COLUMN_NAME"));
}
}
catch (Exception e){
System.out.println(e.getLocalizedMessage());
}
finally{
try{
//关闭q接
if (rst != null)
rst.close();
if (con != null)
con.close();
}
catch (SQLException e){
throw e;
}
}
}
}
上面的程序中,在获取主键信息的时?/span>,语句
rst = con.getMetaData().getPrimaryKeys(null,null,"USER");
用来获取主键信息。关于该函数的详l信息,请参?/span>JDK的文档。这里要说的是,在测试中发现W三个参敎ͼ数据库表名)是大写敏感的,如果写成user是查不到l果的?br>
引自Q?a href="http://www.aygfsteel.com/afrag/">http://www.aygfsteel.com/afrag/