扫码关注微信公众号,获取最新资源


经历了一天的工作。我又来更新啦。。。白天手欠,把上一个给删了。明天重写吧。。

废话不多说。我们先去Unity里创建一个能够输入username和password的登录窗体

然后给登录button加入代码

using UnityEngine;
using System.Collections;
using UnityEngine.UI;public class Login : MonoBehaviour
{//持实username和password这两个输入框的对象public InputField Username;public InputField Password;//定义訪问JSP登录表单的get方式訪问路径private string Url = "http://192.168.31.38:8080/MyUnityToJSPTest/StringContentServlet.do?

"

; //当button被点击 public void LoginButtonOnClick() { //向server传递的參数 string parameter = ""; parameter += "UserName=" + Username.text + "&"; parameter += "PassWord=" + Password.text; //開始传递 StartCoroutine(login(Url + parameter)); } //訪问JSPserver IEnumerator login(string path) { WWW www = new WWW(path); yield return www; //假设错误发生。打印这个错误 if (www.error != null) { Debug.Log(www.error); } else { //假设server返回的是true if (www.text.Equals("true")) { //登陆成功 print("Login Success!!!"); Application.LoadLevel("UpLoadFile"); } else { //否则登录失败 print("Login Fail..."); } } } }

将两个面板拖拽给脚本生成实例

然后我们去JSPserver接收Unity传过来的值
JSP的代码我就不复制过来了,自己打一遍。印象深刻,最好是看懂了背着打。这样才有意义。

然后回到Unity。注冊button点击事件。

。。事实上是我自己忘了——-

接着就是执行Unity。

别忘了执行之前把JSP的server打开。否则提交只是去会报错的。

点击登录后。去JSPserver看看控制台。是否已经把我们的username和password输出出来了呢?
我的代码省略的那部分大家能够进行什么注冊啊,验证数据库什么的都能够,我个人感觉比Socket实用一些。

好了,注冊和登录什么的都是传递字符串,这个我们已经做完了,事实上并没有什么难点,那么我们继续回到Unity,開始上传文件的分享。
刚才点击登录button后。是否成功进入了上传文件的场景呢?
以下我们来编辑一下上传的场景

编辑模式下,给上传文件的button加入代码。注冊点击事件

using System;
using System.IO;
using UnityEngine;
using System.Collections;public class UpFile : MonoBehaviour
{//持有三个状态面板的对象public GameObject upFileing;public GameObject successPanel;public GameObject failPanel;//定义訪问JSP登录表单的post方式訪问路径private string Url = "http://192.168.31.39:8080/MyUnityToJSPTest/ByteFileContentServlet.do";//点击上传buttonpublic void OnUpFileButtonClick(){//设置上传文件里面板为显示状态upFileing.SetActive(true);//上传本地文件StartCoroutine(UpFileToJSP(Url, Application.dataPath + "\\midi.txt"));}//訪问JSPserverprivate IEnumerator UpFileToJSP(string url, string filePath){WWWForm form=new WWWForm();form.AddBinaryData("midiFile",FileContent(filePath),"midi.txt");WWW upLoad=new WWW(url,form);yield return upLoad;//假设失败if (!string.IsNullOrEmpty(upLoad.error)||upLoad.text.Equals("false")){//在控制台输出错误信息print(upLoad.error);//将失败面板显示  上传中不显示upFileing.SetActive(false);failPanel.SetActive(true);}else{//假设成功print("Finished Uploading Screenshot");//将成功面板显示  上传中不显示upFileing.SetActive(false);successPanel.SetActive(true);}}//将文件转换为字节流private byte[] FileContent(string filePath){FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);try{byte[] buffur = new byte[fs.Length];fs.Read(buffur, 0, (int)fs.Length);return buffur;}catch (Exception ex){Debug.Log(ex.Message);return null;}finally{if (fs != null){//关闭资源  fs.Close();}}}
}

创建三个面板



将三个面板拖拽给脚本后,打开JSP中的ByteFileContentServlet.java

编写代码

package com.Aries.Servlets;import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.io.RandomAccessFile;
import java.io.Writer;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import com.Aries.Tools.Tool;public class ByteFileContentServlet extends HttpServlet {public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException{//向控制台输出文件的内容长度System.out.println(request.getContentLength());//假设有内容if (request.getContentLength() > 297) {//==================開始处理文件===================//接收上传文件内容中暂时文件的文件名称String tempFileName = new String("tempFileName.txt");//tempfile 对象指向暂时文件File tempFile = new File(request.getRealPath("/")+tempFileName);//outputfile 文件输出流指向这个暂时文件FileOutputStream outputStream = new FileOutputStream(tempFile);//得到客服端提交的全部数据InputStream fileSourcel = request.getInputStream();//将得到的客服端数据写入暂时文件byte b[] = new byte[1000];int n ;while ((n=fileSourcel.read(b))!=-1){outputStream.write(b,0,n);}//关闭输出流和输入流outputStream.close();fileSourcel.close();//randomFile对象指向暂时文件RandomAccessFile randomFile = new RandomAccessFile(tempFile,"r");//读取暂时文件的前三行数据randomFile.readLine();randomFile.readLine();randomFile.readLine();//读取暂时文件的第四行数据,这行数据中包括了文件的路径和文件名称String filePath = randomFile.readLine();//得到文件名称System.out.println(filePath);int position = filePath.lastIndexOf("filename");String filename =Tool.codeString(filePath.substring(position+10,filePath.length()-1));//又一次定位读取文件指针到文件头randomFile.seek(0);//得到第四行回车符的位置,这是上传文件数据的開始位置long  forthEnterPosition = 0;int forth = 1;while((n=randomFile.readByte())!=-1&&(forth<=4)){if(n=='\n'){forthEnterPosition = randomFile.getFilePointer();forth++;}}//生成上传文件的文件夹File fileupLoad = new File(request.getRealPath("/"),"upLoad");fileupLoad.mkdir();//saveFile 对象指向要保存的文件File saveFile = new File(request.getRealPath("/")+"\\upLoad",filename);RandomAccessFile randomAccessFile = new RandomAccessFile(saveFile,"rw");//找到上传文件数据的结束位置。即倒数第四行randomFile.seek(randomFile.length());long endPosition = randomFile.getFilePointer();int j = 1;while((endPosition>=0)&&(j<=4)){endPosition--;randomFile.seek(endPosition);if(randomFile.readByte()=='\n'){j++;}}//从上传文件数据的開始位置到结束位置。把数据写入到要保存的文件里randomFile.seek(forthEnterPosition);long startPoint = randomFile.getFilePointer();while(startPoint<endPosition){randomAccessFile.write(randomFile.readByte());startPoint = randomFile.getFilePointer();}//关闭文件输入、输出randomAccessFile.close();randomFile.close();tempFile.delete();//==================处理文件结束===================//向控制台输出文件上传成功System.out.println("File upload success!");} else {//否则显示失败,System.out.println("No file!");//向Unity返回一个Fasle字符串Writer out=response.getWriter();out.write("false");out.close();}}}

在写这个代码之前,我们要新建一个包
com.Aries.Tools
在里面新建一个工具类Tool.java

代码例如以下

注:这里包括以下要用到的处理工具,我就一起附上来了

package com.Aries.Tools;import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;public class Tool {/** 文件字节流 */public static byte[] getBytes(String filePath) {byte[] buffer = null;try {File file = new File(filePath);FileInputStream fis = new FileInputStream(file);ByteArrayOutputStream bos = new ByteArrayOutputStream(1000);byte[] b = new byte[1000];int n;while ((n = fis.read(b)) != -1) {bos.write(b, 0, n);}fis.close();bos.close();buffer = bos.toByteArray();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return buffer;}/** 处理中文字符串的函数 */public static String codeString(String str) {String s = str;try {byte[] temp = s.getBytes("UTF-8");s = new String(temp);return s;} catch (UnsupportedEncodingException e) {e.printStackTrace();return s;}}}

做完这些后。开启我们的server。然后开启Unity,在确保上传文件在Unity的Assets文件夹下的时候。我们就执行Unity。点击上传文件button。

能够看到Unity的控制台是这种

然后是JSP的控制台

这些都证明不了什么,我们要看到文件才证明我们上传成功
点击部署文件的那个button。以下有一个Browse

点开之后会看到我们server上的文件夹
那么就能够看到我们用代码生成的upload的文件夹可里面的midi.txt文件了

好了。

Unity向server上传文件已经成功,以下我们还差最后一步,也就是我在网上找不到的东西,用Unity请求server,server给Unity反馈一个文件,那么我们如今回到unity。编辑上传成功那个面板。当我们上传文件成功后弹出的那个面板下方会有播放的那个button。编辑这个button,加入点击事件。然后挂上脚本。

代码例如以下:

using System.IO;
using System.Xml.Serialization;
using UnityEngine;
using System.Collections;public class DownLoadFile : MonoBehaviour
{//定义訪问JSP登录表单的get方式訪问路径private string url = "http://192.168.31.39:8080/MyUnityToJSPTest/DownloadMidi.do?Download=Midi";//当button点击public void OnPlayButtonClick(){//向server传递指令StartCoroutine(UpFileToJSP(url));}//訪问JSPserverprivate IEnumerator UpFileToJSP(string url){WWW downLoad = new WWW(url);yield return downLoad;//假设失败if (!string.IsNullOrEmpty(downLoad.error) || downLoad.text.Equals("false")){//在控制台输出错误信息print(downLoad.error);}else{//假设成功//定义一个字节数组保存文件byte[] myByte = downLoad.bytes;//新建一个文件接收字节流FileStream fs = new FileStream(Application.dataPath + "/midi.mid",FileMode.Create, FileAccess.Write, FileShare.None);//開始转换fs.Write(myByte,0,myByte.Length);//刷新流fs.Flush();//关闭流fs.Close();//子啊控制台输出完毕信息print("Finished Uploading Screenshot");}}
}

在这个脚本之前,我们应该先到server的index.jsp加入一个表单。再去servlets包下注冊一个Servlet供我们请求server所用。操作我就不具体介绍了。上一个文章里面有介绍,,一会我在以下附个链接。那么我直接上JSP上这个Servlet的代码和index.jsp的表单怎样加入。

Servlet:DownloadMidi.java

package com.Aries.Servlets;import java.io.IOException;import java.io.OutputStream;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import com.Aries.Tools.Tool;public class DownloadMidi extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//假设訪问參数符合条件if(request.getParameter("Download").equals("Midi")){//获取输出流OutputStream out=response.getOutputStream();//把文件变成byte字节流传入输出流out.write(Tool.getBytes(request.getRealPath("/")+"\\upLoad\\midi.mid"));//刷新流out.flush();//关闭流out.close();//向控制台提示成功System.out.println("success!");}}}

index.jsp

unity要下载server上的文件,那我们要给server上放一个我们准备上传的文件,就是这个midi.mid,这是个音频。

然后我们就部署一下project
开启server,正常启动后。打开Unity,開始执行。。。

点击那个小播放button后,我们能够去JSP的控制台查看

然后是Unity的控制台,等控制台出现成功以后,等一小会Unity引擎就会把文件解析并显示出来。

然后我们去Unity的project文件夹下播放这个midi文件,看看能否正常播放呢。

反正我的是正常播放了。

好了,关于Unity与JSP的通信我就分享到这里吧。再说一次我不是什么大神,仅仅是喜欢研究与学习,如有不足之处,欢迎指正,谢谢。

联系方式
 查看Aries的个人资料

QQ:531193915
E_Mail:15210411296@163.com

转载请注明出处。谢谢 。
本文永久链接:http://blog.csdn.net/aries_h/article/details/50971981

补充一下。我把project文件整理了一下。
以下是地址:
http://pan.baidu.com/s/1bTLkbs
password:
aym5

转载于:https://www.cnblogs.com/yutingliuyl/p/7107301.html

Unity3D与JSP TomCatserver传递数据和文件( 二 ) Unity3D向java传输表单相关推荐

  1. java序列化表单同步请求_Ajax serialize() 表单进行序列化方式上传文件

    通过传统的 form 表单提交的方式上传文件 上传文件: 不过传统的 form 表单提交会导致页面刷新,但是在有些情况下,我们不希望页面被刷新,这种时候我们都是使用 Ajax 的方式进行请求的. 使用 ...

  2. django通过ajax请求接口返回多条数据,并动态生成表格,请求表单后将表格数据并入库

    一.最近在做接口相关的开发,需求是这样的,通过一个接口所需要传递的参数,调用接口后,处理接口响应的参数,返回多条数据,并动态生成表格,请求表单后将表格的数据入库,下面是我改过的代码,跟实际代码有些出入 ...

  3. c语言写自动填写表单提交,利用C语言实现POST数据包如此简单【模拟网页提交表单】...

    http://www.maben.com.cn/archives/212.html 利用C语言实现POST数据包如此简单[模拟网页提交表单] //*************************** ...

  4. unity能连jsp吗_Unity3D与JSP TomCat服务器传递数据和文件( 一) 建立Java服务器

    由于昨天手欠,直接点编辑,结果让二把一给覆盖了...导致我现在又重新写一遍. 托更了半年,不是因为别的原因,是因为我找到了实习工作,比较忙,实在是没时间,然而最近在做这个Unity上传功能的模块,在网 ...

  5. unity能连jsp吗_Unity3D与JSP TomCat服务器传递数据和文件( 一 ) 建立Java服务器

    [项目里面的许多资源都是从资源服务器加载的,这样子可以减小客户端的包大小.所以我们需要一个专门的类来管理下载资源.资源分很多类型,如:json表,txt文件,image文件 扫码关注微信公众号,获取最 ...

  6. java websocket 后台服务器_Unity3D与Java后台TomCat服务器传递数据和文件(1)建立Java服务器...

    文章创建与2016-03-26 作者 Aries.H 原文链接:https://blog.csdn.net/Aries_H/article/details/50986390 我用到的工具有: MyEc ...

  7. python post 请求json文件_requests的post请求提交表单、json串和文件数据讲解

    HTTP协议中没有规定post提交的数据必须使用什么编码方式,服务端根据请求头中的Content-Type字段来获取编码方式,再对数据进行解析.具体的编码方式包括如下: - application/x ...

  8. java http 表单提交_java模仿http表单提交数据(含文件上传)实例源码

    [实例简介]java模仿http表单提交数据.模仿http表单上传文件示例 [实例截图] [核心代码] package com.snca.cloudsign.main; import java.io. ...

  9. java处理表单变量_Java自学之SpringMVC:接收表单数据

    学习目的:使用SpringMVC接收表单数据. Part 1 新建一个pojo. package pojo; public class Product { private int id; privat ...

最新文章

  1. 大三Java实习总结网易百度小米美团阿里(均拿offer)
  2. python构建网站flask_30分钟搭建Python的Flask框架并在上面编写第一个应用
  3. 实习生对企业的认识_如何成为您认识的超级明星实习生
  4. UC浏览器云标签怎么用 UC浏览器云标签使用方法
  5. Jquery .net MVC
  6. 我发现:在StackOverflow上拯救歪果仁十分有意思!
  7. Python 中的全局变量
  8. 解读:AlphaGo之父倾力打造:The Predictron端到端训练与规划
  9. 【车道线检测与寻迹】2月24日 CVST工具箱模块仿真与图像处理(二)、基于Vision对象的边缘检测、余弦变换压缩,与峰值信噪比
  10. 从零开始学习Sencha Touch MVC应用之十三
  11. sqlserver 软件授权
  12. readelf命令使用说明
  13. [转]3D Ripper DX模型截取器
  14. ubuntu 16.04 配置网络代理
  15. jvm讲解-jvm内存结构详解
  16. 无人机倾斜摄影三维建模过程及方案
  17. 股票因子扩展2(双神因子计算)——从零到实盘5
  18. 计算机基础知识教程页码,如何设置word文档页码从任意页开始
  19. 恶意程序检测之malconv模型
  20. java是怎么分配内存和释放内存的-详解

热门文章

  1. EasyPR车牌识别学习总结
  2. c语言非法字符判别,98行的四则计算器.(支持括号)加入了非法字符的检测
  3. 处理veh调试器检测_越狱检测抖音逻辑???
  4. 7-2 定义日期类 (28 分)
  5. python报错:No such file or directory: ‘D:\\Anaconda3\\lib\\venv\\scripts\\nt\\python.exe‘
  6. Web 服务器远程控制硬件(Arduino)
  7. 计网期末复习 - 发送时延和传播时延计算
  8. 计网期末复习 - 子网划分
  9. nacos dataid修改配置文件_nacos 配置中心自动化运维之namespace坑
  10. C语言-查找顺序表中的最大值