导航:首页 > 编程语言 > javahttp服务器编程

javahttp服务器编程

发布时间:2023-06-15 05:03:17

1. java 如何实现 http协议传输

Java 6 提供了一个轻量级的纯 Java Http 服务器的实现。下面是一个简单的例子:

public static void main(String[] args) throws Exception{
HttpServerProvider httpServerProvider = HttpServerProvider.provider();
InetSocketAddress addr = new InetSocketAddress(7778);
HttpServer httpServer = httpServerProvider.createHttpServer(addr, 1);
httpServer.createContext("/myapp/", new MyHttpHandler());
httpServer.setExecutor(null);
httpServer.start();
System.out.println("started");
}

static class MyHttpHandler implements HttpHandler{
public void handle(HttpExchange httpExchange) throws IOException {
String response = "Hello world!";
httpExchange.sendResponseHeaders(200, response.length());
OutputStream out = httpExchange.getResponseBody();
out.write(response.getBytes());
out.close();
}
}

然后,在浏览器中访问 http://localhost:7778/myapp/

2. JAVA代码发送HTTP请求问题(我想实现和服务器进行一次连接时发送两次请求)

我觉得你这个问题的解决应该是你的程序做一次这个网站的登陆,而且这个登陆的动作应该是需要发生在你这段代码以前,因为你这段代码的动作其实只是访问了一下那个网站,但是没有任何的用户或者是其他的信息。
一般来说你登陆以后,你会获得一个token,用那个token就可以让网站认为你已经登陆,然后改密码什么就好办了。建议你先抓一下IE的包看看是人家的通信是怎么样的,然后用java做就好了。或者是那个网站有开发者文档就最好了。

3. 关于用Java在Tomcat上部署http服务的问题。

你用SOCKET编程需要编写两个端,一个是客户端,一个是服务端。
既然部署上TOMCAT,那么服务端的编程就变成TOMCAT上服务端的SERVLET的编程。写一个SERVLET接收请求、返回响应。你想打印什么都可以。
这个时候客户端就简单成一个表单页面(如登录页面那样),可以使用html,jsp编写。也可以直接使用URL在浏览器中进行请求。也可以仍然SOCKET发送、接收请求。
你需要简单的学习下SERVLET/JSP的WEB编程。前台的页面、后台的SERVLET是对socket编程的封装。

4. 如何用Java实现Web服务器

一 HTTP协议的作用原理

WWW是以Internet作为传输媒介的一个应用系统 WWW网上最基本的传输单位是Web网页 WWW的工作基于客户机/服务器计算模型 由Web 浏览器(客户机)和Web服务器(服务器)构成 两者之间采用超文本传送协议(HTTP)进行通信 HTTP协议是基于TCP/IP协议之上的协议 是Web浏览器和Web服务器之间的应用层协议 是通用的 无状态的 面向对象的协议 HTTP协议的作用原理包括四个步骤

( ) 连接 Web浏览器与Web服务器建立连接 打开一个称为socket(套接字)的虚拟文件 此文件的建立标志着连接建立成功

( ) 请求 Web浏览器通过socket向Web服务器提交请求 HTTP的请求一般是GET或POST命令(POST用于FORM参数的传递) GET命令的格式为

GET 路径/文件名 HTTP/

文件名指出所访问的文件 HTTP/ 指出Web浏览器使用的HTTP版本

( ) 应答 Web浏览器提交请求后 通过HTTP协议传送给Web服务器 Web服务器接到后 进行事务处理 处理结果又通过HTTP传回给Web浏览器 从而在Web浏览器上显示出所请求的页面

例 假设客户机与 /mydir/l建立了连接 就会发送GET命令 GET /mydir/l HTTP/ 主机名为的Web服务器从它的文档空间中搜索子目录mydir的文件l 如果找到该文件 Web服务器把该文件内容传送给相应的Web浏览器

