首页 >> 大全

简单的Java服务器功能——实现静态页面的访问

2023-09-17 大全 33 作者:考证青年

一、这个实验实现对任意HTML页面(或文本文件)的访问。

1.新建类,实现对浏览请求信息的简单分解和提取。

2.新建类,实现对所需响应文件的读取,并响应给浏览器。

3.完善服务器程序,实现连续的请求进行响应。

4.可以加个多线程功能,实现对多个客户端同时请求进行响应(这个这里没实现);

二、实现步骤:

1.新建的Java项目的目录结构如下:

_java实现日历签到功能_java重置按钮功能实现

2..java类的具体代码如下:

package imitatetomcat;import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;/*处理请求信息的类,该类只简单获取首行中请求资源名*/
class Request{private InputStream input;private String uri;public Request(InputStream input) {this.input = input;}public void parse() {int i;byte[] buf = new byte[1048];try {i = input.read(buf);}catch (IOException e) {e.printStackTrace();i = -1;}String str=new String(buf);//在控制台输出请求信息System.out.print(str);//截取请求Urluri = parseUri(str);//在控制台输出请求Url,看是否正确// System.out.println(uri);}//从请求信息中截取请求Url,即首行的中间部分private String parseUri(String requestString) {int index1, index2;index1 = requestString.indexOf(' ');if (index1 != -1) {index2 = requestString.indexOf(' ', index1 + 1);if (index2 > index1)return requestString.substring(index1 + 2, index2);}return null;}public String getUri() {return uri;}
}/* 处理响应信息的类 */
class Response{Request request;OutputStream output;public Response(OutputStream output) {this.output = output;}public void setRequest(Request request) {this.request = request;}//1.加响应头//2.读取文件public void sendStaticResource() throws IOException {byte[] bytes = new byte[1024*1024];//响应的内容假如不超过1024*1024个字节FileInputStream fis = null;try {System.out.println(StaticWebServer.WEB_ROOT+ File.separator+request.getUri());File file = new File(StaticWebServer.WEB_ROOT+ File.separator+request.getUri());if (file.exists()) {fis = new FileInputStream(file);int ch = fis.read(bytes, 0, 1024*1024);String str="http/1.1 200 ok\r\n\r\n";output.write(str.getBytes());output.write(bytes, 0, ch);}else {//如果没有发现文件,返回404错误String errorMessage = "HTTP/1.1 404 File Not Found\r\n" +"Content-Type: text/html\r\n" +"Content-Length: 23\r\n" +"\r\n" +"

File Not Found

";output.write(errorMessage.getBytes());}}catch (Exception e) {System.out.println(e.toString() );}finally {if (fis!=null)fis.close();}}} public class StaticWebServer {//定义网页所在的目录位置public static final String WEB_ROOT=System.getProperty("user.dir") + File.separator+ "webroot"; public static void main(String[] args) {try {ServerSocket server = new ServerSocket(8080);while(true) {Socket socket = server.accept();//在控制台输出浏览器的IP地址和端口号System.out.println(socket.getInetAddress()+":"+socket.getPort());InputStream in=socket.getInputStream();OutputStream out=socket.getOutputStream();//把处理请求和响应的工作交给类Request和ResponseRequest request=new Request(in);request.parse();Response response=new Response(out);response.setRequest(request);response.sendStaticResource();in.close();out.close();socket.close();}//server.close();} catch (IOException e) {e.printStackTrace();}} }

3.index.html的具体代码如下:



Welcome


_java实现日历签到功能_java重置按钮功能实现
_java重置按钮功能实现_java实现日历签到功能 

Welcome to nucleic acid testing.

4.浏览器访问的结果:

三、请求数据的简单分析

_java重置按钮功能实现_java实现日历签到功能

1.四次请求和其中请求头

网页中图片和声音文件的请求是相对网页index.html请求的异步请求。

2.浏览器的端口号在不断的变化

从上面四张图中,可以看到端口号每次请求都发生了变化,也表明了这是不同于上一次的请求。

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了