报getOutputStream() has already been called for this response 这个错误

 getOutputStream() has already been called for this response 这个错误遇到过不少次,网上看到大多不能解决问题。
    下面两点是我自己总结出来的:
    1、在我们应用验证码时,都会用到字节流response.getOutputStream()来将验证码输出,但是jsp页面自己最后会调用字符流JspWriter的out()方法将页面的内容输出。通过查看servlet的API我们可以看到知道,在servlet中不能够同时利用这两个流输出,解决办法将验证码写在servlet中,具体见下面。
    2、相信请求转发( request.getRequestDispacher().forward() )和请求跳转( response.sendRedirect() )的区别大家都知道。其中request.getRequestDispacher().forward() 方法的调用者与被调用者之间共享相同的request对象和response对象,它们属于同一个访问请求和响应过程。JSP页面转译为的_servlet会最后调用releasePageContext()方法( All PageContext objects obtained via this method shall be released by invoking releasePageContext().)释放我们页面所有的实体对象,当我们的调用者有页面输出时,就会抛出这个异常。具体原因也没有弄清楚,各位大侠如果谁知道可以告知一下。其实验证码也是同一个原理,如果我们将验证码的代码写在jsp页面中,因为jsp页面会调用JspWriter的out()方法将内容输出,同时我们的图片又调用了response.getOutputStream()方法因此会抛出这个异常;如果我们将验证码写在servlet中,就不会同时使用两种输出也就不会出错。有时即使调用者页面没有输出,也会抛出这个异常,仔细看jsp转译以后的源码发现输出了换行,因此,我们最好把调用者页面的%>和<%之间换行去掉,把%>和<%直接写在一起。
    另外,如果我们实在要在jsp中用到response.getOutputStream(),比如验证码、jspSmartUpload,我们需要在最后加入如下代码:
        response.reset();
        out.clear();
        out=pageContext.pushBody();

posted @ 2012-09-24 17:33 youngturk 阅读(418) | 评论 (0)编辑 收藏

excel文件下载,数据库字段datafiled检索--JS URL传值给servlet乱码

 

1 //javascript里面加密两次,两次才可以的。2 var url = "servlet/getText?name=" + encodeURI(encodeURI(name));
<script language="javascript" type="text/javascript">
        function show()
        {
         var name="test";
         var admin="ok";
         var url = "http://localhost:7001/sosuo/ggld/fleet?reloadVessel=" 
           + encodeURI(encodeURI(name))+"
&reloadVoyage="+ encodeURI(encodeURI(admin));
            window.open(url);
        }
    
</script>

1 //在java里面,通过指定的编码解密即可。2 String name = URLDecoder.decode(request.getParameter("name"),"utf-8");

web.xml配置:
<servlet> <!-- 新添加 车队 download -->        <servlet-name>fleetDataDownload</servlet-name>        <servlet-class>com.cenin.util.FleetDataDownload</servlet-class>    </servlet>
<servlet-mapping>        <servlet-name>fleetDataDownload</servlet-name>        <url-pattern>/ggld/fleet</url-pattern>    </servlet-mapping>

DataDownload.java页面:

package com.cenin.util;


import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.net.*;
import java.sql.*;

import org.apache.commons.digester.Digester;
import org.apache.log4j.Logger;
import com.cenin.database.DBManager;



public class DataDownload  extends HttpServlet 
{
    private static   Logger logger = Logger.getLogger(DataDownload .class);
    