为了告知 Web浏览器传送内容的类型 Web服务器首先传送一些HTTP头信息 然后传送具体内容(即HTTP体信息) HTTP头信息和HTTP体信息之间用一个空行分开

常用的HTTP头信息有

① HTTP OK

这是Web服务器应答的第一行 列出服务器正在运行的HTTP版本号和应答代码 代码 OK 表示请求完成

② MIME_Version

它指示MIME类型的版本

③ content_type 类型

这个头信息非常重要 它指示HTTP体信息的MIME类型 如 content_type text/指示传送的数据是HTML文档

④ content_length 长度值

它指示HTTP体信息的长度(字节)

( ) 关闭连接 当应答结束后 Web浏览器与Web服务器必须断开 以保证其它Web浏览器能够与Web服务器建立连接

二绝败胡 Java实现Web服务器功能的程序设计

根据上述HTTP协议的作用原理 实现GET请求的Web服务器程序的方法如下

( ) 创并拦建ServerSocket类对象 监听端口 这是为了区别于HTTP的标准TCP/IP端口 而取的

( ) 等待 接受客户机连接到端口 得到与客户机连接的socket

( )枯大 创建与socket字相关联的输入流instream和输出流outstream

( ) 从与socket关联的输入流instream中读取一行客户机提交的请求信息 请求信息的格式为 GET 路径/文件名 HTTP/

( ) 从请求信息中获取请求类型 如果请求类型是GET 则从请求信息中获取所访问的HTML文件名 没有HTML文件名时 则以l作为文件名

( ) 如果HTML文件存在 则打开HTML文件 把HTTP头信息和HTML文件内容通过socket传回给Web浏览器 然后关闭文件 否则发送错误信息给Web浏览器

( ) 关闭与相应Web浏览器连接的socket字

下面的程序是根据上述方法编写的 可实现多线程的Web服务器 以保证多个客户机能同时与该Web服务器连接

程序 WebServer java文件

//WebServer java 用JAVA编写Web服务器

import java io *

import *

public class WebServer {

public static void main(String args[]) {

int i= PORT=

ServerSocket server=null

Socket client=null

try {

server=new ServerSocket(PORT)

System out println( Web Server is listening on port +server getLocalPort())

for ( ) {client=server accept() //接受客户机的连接请求

new ConnectionThread(client i) start()

i++

}

} catch (Exception e) {System out println(e) }

}

}

/* ConnnectionThread类完成与一个Web浏览器的通信 */

class ConnectionThread extends Thread {

Socket client //连接Web浏览器的socket字

int counter //计数器

public ConnectionThread(Socket cl int c) {

client=cl

counter=c

}

public void run() //线程体

{try {

String destIP=client getInetAddress() toString() //客户机IP地址

int destport=client getPort() //客户机端口号

System out println( Connection +counter+ connected to +destIP+ on port +destport+ )

PrintStream outstream=new PrintStream(client getOutputStream())

DataInputStream instream=new DataInputStream(client getInputStream())

String inline=instream readLine() //读取Web浏览器提交的请求信息

System out println( Received +inline)

if (getrequest(inline)) { //如果是GET请求

String filename=getfilename(inline)

File file=new File(filename)

if (file exists()) { //若文件存在 则将文件送给Web浏览器

System out println(filename+ requested )

outstream println( HTTP/ OK )

outstream println( MIME_version )

outstream println( Content_Type text/ )

int len=(int)file length()

outstream println( Content_Length +len)

outstream println( )

sendfile(outstream file) //发送文件

outstream flush()

} else { //文件不存在时

String notfound=

Error file not found

outstream println( HTTP/ no found )

outstream println( Content_Type text/ )

outstream println( Content_Length +notfound length()+ )

outstream println( )

outstream println(notfound)

outstream flush()

}

}

long m =

while (m < ) {m ++ } //延时

client close()

} catch (IOException e) {

System out println( Exception +e)

}

}

/* 获取请求类型是否为 GET */

boolean getrequest(String s) {

if (s length()> )

{if (s substring( ) equalsIgnoreCase( GET )) return true

}

return false

}

/* 获取要访问的文件名 */

String getfilename(String s) {

String f=s substring(s indexOf(′ ′)+ )

f=f substring( f indexOf(′ ′))

try {

if (f charAt( )==′/′)

f=f substring( )

} catch ( e) {

System out println( Exception +e)

}

if (f equals( )) f= l

return f

}

/*把指定文件发送给Web浏览器 */

void sendfile(PrintStream outs File file) {

try {

DataInputStream in=new DataInputStream(new FileInputStream(file))

int len=(int)file length()

byte buf[]=new byte[len]

in readFully(buf)

outs write(buf len)

outs flush()

in close()

} catch (Exception e) {

System out println( Error retrieving file )

System exit( )

}

}

}

