【struts2】struts2中的流接收与流发送

原创 2015年07月09日 11:49:50

【前言】在我们的struts2后端中,实现流的接收和发送,就可以实现向服务器传视频流以及下载图片。

【流接收】

现在举一个传公钥的例子。struts2用一个action接收Key,而Key就是用http二进制流传过来的。

配置文件struts.xml写起来很简单:

<action name="key" class="com.seeplant.action.PublicKeyAction" method="key">

  <result>/WEB-INF/content/SUCCESS.jsp</result>

  <result>/WEB-INF/content/ERROR.jsp</result>

</action>

只是简单的指定了用Public String key()方法来处理这个Action,Action中用Servlet的Request读出流

public class PublicKeyAction extends ActionSupport {

  public String key() {

    try (ObjectInputStream oStream = new ObjectInputStream(ServletActionContext.getRequest().getInputStream());) {

       java.security.Key publicKey = (Key) oStream.readObject();

        System.out.println("公钥\n"+publicKey);

    } catch (Exception e) { e.printStackTrace();}

  }

}

为了配合测试,贴上客户端发请求的代码。

public class MyTest {
    private final static int KEYSIZE = 512;
    private final static String kurlstring = "http://127.0.0.1/key";
    public static void main(String[] args) {
        try {
            URL url = new URL(kurlstring);

            URLConnection uConnection = url.openConnection();
            uConnection.setRequestProperty("content-type", "application/octet-stream"); //注意这里的content-type,一定要按规范写
            uConnection.setDoOutput(true);
            OutputStream oStream = uConnection.getOutputStream();

            // 生成Key
            KeyPairGenerator pairGenerator = KeyPairGenerator.getInstance("RSA");
            SecureRandom random = new SecureRandom();
            pairGenerator.initialize(KEYSIZE,random);
            KeyPair keyPair = pairGenerator.generateKeyPair();

            try (ObjectOutputStream out = new ObjectOutputStream(oStream);){
                out.writeObject(keyPair.getPublic());
                out.flush();
            } catch (Exception e) {
                // TODO: handle exception
                e.printStackTrace();
            }

            uConnection.getInputStream();

        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (NoSuchAlgorithmException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

【流发送】流发送一般用于服务器发布流媒体。像中文名的图片就可以用流发送的方式提供,而不用修改tomcat的配置

struts.xml中,对应的流发送Action要配置成stream模式

<action name="download" class="com.seeplant.action.AndroidAppDownload">

    <param name="inputPath">/WEB-INF/androidVersion/SeePlant.apk</param> <!-- 这里指定了源文件的路径,在action类中有一个inputPath属性-->

    <result type="stream">

        <!--这里要指定content Type-->

        <param name="contentType">application/vnd.android.package-archive</param>

        <!--这个inputName一定要有,他是框架默认的入口函数标示,这里定义了一个targetFile,structs在收到客户端请求的download.action之后,会定位到getTargetFile函数,仔细体会一下这里的对应关系-->

        <param name="inputName">targetFile</param>

        <!-- 这里是设置客户端收到的文件名 ,客户端将会看到将要打开一个叫做SeePlantPack.apk的文件 -->

        <param name="contentDisposition">filename="SeePlantPack.apk"</param>

        <param name="bufferSize">4096</param>

    </result>


Action很简单

public class AndroidAppDownload extends ActionSupport {

    private String inputPath;

    public void setInputPath(String inputPath) { this.inputPath = inputPath;}

    // 注意这里的入口方法的返回值是InputStream接口类型

    public InputStream getTargetFile() throws Exception {

        return ServletActionContext.getServletContext().getResourceAsStream(inputPath);

    }

}

struts2 接收流(转)

struts2 接收流(转) struts  struts2 中使用request.getInputStream() 获取POST数据   原文:http://hepeng421.b...
  • u012670373
  • u012670373
  • 2013年11月21日 10:29
  • 740

struts2 action接收文件上传数据处理

转自http://www.jb51.net/article/45170.htm 这篇文章主要介绍了struts2单个文件上传的两种实现方式,有需要的朋友可以参考一下 通过2种方式模拟单个文件上传,效...
  • gaohuimina
  • gaohuimina
  • 2016年10月19日 15:04
  • 3278

使用httpclient模拟表单上传文件,后台用struts2接收

使用httpclient模拟表单上传文件,后台用struts2接收
  • g414917512
  • g414917512
  • 2015年11月24日 09:56
  • 1456

Struts2学习总结(2)--数据接收,数据共享,类型转换,上传下载

本文包括以下两个部分: 1. Struts2的基本配置和通用功能。 2. Struts2的核心功能:数据接收,数据共享,类型转换,上传下载。...
  • qq_29829081
  • qq_29829081
  • 2016年03月27日 23:43
  • 1789

【struts2】struts2中的流接收与流发送

【前言】在我们的struts2后端中,实现流的接收和发送,就可以实现向服务器传视频流以及下载图片。...
  • arctan90
  • arctan90
  • 2015年07月09日 11:49
  • 1104

struts+hibernate实现文件上传、下载,以二进制存于数据库

  • 2015年11月26日 15:22
  • 76KB
  • 下载

Struts2输出图片流到页面

前言:今天做个功能需要展示图片到页面,并不是下载,在网上搜了老半天,大部分都是下载,有的话也是只能在IE下进行输出,其它浏览器就都是下载了。 Action代码: [java] vi...
  • qq_19532027
  • qq_19532027
  • 2014年08月14日 16:54
  • 896

struts2实现让文件输入流流向浏览器显示

我们都知道struts2封装了很多结果集,今天我遇到了一个需求,就是把一张图片流向浏览器显示,而不是提高下载,图片也是文件,可以看做是一个输入流,相对于浏览器而言,具体实现如下: 第一、action层...
  • qq_20062767
  • qq_20062767
  • 2016年03月29日 20:33
  • 1116

采用struts2+hibernate实现保存文件到Oracle数据库&&并附下载代码【导入即可用】;数据库中保存blob类型的二进制文件

采用struts2+hibernate实现保存文件到Oracle数据库&&并附下载代码【导入即可用】;数据库中保存blob类型的二进制文件 源代码下载地址:http://www.zuidaima.co...
  • springmvc_springdata
  • springmvc_springdata
  • 2014年09月22日 09:53
  • 1416

【Struts2框架】第八节上传-利用struts2实现上传功能

Struts2的文件上传 将表单的method属性设置为post,将enctype设置为multipart/form-data。 将enctype设置为multippart/form-data,浏览...
  • u013517797
  • u013517797
  • 2015年08月03日 09:34
  • 1387
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【struts2】struts2中的流接收与流发送
举报原因:
原因补充:

(最多只允许输入30个字)