Java 作为web服务器的移动HTML
我正在做一个项目,在这个项目中,我的android作为一个web服务器工作;输入带有端口号的IP地址,打开web界面,用户可以将文件上载到手机。我想在网络界面上展示一些图片,这样我们的界面看起来很好 如何提供图像src”“fiels中可绘制或原始或资产文件夹中的图像参考 这是我的密码: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
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(标记“秒