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

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

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

1 监听端口可以配置;

2 可以配置的一个工作目录;

3 GET请求可以获得相对于该工作目录的静态文件的内容,内容格式限定为html,css,js,json,xml,txt,jpg,gif,png,ico;

a) 例如 GET /f/test1html返回工作目录下f文件夹下test1html内容;

b) 在GET请求的的应答中尽可能多的在HTTP头中返回些能获得的到的标准的头信息;

4 POST请求可以在工作目录中创建请求路径对应的文件,文件内容为POST请求的内容;

a) 例如 POST /f/test2html,在工作目录下f文件夹下创建test2html文件,并将POST内容作为test2html的内容。

5 PUT请求可以替换对应路径的文件,修改的内容为PUT请求的内容。注意与POST不同。

a) 例如 PUT /f/test2html,在工作目录下f文件夹替换test2html文件的内容,并将PUT内容作为test2html的内容。

6 DELET请求可以删除对应路径的文件。

a) 例如 PUT /f/test2html,在工作目录下f文件夹删除test2html文件。

7 POST,PUT,DELETE成功后返回200,出现找不到文件的情况返回404错误,出现读写文件错误返回500错误。

8 特别的处理~路径下的GET请求,其包含2个参数,一个是类名,一个是方法名,这些方法都是些无参数并且以字符串为返回值的方法,GET请求应返回这些方法的返回值。

a) 例如 GET /~class=comtestTest&method=getTIme,则调用comtestTest类中String getTIme()方法,将返回值作为GET请求的返回;

b) 若找不到类或方法返回404错误;

c) 若出错返回500错误;

9 特别的处理$路径下的GET请求,能够为浏览器添加cookie,key为sid,值为UUID的随机字符串。

注意:不是在tomcat之类servlet容器上开发,而是要开发个类似servlet容器的东西。

tomcat就是web服务器,我也是今年刚刚毕业的,不过我现在在学习java web开发,一般情况下b/s结构是要用tomcat的,如果你只是单机应用程序连接数据库的话不用也可以哈,但是可能需要你的一些servlet的技术才行哟。

下面是我自己写的一个读取并显示txt文件的demo,希望对您有帮助。

public class Client {

public static void main(String[] args) {

ClientFrame f = new ClientFrame();

}

}

import javaawtBorderLayout;

import javaawtContainer;

import javaawtDimension;

import javaawtGridLayout;

import javaawtToolkit;

import javaawteventActionEvent;

import javaawteventActionListener;

import javaioDataInputStream;

import javaioDataOutputStream;

import javaioIOException;

import javanetSocket;

import javanetUnknownHostException;

import javautilVector;

import javaxswingBorderFactory;

import javaxswingJButton;

import javaxswingJFrame;

import javaxswingJList;

import javaxswingJScrollPane;

import javaxswingJTextArea;

import javaxswingeventListSelectionEvent;

import javaxswingeventListSelectionListener;

