用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";

html页面和图片流本来就是各自独立的http请求返回得到的,因此使用多线程单独处理,可以实现。
如果楼主的目的是: 只通过一次http请求,就把html文本内容以及jpg2进制流内容都返回,那需要处理的是客户端(通常的浏览器是不可能支持的,除非自己写的客户端)如何解析展现服务器端返回的流问题, 而不是服务端如何返回的问题。
参考技术A 自己判断请求的文件类型、请求的URL,根据情况去取文件,图片文件返回流就可以了 参考技术B 参考技术C 自己判断请求的文件类型、请求的URL

Java后台开发Servlet学习

一、Servlet介绍

  开始接触一个新的东西,首先要知道它是干什么的吧。Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,主要功能在于交互式地浏览和修改数据,生成动态Web内容。我自己的理解就是对客户端或者浏览器发送的请求进行处理,作出相应的响应。其过程如下:

  1. 客户端发送请求至服务器端;
  2. 服务器将请求信息发送至 Servlet;
  3. Servlet 生成响应内容并将其传给服务器。响应内容动态生成,通常取决于客户端的请求;
  4. 服务器将响应返回给客户端。

二、环境配置

  需要准备的:

  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页面的主要内容,如果未能解决你的问题,请参考以下文章

Java后台开发Servlet学习

如何将 jpeg 帧从 java 客户端流式传输到 python 服务器

如何编写一个简单的java web前后端实例

昆明java培训学校告诉你web网站优化可以如何实现?

java 网络编程中 tcp连接问题。 例如编写聊天室 , c/s结构的c和s端都是不间断实现请求--响应 。

servlet3.0理解