用java编写的web服务器端如何响应嵌入JPEG 文件的HTML页面
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用java编写的web服务器端如何响应嵌入JPEG 文件的HTML页面相关的知识,希望对你有一定的参考价值。
麻烦高手看下代码。我用浏览器能打开页面,但就是不能显示图片
(不用多线程,多线程我试过能行)
public class Server
public static void main(String args[])
BufferedReader br_3393;
BufferedReader read_3393;
InputStream input_3393;
OutputStream output_3393;
String s_3393;
try
ServerSocket server_3393 = new ServerSocket(8000);
System.out.println("等待连接中。。。。。。");
Socket socket = server_3393.accept();
System.out.println("新的连接已建立: " +
socket.getInetAddress() +
":" + socket.getPort());
input_3393 = socket.getInputStream();
output_3393 = socket.getOutputStream();
DataInputStream din = new DataInputStream(input_3393);
DataOutputStream dout = new DataOutputStream(output_3393);
br_3393 = new BufferedReader(new InputStreamReader(System.in));
read_3393 = new BufferedReader(new InputStreamReader(input_3393));
while(true)
s_3393 = read_3393.readLine();
if(s_3393.equals("") || s_3393.equals("\r\n"))
break;
System.out.println("客服端请求信息:"+s_3393);
if(s_3393.startsWith("GET"))
StringTokenizer st_3393 = new StringTokenizer(s_3393);
s_3393 = st_3393.nextToken();
s_3393 = st_3393.nextToken();
s_3393 = "C:/Users/我心依旧/Pictures" + "."+s_3393;
FileInputStream file = null;
boolean fileexist = true;
try
file = new FileInputStream(s_3393);
catch ( FileNotFoundException e )
fileexist = false ;
System.out.println("文件不存在:"+e);
String serverLine = "Server: a simple java httpServer";
String statusLine = null;
String contentTypeLine = null;
String entityBody = null;
String contentLengthLine = "error";
if(fileexist)
statusLine = "HTTP/1.0 200 OK" + "\r\n" ;
contentTypeLine = "Content-type: " +
contentType( s_3393 ) + "\r\n" ;
contentLengthLine = "Content-Length: "
+ (new Integer(file.available())).toString()
+ "\r\n";
output_3393.write(statusLine.getBytes());
output_3393.write(serverLine.getBytes());
output_3393.write(contentTypeLine.getBytes());
output_3393.write(contentLengthLine.getBytes());
output_3393.write("\r\n".getBytes());
if(fileexist)
byte[] buffer = new byte[1024] ;
int bytes = 0 ;
// 将文件输出到套接字输出流中
while ((bytes = file.read(buffer)) != -1 )
output_3393.write(buffer, 0, bytes);
file.close();
dout.close();
din.close();
input_3393.close();
output_3393.close();
catch (IOException e)
e.printStackTrace();
private static String contentType(String fileName)
if (fileName.endsWith(".htm") || fileName.endsWith(".html"))
return "text/html";
return "fileName";
如果楼主的目的是: 只通过一次http请求,就把html文本内容以及jpg2进制流内容都返回,那需要处理的是客户端(通常的浏览器是不可能支持的,除非自己写的客户端)如何解析展现服务器端返回的流问题, 而不是服务端如何返回的问题。 参考技术A 自己判断请求的文件类型、请求的URL,根据情况去取文件,图片文件返回流就可以了 参考技术B 额 参考技术C 自己判断请求的文件类型、请求的URL
Java后台开发Servlet学习
一、Servlet介绍
开始接触一个新的东西,首先要知道它是干什么的吧。Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,主要功能在于交互式地浏览和修改数据,生成动态Web内容。我自己的理解就是对客户端或者浏览器发送的请求进行处理,作出相应的响应。其过程如下:
-
客户端发送请求至服务器端;
-
服务器将请求信息发送至 Servlet;
-
Servlet 生成响应内容并将其传给服务器。响应内容动态生成,通常取决于客户端的请求;
-
服务器将响应返回给客户端。
二、环境配置
需要准备的:
1.eclipse
2.MySQL
3.Tomcat
具体怎么配置不说了,网上教程很多
三、创建一个servlet
首先创建一个Dynamic Web Project项目
工程名
下面都是直接下一步,到最后一步的时候记得勾上这个
点击完成,项目就创建完毕了,先来看看项目的结构
首先是src文件夹/包,里面是各种源代码,servlet类也是在这里面创建,然后是Libraries,是你包含的各种库/包(jar),再然后是web.xml,这个也就是之前创建项目勾选自动创建的,这个是项目的配置文件,servlet写出来也需要用这个文件配置之后才能访问到,下面我们来驾驶创建第一个servlet吧
右键src新建->servlet
Java package,也就是你想把这个servlet类放在哪个包里面
class name ,servlet类名
一直下一步,在最后勾选上doPost和doGet
点击完成
我们需要做的就是将doPost、doGet实现,两者的差别我也不清楚在哪,目前的理解就是两种不同的传递信息的方式
我们先来看看doGet
首先是类型,void型,也就是没有返回值
然后是参数,参数有两个,request和response,也就是请求和响应,请求中包含客户端传入的信息,比如客户端需要登录或者注册时就会将账号密码写入request中,然后发送给服务端,服务端或者说servlet可以通过request.getParameter(String arg0)来获取其中的信息,传入的参数是变量名,返回的是变量的值(string格式),response则是对请求的响应,目前我了解到的就只有getWriter函数,这个函数可以得到一个PrintWriter对象,该对象可以向客户端/浏览器发送文本字符,下面我们先简单的做一个HelloWorld的输出
首先用response获取PrintWriter对象
PrintWriter out = response.getWriter();
然后用out进行输出
out.println("HelloServlet!");
接下来我们去配置xml文件
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <servlet> <!-- 类名 --> <servlet-name>HelloWorld</servlet-name> <!-- 所在的包 --> <servlet-class>com.test.demo.HelloWorld</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloWorld</servlet-name> <!-- 访问的网址 --> <url-pattern>/servlet/HelloWorld</url-pattern> </servlet-mapping> </web-app>
要注意的就是类名 所在的包 访问的路径几个地方
接下来就可以运行看看结果了
右键点击项目名,运行方式->Run on Server
阿嘞,这和说好的不太一样,其实是正常的,因为输入的路径根本就不对嘛,在后面加上servlet/HelloWorld就可以啦
路径是根据我们xml中配置的情况决定的,具体的我也不太懂2333,但是可以看这个
这个也就是在后面接上什么调用什么类,所以我们在后面加上/HelloWorld也是可以的
嗯,差不多就是这些了,下一篇写连接MySQL吧
以上是关于用java编写的web服务器端如何响应嵌入JPEG 文件的HTML页面的主要内容,如果未能解决你的问题,请参考以下文章
如何将 jpeg 帧从 java 客户端流式传输到 python 服务器