    public void init(ServletConfig config) throws ServletException 
    {
        super.init(config);
        try
        {
        }
        catch(Exception ex)
        {
            logger.info(ex.getMessage());
        }

    }
    public void doGet(HttpServletRequest request, HttpServletResponse response)  throws ServletException, IOException 
    {
        doPost(request,response);
    }
    public void doDownload(HttpServletRequest request, HttpServletResponse response, String fileName, String vessel, String voyage)
    {
        try
        {
            
            response.reset();
            response.setContentType("application/vnd.ms-excel");
            response.setHeader("Content-Disposition", "inline; filename=\""+ fileName  + "\"");
            ServletOutputStream sos = response.getOutputStream();
            String title = "数据导出";


            String[] fieldTitles = {"船名", "航次", "提单号", "箱号", "铅封号", "箱型", "货名", "重量", "体积", "发货人", "收货人", "装货港", "卸货港"};
            String[] fieldNames = {"szVessel", "szVoyage", "szBlNo", "szCtnNo", "szSealNo", "szCtnType", "szCargoName", "fWeight", "fVolume", "szReceiver", "szSender", "szLoadPortCode", "szDischargePortCode"};
            int[] widths = {100, 50, 100, 120, 120, 50, 100, 50, 50, 80, 80, 80, 80};

            Connection conn = DBManager.getInstance().getConnection();
            Statement stmt=conn.createStatement(); 
            String sql = "select * from NmhContainer where szVessel='" + 
                    vessel + "' and szVoyage='" + voyage + "'"; // and szBlNo='" + blno + "'";
            ResultSet rs = stmt.executeQuery(sql);
            OutputUtil.excelOutput(title, fieldTitles, fieldNames, widths, rs, sos, "ISO-8859-1", "GBK");
            
            DBManager.getInstance().freeDBResource(rs, stmt, conn);
            
        }
        catch(Exception ex)
        {
            logger.info(ex.getMessage());
        }
        
    }
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
    {
        try
        {
            String vessel = request.getParameter("reloadVessel");
            String voyage = request.getParameter("reloadVoyage");
            //String blno = request.getParameter("reloadBlno");
            String name = vessel + "_" + voyage + "_" + ".xls";
            doDownload(request, response, name, vessel, voyage);
            
        }
        catch(Exception ex)
        {
            logger.info(ex.getMessage());
        }

        
        
    }
}

OutputUtil.java页面:

package com.cenin.util;
/*
 * 输出PDF, Excel等格式
 * 2005.5.12 by chenyong@cenin
 * 2005.12.19
 */


import jxl.Workbook;
import jxl.write.*;
import com.lowagie.text.Document;
import com.lowagie.text.Rectangle;
import com.lowagie.text.Font;
import com.lowagie.text.PageSize;
import com.lowagie.text.HeaderFooter;
import com.lowagie.text.Phrase;
import com.lowagie.text.Element;
import com.lowagie.text.Table;
import com.lowagie.text.pdf.*;
import java.io.*;
import java.util.*;
import java.sql.*;
import org.apache.log4j.Logger;


public class OutputUtil  
{
    private static Logger logger = Logger.getLogger(OutputUtil.class);
    /*******************************************************
    * pdf输出表格
    * title为pdf head
    * fieldtitles为 表头项目名称数组
    * filenames 为  对象属性名数组
    * widths 为 宽度%数组
    * rs为resultset
    * os 为输出流
    * codefrom , codeto 如果需要编码转换
    *******************************************************/    
    public static void excelOutput(String title, String[] fieldtitles, String[] fieldnames, int[] widths, ResultSet rs, OutputStream os, String codefrom, String codeto)
    {
        
        try
        {
            int fieldnumber = fieldnames.length; //, cellnumber = fieldnumber*5;
            if(fieldnumber!=fieldtitles.length||fieldnumber!=fieldnames.length)
                return;

            WritableWorkbook workbook = Workbook.createWorkbook(os);
            WritableSheet sheet = workbook.createSheet(title, 0);
            
            //add field title
            for(int i=0;i
<fieldnumber;i++)
            {
                //String temp 
= new String(fieldtitles[i].getBytes(codefrom), codeto);
                sheet.addCell(new Label(i, 0, fieldtitles[i]));
                
            }
            //add values
            int i
=0;
            
while(rs.next())
            {
                for(int j
=0; j<fieldnames.length; j++)
                {
                    if(rs.getString(fieldnames[j])!
=null)
                    
{
                        //String temp1 
= rs.getString(fieldnames[j]);
                        
String temp = new String(rs.getString(fieldnames[j]).getBytes("ISO-8859-1"), "GBK");
                        sheet.addCell(new Label(j, i+1, temp));
                    }
                    else
                        sheet.addCell(new Label(j, i+1, ""));
                }
                i++;
            }
            //write to excel
            workbook.write();
            workbook.close();
            
        }
        catch(Exception e)
        {
            logger.info(e.toString());
        }
            
    }

}