public class ClientFrame extends JFrame implements ActionListener, ListSelectionListener{

private JList list = null;

private JButton sbtn = null;

private JButton cbtn = null;

private Vector v = null;

private JTextArea txt = null;

private Container control = null;

private Container btn = null;

private Socket client = null;

private DataInputStream reader = null;

private DataOutputStream writer = null;

public ClientFrame(){

thislist = new JList();

thislistsetBorder(BorderFactorycreateTitledBorder("文件列表"));

thislistaddListSelectionListener(this);

thissbtn = new JButton("显示");

thissbtnaddActionListener(this);

thiscbtn = new JButton("清除");

thiscbtnaddActionListener(this);

thiscontrol = new Container();

thiscontrolsetPreferredSize(new Dimension(150, 400));

thiscontrolsetLayout(new BorderLayout());

thiscontroladd(new JScrollPane(thislist),BorderLayoutCENTER);

thisbtn = new Container();

thisbtnsetLayout(new GridLayout(1,2));

btnadd(sbtn);

btnadd(cbtn);

thiscontroladd(thisbtn,BorderLayoutSOUTH);

thistxt = new JTextArea();

thistxtsetEditable(false);

thistxtsetSize(350, 400);

thissetTitle("客户端");

thissetSize(500, 400);

thissetVisible(true);

Dimension displaySize = ToolkitgetDefaultToolkit()getScreenSize();

thissetLocation((displaySizewidth - thisgetWidth()) / 2, (displaySizeheight - thisgetHeight()) / 2);

thissetLayout(new BorderLayout());

thisadd(thiscontrol,BorderLayoutWEST);

thisadd(new JScrollPane(thistxt),BorderLayoutCENTER);

thissetDefaultCloseOperation(JFrameEXIT_ON_CLOSE);

try {

//thisclient = new Socket("1921683234",6666);

thisclient = new Socket("1921681100",6666);

thisreader = new DataInputStream(clientgetInputStream());

thiswriter = new DataOutputStream(clientgetOutputStream());

} catch (UnknownHostException e) {

eprintStackTrace();

} catch (IOException e) {

eprintStackTrace();

}

}

public void actionPerformed(ActionEvent event){

if(eventgetSource() == sbtn){

if(v == null){

v = new Vector();

}

else{

vclear();

}

try {

writerwriteUTF("getfilelist");

writerflush();

String t = readerreadUTF();

while( t != null && !tequals("")){

vadd(t);

t = readerreadUTF();

}

} catch (UnknownHostException e) {

eprintStackTrace();

} catch (IOException e) {

eprintStackTrace();

}

thislistsetListData(v);

}

if(eventgetSource() == cbtn){

thistxtsetText("");

}

}

public void valueChanged(ListSelectionEvent e) {

int i = thislistgetSelectedIndex();

if (! thislistgetValueIsAdjusting() && i != -1) {

try {

writerwriteUTF("getfilecontent_" + i);

writerflush();

String tmp = readerreadUTF();

thistxtsetText(tmp);

} catch (IOException e1) {

e1printStackTrace();

}

}

}

}

import javaioDataInputStream;

import javaioDataOutputStream;

import javaioFile;

import javaioFileInputStream;

import javaioIOException;

import javaioInputStreamReader;

import javaioReader;

import javanetServerSocket;

import javanetSocket;

import javautilArrayList;

import javautilIterator;

public class Server {

static ArrayList<File> fileArray = new ArrayList<File>();

public static void main(String args[]) {

ServerSocket server = null;

Socket client = null;

String cmd = "";

try {

server = new ServerSocket(6666);

client = serveraccept();

DataInputStream reader = new DataInputStream(clientgetInputStream());

DataOutputStream writer = new DataOutputStream(clientgetOutputStream());

while(true){

cmd = readerreadUTF();

Systemoutprintln(cmd);

if(cmdequals("getfilelist")){

fileArrayclear();

//fileArray = getFile(new File("D:/tmp"));

fileArray = getFile(new File("D:/学习/教程/学习笔记"));

String fn = "";

for(int k = 0; k < fileArraysize(); k ++){

fn = fileArrayget(k)getName();

writerwriteUTF(fn);

writerflush();

}

writerwriteUTF("");

}

if(cmdstartsWith("getfilecontent_")){

int i = IntegerparseInt(cmdsplit("_")[1]);

File f = fileArrayget(i);

Reader in = new InputStreamReader(new FileInputStream(f));

int tempbyte;

String str = "";

while ((tempbyte = inread()) != -1) {

str += (char)tempbyte;

//Systemoutprintln(str);

}

inclose();

writerwriteUTF(str);

}

}

} catch (IOException e) {

eprintStackTrace();

}

}

private static ArrayList<File> getFile(File f) {

File[] ff = flistFiles();

for (File child : ff) {

if (childisDirectory()) {

getFile(child);

} else {

fileArrayadd(child);

}

}

return fileArray;

}

}

Java是一门编程语言,可以用来编写各种类型的程序,包括Web应用程序。而Tomcat是一个Web应用程序服务器,可以用来运行Java Web应用程序。