程序中的ConnectionThread线程子类用来分析一个Web浏览器提交的请求 并将应答信息传回给Web浏览器 其中 getrequest()方法用来检测客户的请求是否为 GET getfilename(s)方法是从客户请求信息s中获取要访问的HTML文件名 sendfile()方法把指定文件内容通过socket传回给Web浏览器

对上述程序的getrequest()方法和相关部分作修改 也能对POST请求进行处理

三 运行实例

为了测试上述程序的正确性 将编译后的WebServer class ConnectionThread class和下面的l文件置于网络的某台主机的同一目录中(如 主机NT SRV的C JWEB目录)

程序 l文件

这是用JAVA写出的WEB服务器主页

年 月 日


首先在该主机上用java命令运行WebServer class

C jweb>java webserver

然后在客户机运行浏览器软件 在URL处输入WebServer程序所属的URL地址(如 ) 就在浏览器窗口显示出指定的HTML文档

注意 不能缺省端口号 如缺省 则运行该主机的正常WEB服务器

lishixin/Article/program/Java/hx/201311/26626

5. Java网络编程从入门到精通(23):HTTP消息头字段

专题推荐 网络编程 基础到进阶教程

一 通用头字段

Connection

这个字段只在HTTP 协议中存在 它决定了客户端和服务器进行了一次会话后 服务器是否立即关闭网络连接 在客户端最直接的表现是使用read方法(readLine方法也是一样)读完客户端请求的Web资源后 是否立即返回 (readLine返回null) Connection有两个值 Close和Keep Alive 当使用Connection Close时 和HTTP 协议是一样的 当read方法读完数据时立即返回 而使用Connection Keep Alive时 read方法在读完数据后还要烂局被阻塞一段时间 直接读取数据超时时间过后 还继续往下执行 在上一篇文章中讨论的readHttpResponse(……)方法实现的第 行可以验证Connection的作用 下面让我们来使用HTTP模拟器来做一个实验

( )在HTTP模拟器中输入如下的域名

( )HTTP模拟器中输入如下的HTTP请求信息

GET/HTTP/ 孙唤Host:

( )按两下回车(输入一个空行)后 发送请求消息 并得到如图 如示的HTTP响应消息头

( )输入y或Y后(在显示响应头后 要立刻输入Y或y) 显示响应消息的内容 在显示完内容后 大约过了 秒钟才进入 host port> 提示符(因为在sendHttpRequest()的实现代码中的 行设置了读取数据超时)

( )在 host port> 提示符下直接按回车 输入最近一次使用的域名和 端口 再次输入如下的HTTP请求

GET/HTTP/ Host: Connection:close

输入完以上的HTTP请求后 重新执行第 步操作 最后在显示HTTP响应消息内容后 直接直入了 host port> 提示符 除了这种方法 将请求的第一行改为GET / HTTP/ 这样也可以无需等待直接结束

通过设置Connection 可以在下载Web资源(如多线程下载工具 Web浏览器等)后 立即断开网络连接 这样可以有效地降低客户机的资源消耗

