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

【流接收】

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

配置文件struts.xml写起来非常easy:

<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();}

}

}

为了配合測试,贴上client发请求的代码。

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();

        }

    }

}

【流发送】流发送一般用于server公布流媒体。像中文名的图片就能够用流发送的方式提供,而不用改动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在收到client请求的download.action之后,会定位到getTargetFile函数。细致体会一下这里的相应关系-->

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

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

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

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

</result>

Action非常easy

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);

}

}

最新文章

  1. [LeetCode] Word Break II 拆分词句之二
  2. TSQL 聚合函数忽略NULL值
  3. (light OJ 1005) Rooks dp
  4. sprint3与总结
  5. VC++ 网络编程总结(一)
  6. 图文解说PhpStorm 7.0版本支持PHP 5.5
  7. JMeter使用简单教程
  8. JS方法:数字转换为千分位字符
  9. xxxx-xx-xx的时间的加减
  10. [Android] Android 让UI控件固定于底部的几种方法
  11. ionic3.x版本开发问题记录---使用Image Resizer打包报错问题
  12. 数组&lt;--&gt;变量
  13. IOS safari 浏览器 时间乱码(ios时间显示NaN) 问题解决
  14. Chapter 3 -- Ordering
  15. 安卓开发笔记——关于AsyncTask的使用
  16. 不记得oracle管理员密码,更改oracle sys密码的方法
  17. Linux目录结构及解释(附图)
  18. python多线程为什么不能利用多核cpu
  19. Flask 模板语法
  20. how to do error handing with WCF by using attributes to log your errors z

热门文章

  1. Auto property synthesis will not synthesize property &amp;#39;delegate&amp;#39;; it will be implemented by its super
  2. LeetCode题解 || Longest Substring Without Repeating Characters (O(n)算法)问题
  3. 2014.08.04,读书,读书笔记-《Matlab概率与数理统计分析》-第1章 MATLAB的数据基础
  4. uninstall OpenJDK9
  5. Swift3.0 闭包整理
  6. C++中的pair,make_pair学习
  7. Kylin基础教程(二)
  8. ASP.NET中各种缓存技术的特点及使用场景
  9. mysql+spring+mybatis实现数据库读写分离[代码配置] .
  10. 如何使用pgpool failover_stream.sh自己控制选择指定的master节点