尽管使用Tomcat可以轻松地创建和部署Java Web应用程序,但是Java语言本身也有内置的HTTP服务器,可以用来创建和运行Web应用程序,而不需要使用Tomcat这样的第三方服务器。

Java内置的HTTP服务器主要包括两个:HttpURLConnection和HttpServer。HttpURLConnection可以用来创建HTTP客户端,发送HTTP请求和接收HTTP响应。而HttpServer则是一个简单的HTTP服务器,可以用来创建和运行Web应用程序。

使用Java内置的HTTP服务器来创建Web应用程序的好处是,不需要依赖第三方服务器,可以在运行程序的同时,轻松地创建和运行Web应用程序。另外,使用Java内置的HTTP服务器还可以减少程序的依赖,降低程序的复杂性和维护成本。

当然,如果需要创建更为复杂的Web应用程序,使用Tomcat等第三方服务器仍然是一种不错的选择,因为这些服务器提供了更多的功能和扩展性,可以满足更加复杂的需求。

服务器端(注意要先启动服务器端)

import javaio;

import javanet;

import javaawt;

import javaawtevent;

public class server extends Frame implements ActionListener {

Label label = new Label("交谈内容");

Panel panel = new Panel();

TextField tf = new TextField(10);

TextArea ta = new TextArea();

ServerSocket server;

Socket client;

InputStream in;

OutputStream out;

public server() {

super("服务器");

setSize(250, 250);

paneladd(label);

paneladd(tf);

tfaddActionListener(this);

add("North", panel);

add("Center", ta);

addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent e) {

Systemexit(0);

}

});

show();

try {

server = new ServerSocket(4000);

client = serveraccept();

taappend("客户机是:" + clientgetInetAddress()getHostName() + "\n\n");

in =clientgetInputStream();

out= clientgetOutputStream();

} catch (IOException ioe) {

}

while (true) {

try {

byte[] buf = new byte[256];

inread(buf);

String str = new String(buf);

taappend("客户机说:" + str + "\n\n");

} catch (IOException e) {

}

}

}

public void actionPerformed(ActionEvent e) {

try {

String str = tfgetText();

byte[] buf = strgetBytes();

tfsetText(null);

outwrite(buf);

taappend("我说:" + str + "\n");

} catch (IOException ioe) {

}

}

public static void main(String[] args) {

new server();

}

}

客户端

import javaio;

import javanet;

import javaawt;

import javaawtevent;

public class client extends Frame implements ActionListener {

Label label = new Label("交谈内容");

Panel panel = new Panel();

TextField tf = new TextField(10);

TextArea ta = new TextArea();

Socket client;

InputStream in;

OutputStream out;

public client() {

super("客户机");

setSize(250, 250);

paneladd(label);

paneladd(tf);

tfaddActionListener(this);

add("North", panel);

add("Center", ta);

addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent e) {

Systemexit(0);

}

});

show();

try {

client = new Socket(InetAddressgetLocalHost(), 4000);

taappend("服务器是:" + clientgetInetAddress()getHostName() + "\n\n");

in = clientgetInputStream();

out = clientgetOutputStream();

} catch (IOException ioe) {

}

while (true) {

try {

byte[] buf = new byte[256];

inread(buf);

String str = new String(buf);

taappend("服务器说:" + str + "\n");

} catch (IOException e) {

}

}

}

public void actionPerformed(ActionEvent e) {

try {

String str = tfgetText();

byte[] buf = strgetBytes();

tfsetText(null);

outwrite(buf);

taappend("我说:" + str + "\n");

} catch (IOException iOE) {

}

}

public static void main(String args[]) {

new client();

}

}

这个只能在自己一台电脑上先启动服务器再启动客户端才行,要想一台机子启动服务器端一台机子启动客户端需要把客户端的 client = new Socket(InetAddressgetLocalHost(), 4000);改成 client = new Socket("服务器Ip", 4000);(前提是两台机子连在局域网里面的)

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 使用Java开发一个HTTP服务器,能够处理POST,GET,PUT,DELETE请求。

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情