/*例子
FileOutputStream os 
= new FileOutputStream("e:\\a.xls");
String[] titles 
= {"系统编号","员工","用户帐号"};
String[] fieldnames = {"lsystemUserId","staff.szname","szaccount"};
int[] widths = {20,20,20}; 
//OutputUtil.pdfOutput("my pdf输出", titles, fieldnames, widths,objectList,os);
//OutputUtil.excelOutput("excel输出", titles, fieldnames, widths,objectList,os);

*/

 

posted @ 2012-09-20 17:04 youngturk 阅读(437) | 评论 (0)编辑 收藏

java创建文件和目录

创建文件和目录的关键技术点如下:
    1、File类的createNewFile根据抽象路径创建一个新的空文件,当抽象路径制定的文件存在时,创建失败
    2、File类的mkdir方法根据抽象路径创建目录
    3、File类的mkdirs方法根据抽象路径创建目录,包括创建必需但不存在的父目录
    4、File类的createTempFile方法创建临时文件,可以制定临时文件的文件名前缀、后缀及文件所在的目录,如果不指定目录,则存放在系统的临时文件夹下。
    5、除mkdirs方法外,以上方法在创建文件和目录时,必须保证目标文件不存在,而且父目录存在,否则会创建失败
   
实例演示

 

 

package book.io;

import java.io.File;
import java.io.IOException;

public class CreateFileUtil {
   
    public static boolean createFile(String destFileName) {
        File file = new File(destFileName);
        if(file.exists()) {
            System.out.println("创建单个文件" + destFileName + "失败,目标文件已存在!");
            return false;
        }
        if (destFileName.endsWith(File.separator)) {
            System.out.println("创建单个文件" + destFileName + "失败,目标文件不能为目录!");
            return false;
        }
        //判断目标文件所在的目录是否存在
        if(!file.getParentFile().exists()) {
            //如果目标文件所在的目录不存在,则创建父目录
            System.out.println("目标文件所在目录不存在,准备创建它!");
            if(!file.getParentFile().mkdirs()) {
                System.out.println("创建目标文件所在目录失败!");
                return false;
            }
        }
        //创建目标文件
        try {
            if (file.createNewFile()) {
                System.out.println("创建单个文件" + destFileName + "成功!");
                return true;
            } else {
                System.out.println("创建单个文件" + destFileName + "失败!");
                return false;
            }
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("创建单个文件" + destFileName + "失败!" + e.getMessage());
            return false;
        }
    }
   
   
    public static boolean createDir(String destDirName) {
        File dir = new File(destDirName);
        if (dir.exists()) {
            System.out.println("创建目录" + destDirName + "失败,目标目录已经存在");
            return false;
        }
        if (!destDirName.endsWith(File.separator)) {
            destDirName = destDirName + File.separator;
        }
        //创建目录
        if (dir.mkdirs()) {
            System.out.println("创建目录" + destDirName + "成功!");
            return true;
        } else {
            System.out.println("创建目录" + destDirName + "失败!");
            return false;
        }
    }
   
   
    public static String createTempFile(String prefix, String suffix, String dirName) {
        File tempFile = null;
        if (dirName == null) {
            try{
                //在默认文件夹下创建临时文件
                tempFile = File.createTempFile(prefix, suffix);
                //返回临时文件的路径
                return tempFile.getCanonicalPath();
            } catch (IOException e) {
                e.printStackTrace();
                System.out.println("创建临时文件失败!" + e.getMessage());
                return null;
            }
        } else {
            File dir = new File(dirName);
            //如果临时文件所在目录不存在,首先创建
            if (!dir.exists()) {
                if (!CreateFileUtil.createDir(dirName)) {
                    System.out.println("创建临时文件失败,不能创建临时文件所在的目录!");
                    return null;
                }
            }
            try {
                //在指定目录下创建临时文件
                tempFile = File.createTempFile(prefix, suffix, dir);
                return tempFile.getCanonicalPath();
            } catch (IOException e) {
                e.printStackTrace();
                System.out.println("创建临时文件失败!" + e.getMessage());
                return null;
            }
        }
    }
   
