Java 作为web服务器的移动HTML

Java 作为web服务器的移动HTML,java,android,html,Java,Android,Html,我正在做一个项目,在这个项目中,我的android作为一个web服务器工作;输入带有端口号的IP地址,打开web界面,用户可以将文件上载到手机。我想在网络界面上展示一些图片,这样我们的界面看起来很好 如何提供图像src”“fiels中可绘制或原始或资产文件夹中的图像参考 这是我的密码: private String getZipLink(long folderId) { return "<a href=\"/zip/" + folderId + "/folder.zip

我正在做一个项目,在这个项目中,我的android作为一个web服务器工作;输入带有端口号的IP地址,打开web界面,用户可以将文件上载到手机。我想在网络界面上展示一些图片,这样我们的界面看起来很好

如何提供图像src”“fiels中可绘制或原始或资产文件夹中的图像参考

这是我的密码:

     private String getZipLink(long folderId) {
     return "<a href=\"/zip/" + folderId + "/folder.zip\"><img src=\"file:///android_res/raw/img\" />" +
     "Zip of Entire Folder</a>";
私有字符串getZipLink(长folderId){
返回“”;
如何在那里添加图像?
}

也许您可以将图像数据嵌入HTML(而不是试图提供图像数据的链接):请参见。

也许您可以将图像数据嵌入HTML(而不是试图提供图像数据的链接):请参见。

如果您可以控制web服务器中的请求处理,则可以使用如下图像URL:

<img src="images/myimage.png" ... />


并通过返回具有正确MIME类型的字节流来处理对资源
images/myimage.png
的请求。这与Java EE servlet中使用的代码非常相似,因此您可以搜索示例代码并使其适应您的环境。

如果您可以控制web服务器中的请求处理,您可以使用如下图像URL

<img src="images/myimage.png" ... />


并通过返回具有正确MIME类型的字节流来处理对资源
images/myimage.png
的请求。这与Java EE servlet中使用的代码非常相似,因此您可以搜索示例代码并使其适应您的环境。

您可以这样做

   /**
     * This method starts the web server listening to the port 8080
     */
    protected void start() {

        new Thread(new Runnable() {

            @Override
            public void run() {
                Log.d(TAG, "Secure Web Server is starting up on port 8080");
                try {
                    // Create the secure server socket
                    sss = (SSLServerSocket) sssf.createServerSocket(8080);
                } catch (Exception e) {
                    System.out.println("Error: " + e);
                    return;
                }

                Log.d(TAG, "Waiting for connection");
                while (isRunning) {
                    try {
                        // Wait for an SSL connection
                        Socket socket = sss.accept();

                        Runtime rt = Runtime.getRuntime();
                        Process pr = rt.exec("lsof -i:"+socket.getPort());
                        System.out.println("Process:::"+pr.getInputStream());

                        InputStream in1 = pr.getInputStream();
                        InputStreamReader is = new InputStreamReader(in1);
                        StringBuilder sb=new StringBuilder();
                        BufferedReader br = new BufferedReader(is);
                        String read = br.readLine();

                        while(read != null) {
                            //System.out.println(read);
                            sb.append(read);
                            read =br.readLine();

                        }

                        System.out.println("Process read:::"+sb.toString());

                        // Got a connection
                        Log.d(TAG, "Connected, sending data.");

                        BufferedReader in = new BufferedReader(
                                new InputStreamReader(socket.getInputStream()));
                        PrintWriter out = new PrintWriter(socket
                                .getOutputStream());

                        // Read the data until a blank line is reached which
                        // signifies the end of the client HTTP headers
                        String str = ".";
                        while (!str.equals(""))
                            str = in.readLine();

                        // Send a HTTP response
                        out.println("HTTP/1.0 200 OK");
                        out.println("Content-Type: text/html");
                        out.println("Server: Android KeyChainiDemo SSL Server");
                        // this blank line signals the end of the headers
                        out.println("");
                        // Send the HTML page
                        out.println("<H1>Welcome to Android!</H1>");
                        // Add an embedded Android image
                        out.println("<img src='data:image/png;base64," + base64Image + "'/>");
                        out.flush();
                        socket.close();
                    } catch (Exception e) {
                        Log.d(TAG, "Error: " + e);
                    }
                }
            }
        }).start();

    }





base64Image = createBase64Image(ctx);


 /**
     * This method reads a binary image from the assets folder and returns the
     * base64 encoded image string.
     *
     * @param ctx The service this web server is running in.
     * @return String The base64 encoded image string or "" if there is an
     *         exception
     */
    private String createBase64Image(Context ctx) {
        BufferedInputStream bis;
        try {
            bis = new BufferedInputStream(ctx.getAssets().open(**image file stored in assets folder **));
            byte[] embeddedImage = new byte[bis.available()];
            bis.read(embeddedImage);
            return Base64.encodeToString(embeddedImage, Base64.DEFAULT);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "";
    }
/**
*此方法启动侦听端口8080的web服务器
*/
受保护的void start(){
新线程(newrunnable()){
@凌驾
公开募捐{
d(标记“安全Web服务器正在端口8080上启动”);
试一试{
//创建安全服务器套接字
sss=(SSLServerSocket)sssf.createServerSocket(8080);
}捕获(例外e){
System.out.println(“错误:+e”);
返回;
}
Log.d(标签“等待连接”);
同时(正在运行){
试一试{
//等待SSL连接
套接字=sss.accept();
Runtime rt=Runtime.getRuntime();
进程pr=rt.exec(“lsof-i:+socket.getPort());
System.out.println(“进程::”+pr.getInputStream());
InputStream in1=pr.getInputStream();
InputStreamReader is=新的InputStreamReader(in1);
StringBuilder sb=新的StringBuilder();
BufferedReader br=新的BufferedReader(is);
String read=br.readLine();
while(读取!=null){
//系统输出打印项次(读取);
某人追加(读);
read=br.readLine();
}
System.out.println(“进程读取::”+sb.toString());
//有联系吗
Log.d(标记“已连接,正在发送数据”);
BufferedReader in=新的BufferedReader(
新的InputStreamReader(socket.getInputStream());
PrintWriter out=新的PrintWriter(插座
.getOutputStream());
//读取数据,直到到达一个空行,该空行
//表示客户端HTTP头的结束
字符串str=“.”;
而(!str.equals(“”)
str=in.readLine();
//发送HTTP响应
out.println(“HTTP/1.0 200 OK”);
println(“内容类型:text/html”);
println(“服务器:Android KeyChainiDemo SSL服务器”);
//此空行表示页眉结束
out.println(“”);
//发送HTML页面
println(“欢迎来到Android!”);
//添加嵌入式Android图像
out.println(“”);
out.flush();
socket.close();
}捕获(例外e){
日志d(标签“错误:+e”);
}
}
}
}).start();
}
base64Image=createBase64Image(ctx);
/**
*此方法从assets文件夹读取二进制图像并返回
*base64编码图像字符串。
*
*@param ctx运行此web服务器的服务。
*@return String base64编码的图像字符串,如果存在
*例外情况
*/
私有字符串createBase64Image(上下文ctx){
缓冲数据流bis;
试一试{
bis=新的BufferedInputStream(ctx.getAssets().open(**存储在资产文件夹**)中的图像文件);
byte[]embeddedImage=新字节[bis.available()];
读取(嵌入图像);
返回Base64.encodeToString(embeddedImage,Base64.DEFAULT);
}捕获(IOE异常){
e、 printStackTrace();
}
返回“”;
}
所以把你的图像放在android的资产文件夹中


有关更多说明,请参见Android4.0 android示例中android APIDemos中的KeyChainDemo

   /**
     * This method starts the web server listening to the port 8080
     */
    protected void start() {

        new Thread(new Runnable() {

            @Override
            public void run() {
                Log.d(TAG, "Secure Web Server is starting up on port 8080");
                try {
                    // Create the secure server socket
                    sss = (SSLServerSocket) sssf.createServerSocket(8080);
                } catch (Exception e) {
                    System.out.println("Error: " + e);
                    return;
                }

                Log.d(TAG, "Waiting for connection");
                while (isRunning) {
                    try {
                        // Wait for an SSL connection
                        Socket socket = sss.accept();

                        Runtime rt = Runtime.getRuntime();
                        Process pr = rt.exec("lsof -i:"+socket.getPort());
                        System.out.println("Process:::"+pr.getInputStream());

                        InputStream in1 = pr.getInputStream();
                        InputStreamReader is = new InputStreamReader(in1);
                        StringBuilder sb=new StringBuilder();
                        BufferedReader br = new BufferedReader(is);
                        String read = br.readLine();

                        while(read != null) {
                            //System.out.println(read);
                            sb.append(read);
                            read =br.readLine();

                        }

                        System.out.println("Process read:::"+sb.toString());

                        // Got a connection
                        Log.d(TAG, "Connected, sending data.");

                        BufferedReader in = new BufferedReader(
                                new InputStreamReader(socket.getInputStream()));
                        PrintWriter out = new PrintWriter(socket
                                .getOutputStream());

                        // Read the data until a blank line is reached which
                        // signifies the end of the client HTTP headers
                        String str = ".";
                        while (!str.equals(""))
                            str = in.readLine();

                        // Send a HTTP response
                        out.println("HTTP/1.0 200 OK");
                        out.println("Content-Type: text/html");
                        out.println("Server: Android KeyChainiDemo SSL Server");
                        // this blank line signals the end of the headers
                        out.println("");
                        // Send the HTML page
                        out.println("<H1>Welcome to Android!</H1>");
                        // Add an embedded Android image
                        out.println("<img src='data:image/png;base64," + base64Image + "'/>");
                        out.flush();
                        socket.close();
                    } catch (Exception e) {
                        Log.d(TAG, "Error: " + e);
                    }
                }
            }
        }).start();

    }





base64Image = createBase64Image(ctx);


 /**
     * This method reads a binary image from the assets folder and returns the
     * base64 encoded image string.
     *
     * @param ctx The service this web server is running in.
     * @return String The base64 encoded image string or "" if there is an
     *         exception
     */
    private String createBase64Image(Context ctx) {
        BufferedInputStream bis;
        try {
            bis = new BufferedInputStream(ctx.getAssets().open(**image file stored in assets folder **));
            byte[] embeddedImage = new byte[bis.available()];
            bis.read(embeddedImage);
            return Base64.encodeToString(embeddedImage, Base64.DEFAULT);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "";
    }
/**
*此方法启动侦听端口8080的web服务器
*/
受保护的void start(){
新线程(newrunnable()){
@凌驾
公开募捐{
Log.d(标记“秒