)
[J2ME]手机文件上传--proxy端
proxy端是一个简单的servlet,实现代理的功能,目的是接收从手机发送过来的数据,再转发给CMA接收工程,工程源码如下:
1
2 package com.freelynet.meta.j2me;
3
4 import java.io.BufferedInputStream;
5 import java.io.BufferedOutputStream;
6 import java.io.DataOutputStream;
7 import java.io.IOException;
8 import java.io.InputStream;
9 import java.io.PrintWriter;
10 import java.net.HttpURLConnection;
11 import java.net.MalformedURLException;
12 import java.net.URL;
13 import java.util.Date;
14 import java.util.Enumeration;
15 import java.util.Map;
16 import java.util.StringTokenizer;
17
18 import javax.servlet.ServletException;
19 import javax.servlet.ServletRequest;
20 import javax.servlet.ServletResponse;
21 import javax.servlet.http.HttpServlet;
22 import javax.servlet.http.HttpServletRequest;
23 import javax.servlet.http.HttpServletResponse;
24
25 import org.apache.commons.logging.Log;
26 import org.apache.commons.logging.LogFactory;
27 import org.apache.log4j.BasicConfigurator;
28
29 /**
30 * 实现代理功能
31 * <p>
32 * 请求方只需将URL放在请求数据发送到proxy,然后由proxy去访问URL,并将数据返回给请求方。
33 * </p>
34 * <p>
35 * ---- added at 2006.12.21 ----
有几点是需要注意的:
36 * <li>1.现在的J2ME客户端访问的时候都是带ACTION的,程序中以此作为区别普通客户端和J2ME客户端,在J2ME客户端访问的时候,proxy会将文本数据用writeUTF来输出.</li>
37 * <li>2.服务器端的数据输出有可能是writeUTF,也有可能是直接用out.print,所以当是J2ME客户端时,会忽略到<zhml>前面的所有数据,这主要是考虑到兼容性问题</li>
38 * <li>3.本proxy现只支持HTTP,如果后期有需要的话,还可以加上FTP等,可以根据url来判断然后再加上相应的实现
39 * </p>
40 * <p>
41 * ---- added at 2009.01.14 ----
上传图片的补充说明:
42 * <li>1.程序新增图片上传功能的处理。由于图片较大,转发时需用post方式发送数据</li>
43 * <li>2.首先对传来的二进制数据解析,判断是否有图片,如果有分离出url和图片,二者在终端程序中以&#标志分开。</li>
44 * <li>3.如果数据中包含图片,用新增的post方式流程转发数据(post方式只处理图片上传),否则,所有提交走原来proxy的处理流程。
45 * </p>
46 *
47 * @version 1.0 Dec 20, 2006
48 * @author Xiang.Xian.Jing (xiangxj@gmail.com)
49 *
50 * @version 2.0 Jan 14, 2009
51 * @author Du Changfeng (duchangfeng@163.com)
52 */
53 public class J2meProxy extends HttpServlet {
54
55 static {
56 BasicConfigurator.configure();