    public static void main(String[] args) {
        //创建目录
        String dirName = "D:/work/temp/temp0/temp1";
        CreateFileUtil.createDir(dirName);
        //创建文件
        String fileName = dirName + "/temp2/tempFile.txt";
        CreateFileUtil.createFile(fileName);
        //创建临时文件
        String prefix = "temp";
        String suffix = ".txt";
        for (int i = 0; i 
< 10; i++) {
            System.out.println("创建了临时文件:"
                    + CreateFileUtil.createTempFile(prefix, suffix, dirName));
        }
        //在默认目录下创建临时文件
        for (int i 
= 0; i < 10; i++) {
            System.out.println("在默认目录下创建了临时文件:"
                    + CreateFileUtil.createTempFile(prefix, suffix, null));
        }
    }

}
输出结果:


创建目录D:/work/temp/temp0/temp1成功!
目标文件所在目录不存在,准备创建它!
创建单个文件D:/work/temp/temp0/temp1/temp2/tempFile.txt成功!
创建了临时文件:D:work emp emp0 emp1 emp5171.txt
创建了临时文件:D:work emp emp0 emp1 emp5172.txt
创建了临时文件:D:work emp emp0 emp1 emp5173.txt
创建了临时文件:D:work emp emp0 emp1 emp5174.txt
创建了临时文件:D:work emp emp0 emp1 emp5175.txt
创建了临时文件:D:work emp emp0 emp1 emp5176.txt
创建了临时文件:D:work emp emp0 emp1 emp5177.txt
创建了临时文件:D:work emp emp0 emp1 emp5178.txt
创建了临时文件:D:work emp emp0 emp1 emp5179.txt
创建了临时文件:D:work emp emp0 emp1 emp5180.txt
在默认目录下创建了临时文件:C:Documents and SettingsAdministratorLocal SettingsTemp emp5181.txt
在默认目录下创建了临时文件:C:Documents and SettingsAdministratorLocal SettingsTemp emp5182.txt
在默认目录下创建了临时文件:C:Documents and SettingsAdministratorLocal SettingsTemp emp5183.txt
在默认目录下创建了临时文件:C:Documents and SettingsAdministratorLocal SettingsTemp emp5184.txt
在默认目录下创建了临时文件:C:Documents and SettingsAdministratorLocal SettingsTemp emp5185.txt
在默认目录下创建了临时文件:C:Documents and SettingsAdministratorLocal SettingsTemp emp5186.txt
在默认目录下创建了临时文件:C:Documents and SettingsAdministratorLocal SettingsTemp emp5187.txt
在默认目录下创建了临时文件:C:Documents and SettingsAdministratorLocal SettingsTemp emp5188.txt
在默认目录下创建了临时文件:C:Documents and SettingsAdministratorLocal SettingsTemp emp5189.txt
在默认目录下创建了临时文件:C:Documents and SettingsAdministratorLocal SettingsTemp emp5190.txt
文章出处:http://www.diybl.com/course/3_program/java/javaxl/20071129/89522.html

posted @ 2012-09-13 14:18 youngturk 阅读(8816) | 评论 (0)编辑 收藏

flex回调js,在主页面html中添加,

