04-返回指定页面内容2

目标

  • 能够解决资源访问过程中存在的问题

1. 如果访问的页面不存在怎么办?

如果访问一个不存在的页面,如: http://192.168.31.124:8080/xxx.html 服务器报错

FileNotFoundError: [Errno 2] No such file or directory: 'static/xxx.html'

image-20181023104554403

image-20181023104659365

原因分析:xxx.htmlstatic/xxx.html 路径下不存在,导致with open 无法打开对应路径下的文件,所以报错!

# 3.5 根据资源路径,读取对应路径下的文件,并展示
        with open("static"+user_request['path'], "rb") as file:
            response_body = file.read()

解决办法:with ... open 代码增加异常处理,上述代码改为:

try:
    # 3.5 根据资源路径,读取对应路径下的文件,并展示
    with open("static"+user_request['path'], "rb") as file:
        response_body = file.read()
except Exception as e:
    # 重新设置响应行
    response_line = "HTTP/1.1 404 Not Found\r\n"
    response_body = "Error!! %s" % str(e)
    # 字符串转换为把二进制数据数据
    response_body = response_body.encode()

2. 默认首页判断

当我们直接在地址栏输入:http://192.168.31.124:8080/ 发现报错,这是因为:

http://192.168.31.124:8080 ---> 请求行是这样的 “GET / HTTP/1.1“ ,资源路径为 “/“

此时服务器端无法正确读取文件

image-20181023105422636

当出现这种问题后,应该访问默认的首页,也即是static/index.html 页面

改进如下:

    if file_path == "/":
        file_path = "/index.html"

image-20181024232132094

运行结果:

web_v4_2