Date

这个Date头字段描述了请求消息和响应消息被创建的时间 这个字段值是一个HTTP date类型 它的格式必须是GMT(格林尼治)时间 GMT时间是就是北京时间减 小时 下面是Date字段的一个例子

Date:Tue Nov : : GMT

Content Length

指定消息实体的则历凯字节数 在请求消息中POST方法必须使用Content Length来指定请求消息的实体内容的字节数 在响应消息中这个字段值指定了当前HTTP响应所返回的Web资源的字节数

二 HTTP请求消息头字段

Host

Host字段用于指定客户端所访问的资源所在的主机名和端口号 如果端口号等于连接服务器时所使用的端口号 则端口号可以省略 下面是一个使用Host字段的一个例子

Host:

这个字段是必须的 如果HTTP请求不包含这个字段 服务器将返回 (Bad Request)响应状态

Accept

Accept字段头确定客户端可以接收的媒体类型 一般的格式是 */* 或 类型/ 子类型 这个子段头可以传递多个媒体类型 中间用 隔开 如下面是一个Accept的例子

Accept: image/gif image/jpg

如果请求头使用上述的Accept字段值 则服务器端在动态生成网页的IMG头时将首先包含gif格式的图像 如果gif图象不存在 则包含jpg格式的图象

User Agent

这个字段头用于指定客户端是用什么访问的服务器 如果是IE 浏览器 并且本机安装了 net 则User Agent会有如下的值

User Agent:Mozilla/ (patible;MSIE ;WindowsNT ;SV ;Maxthon; NETCLR ; NETCLR ;InfoPath ;InfoPath )

服务器可以通过这个字段检查客户机的浏览器版本 并根据不同的版本来确定向客户端发送的数据

Range

Range字段头通过服务器只传输一部分Web资源 这个字段头可以用来实现断点续传功能 有很多下载工具就是通过这个字段头进行断点续传的 Range字段可以通过三种格式设置要传输的字节范围

( )Range bytes=

传输范围从 到 字节

( )Range bytes=

传输Web资源中第 个字节以后的所有内容

( )Range bytes=

传输最后 个字节

三 HTTP响应消息头字段

Accept Ranges

这个字段说明Web服务器是否支持Range(是否支持断点续传功能) 如果支持 则返回Accept Ranges bytes 如果不支持 则返回Accept Ranges none

Content Range

指定了返回的Web资源的字节范围 这个字段值的格式是

开始字节位置—结束字节位置/Web资源的总字节数

下面是一个使用Content Range的例子

Content Range /

测试

在HTTP模拟器中连接服务器 并输入如下的HTTP请求消息

GET /nokiaguy/HttpSimulator rar HTTP/ Host: Range:bytes=

返回的响应消息头如图 所示

从上图可以看出 服务器支持断点继传功能 而且还可以验证Content Length的值是当前会话传过来的字节数 并不是Web资源的总的字节数 而Content Range字段值中 / 后面的数才是Web资源总的字节数

Location

lishixin/Article/program/Java/hx/201311/27047

6. 怎样用JAVA实现模拟HTTP请求,得到服务器的响应时间等参数

java.net.*;
publicclassHttpDemo{
publicstaticvoidmain(String[]args)throwsException{
URLurl=newURL('地址');
HttpURLConnectionhttp=(HttpURLConnection)url.openConnection();
//获取网页的源码
BufferedReader游兆br=newBufferedReader(newInputStreamReader(http.getInputStream()));
String枝磨衡line="";
while((line=br.readLine())!=null){
System.out.println(line);
}
br.close();
//获取参数:
Stringvalue=getRequestProperty(Stringkey);
猛做}
}

7. 使用Java开发一个HTTP服务器,能够处理POST,GET,PUT,DELETE请求。

使用Java开发一个HTTP服务器,能够处理POST,GET,PUT,DELETE请求。
1. 监听端口可以配置;
2. 可以配置的一个工作目录;
3. GET请求可以获得相对于该工作目录的静态文件的内容,内容格式限定为html,css,js,json,xml,txt,jpg,gif,png,ico;
a) 例如 GET /f/test1.html返回工作目录下f文件夹下test1.html内容;
b) 在GET请求的的应答中尽可能多的在HTTP头中返回些能获得的到的标准的头信息;
4. POST请求可以在工作目录中创建请求路径对应的文件,文件内容为POST请求的内容;
a) 例如 POST /f/test2.html,在工作目录下f文件夹下创建test2.html文件,并将POST内容作为test2.html的内容。
5. PUT请求可以替换对应路径的文件,修改的内容为PUT请求的内容。注意与POST不同。
a) 例如 PUT /f/test2.html,在工作目录下f文件夹替换test2.html文件的内容,并将PUT内容作为test2.html的内容。
6. DELET请求可以删除对应路径的文件。
a) 例如 PUT /f/test2.html,在工作目录下f文件夹删除test2.html文件。
7. POST,PUT,DELETE成功后返回200,出现找不到文件的情况返回404错误,出现读写文件错误返回500错误。
8. 特别的处理~路径下的GET请求,其包含2个参数,一个是类名,一个是方法名,这些方法都是些无参数并且以字符串为返回值的方法,GET请求应返回这些方法的返回值。
a) 例如 GET /~?class=com.test.Test&method=getTIme,则调用com.test.Test类中String getTIme()方法,将返回值作为GET请求的返回;
b) 若找不到类或方法返回404错误;
c) 若出错返回500错误;
9. 特别的处理$路径下的GET请求,能够为浏览器添加cookie,key为sid,值为UUID的随机字符串。
注意:不是在tomcat之类servlet容器上开发,而是要开发个类似servlet容器的东西。

8. java 如何搭建http服务器

看你具体是想做什么,现在现成的开源的java的http服务器有很多,像tomcat之类的都有http服务器功能,如果你只是单纯的需要用的话,直接用tomcat就好了

但是如果你是做要自己用java实现一个http服务器的话就要稍微麻烦一点

http服务器,本质上还是基于tcpip协议的服务器,首先用java的ServerSocket监听一个端口(也可以使用开源的server组件,如quickserver之类的),然后对客户端发上来的数据进行处理,这里就需要了解一下http协议了,因为上来的数据,都是按照http协议来组织的,你需要将请求数据解析后,将响应数据组织成http的响应,发回给客户端。这样一个简单的http服务器就实现了。

但是这个请求和响应都有很多种类,一个完整的http服务器应该要都能够支持,所以这里面的工作量还是有一点的。

另外,上面说的http服务器只是一个静态的服务器,如果你想让你写的服务具有动态功能,那你的服务器还得提供javaee的容器功能,这样做下去,没准你也能写一个tomcat出来了……

阅读全文

与javahttp服务器编程相关的资料

热点内容
怎么查看服务器地址和端口 浏览:184
加密朋克ai 浏览:155
新云服务器怎样添加d盘 浏览:669
php查看对象 浏览:75
程序员女孩跳舞视频 浏览:554
linux默认java 浏览:426
如何看漫威漫画app 浏览:789
安卓手机如何按拼音排布app 浏览:721
java中exceptionin 浏览:882
java131 浏览:868
学英语不登录的app哪个最好 浏览:299
安卓的后台运行怎么设置 浏览:135
如何撰写论文摘要以及编译sci 浏览:416
安卓如何使用推特贴吧 浏览:429
怎样避免程序员入狱 浏览:856
苹果方块消除安卓叫什么 浏览:535
安卓世界征服者2怎么联机 浏览:297
国企招的程序员 浏览:969
哪个app可以看watch 浏览:518
dns备用什么服务器 浏览:1002