private function onLinkBtnClick(event:Event):void{
                if(linkBtnClickLoad!=null && linkBtnClickLoad!=""){
                       //CommonUtil.openWebPage(linkBtnClickLoad,null);
                       //var urlRequest:URLRequest = new URLRequest(Setting.serverUrl+linkBtnClickLoad); 
                       //navigateToURL(urlRequest,"_blank");
//                       ExternalInterface.call("linkButtonOpen",Setting.serverUrl+linkBtnClickLoad);
                       ExternalInterface.call("linkButtonOpen","http://localhost:7002/greatSpringCXFWebservice/"+linkBtnClickLoad);
                       return;
主页面Html添加:
<script  type="text/javascript">
     function linkButtonOpen(values){
        window.open(values,'_blank','top=0,left=0,toolbar=no,menubar=no,resizable=yes,location=no,scrollbars=yes,status=no');
 }
 
</script>
                }
ExternalInterface.addCallback("selectMenu",selectMenu);

posted @ 2012-09-13 11:41 youngturk 阅读(492) | 评论 (0)编辑 收藏

对于复杂javabean到json串的转换,建议使用FlexJSON

http://fins.iteye.com/blog/253493

posted @ 2012-09-12 17:22 youngturk 阅读(352) | 评论 (0)编辑 收藏

flex url http后台传递参数方法

request=new URLRequest("http://localhost:7002/greatSpringCXFWebservice/FileUploaded");
                var variables:URLVariables = new URLVariables();
                var userName = Setting.userInfo.userLoginName; 
                    variables.filedir = Setting.userInfo.userLoginName;
                    request.data=variables;
                     request.method=URLRequestMethod.GET;//为了后台java创建用户自己的图片库
file.upload(req
flex:
file=new FileReference();
                file.addEventListener(Event.SELECT,onFileSelect);
                file.addEventListener(IOErrorEvent.IO_ERROR,onFileIOError);
                file.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA,onUploadComplete);

java:
 protected void processRequest(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        System.out.println("to upload picture !");
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();

        // 保存文件到服务器中

        DiskFileItemFactory factory = new DiskFileItemFactory();
        factory.setSizeThreshold(4096);
        ServletFileUpload upload = new ServletFileUpload(factory);
        upload.setSizeMax(maxPostSize);
        String filedir = request.getParameter("filedir");
        try {
            List fileItems = upload.parseRequest(request);
            Iterator iter = fileItems.iterator();
            while (iter.hasNext()) {
                FileItem item = (FileItem) iter.next();
                if (!item.isFormField()) {
                    String name = item.getName();
//                    String filedir = item.get();//获取文件名
                    System.out.println(name);
                    try {
                        File file = new File("D:\\a\\"+filedir);//创建分级目录
                        file.mkdir();

                        item.write(new File(uploadPath+filedir+"\\" + name));
                        // SaveFile s = new SaveFile();
                        // s.saveFile(name); "{\"path\": "[ {"name"}]}" 
                        String path = "[path:{"+name+"}]";
                        out.print(path);//用来返回flex的DataEvent.UPLOAD_COMPLETE_DATA请求
                        
                        out.close();

                    } catch (Exception e) {
                        e.printStackTrace();
                        out.print("{\"error\": "+name+"}");
                        out.close();

                    }
                }
            }
        } catch (FileUploadException e) {
            out.print("{\"error\":"+e.getMessage()+"}");
            out.close();
            e.printStackTrace();
            System.out.println(e.getMessage() + "结束");
        }
    }
uest);



java接收

posted @ 2012-09-12 14:16 youngturk 阅读(965) | 评论 (0)编辑 收藏

Flex 基于Http方式上传图片(转)

     摘要: Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->首先下载 commons-fileupload-1.2.1.jar和commons-io-1.1.jar flex端代码: <?xml version="1....  阅读全文

posted @ 2012-09-11 22:36 youngturk 阅读(4099) | 评论 (0)编辑 收藏

oracle 图片存储

http://blog.csdn.net/qfs_v/article/details/2465276

posted @ 2012-09-06 16:05 youngturk 阅读(120) | 评论 (0)编辑 收藏

java的反射應用 好文章

http://www.cnblogs.com/rollenholt/archive/2011/09/02/2163758.html

posted @ 2012-09-05 13:46 youngturk 阅读(196) | 评论 (0)编辑 收藏

oracle权限修改

http://wenku.baidu.com/view/54431dc1bb4cf7ec4afed073.html###

posted @ 2012-09-02 18:37 youngturk 阅读(214) | 评论 (0)编辑 收藏

仅列出标题
共33页: First 上一页 8 9 10 11 12 13 14 15 16 下一页 Last 
<2024年6月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

导航

统计

公告

this year :
1 jQuery
2 freemarker
3 框架结构
4 口语英语

常用链接

留言簿(6)

随笔分类

随笔档案

文章分类

文章档案

相册

EJB学习

Flex学习

learn English

oracle

spring MVC web service

SQL

Struts

生活保健

解析文件

搜索

最新评论

阅读排行榜

评论排行榜