问题
在NO.1中,已经解决了由于写错文件位置而导致浏览器无法获取html页面的问题
但是,还剩下一个问题就是,浏览器必须输入绝对路径,然后发送给客户端,客户端再一一分割,形成合适的路径,然后找到html文件,再返回给浏览器解析。
这样的用户体验无疑是很差的,因此要做到,用户只需要在浏览器输入简单的URL就能访问到html页面。
解决思路:
1:使用 if 语句
在NO.1中,浏览器输入的是http://127.0.0.1:8989/WEBjava/B_S_webMod/web/index.html 这样的绝对路径
现在只需要改成,http://127.0.0.1:8989/abc即可
然后当服务器端接收到 浏览器发过来的 请求是 GET /abc HTTP/1.1 的时候
使用一下语句 if ( line.euqals( "GET /abc HTTP/1.1" ) { //注意这里是字符串(引用类型)之间的比较,要用 .......... // A . equals ( B ) } // 这里的line表示浏览器发过来的请求信息
尝试:
import java.io.*;
import java.net.*;
public class test {
public static void main(String[] args) throws Exception {
ServerSocket server = new ServerSocket(8989);
Socket whichSocket = server.accept();
InputStream ipts = whichSocket.getInputStream();
BufferedReader br = new BufferedReader (new InputStreamReader(ipts)) ;
String line = br.readLine();
System.out.println(line); //浏览器发过来的请求信息
if ( line.equals("GET /abc HTTP/1.1") ) //如果信息对应则执行下面代码
{
FileInputStream fipts = new FileInputStream("C:/Users/Administrator/Desktop/html/5.html"); 这里直接把页面文件的绝对路径写上,无论是java目录下的,还是原本html文件的绝对路径,只要找得到都行,注意一点,URL地址的分隔线要用 / 这样的划线
OutputStream otps = whichSocket.getOutputStream();
otps.write("HTTP/1.1 200 OK\r\n".getBytes());
otps.write("Content-Type:text/html\r\n".getBytes());
otps.write("\r\n".getBytes());
int len = 0;
byte[] bytes = new byte[1024];
while ((len = fipts.read(bytes)) != -1 ){
otps.write(bytes,0,len);
}
fipts.close();
}
ipts.close();
whichSocket.close();
server.close();
}
}
结果:
浏览器成功访问到html页面,但图片啥的没有显示,不过没关系,这次主要解决使用简便URL访问的问题