JAVA-Servlet忘记实现HttpServlet接口处理( 二 )

3.8响应404【理解】
出现情况
客户端浏览器请求了一个服务器中不存在的动态资源
导致结果
服务器中代码出现异常,程序停止
解决方案
【JAVA-Servlet忘记实现HttpServlet接口处理】如果请求的动态资源不存在,服务器根据请求的uri找到对应的Servlet时为null,继续调用方法会出现异常增加一个非空的判断,如果不为null,则继续处理请求,调用方法如果为null,则响应404
public class DynamicResourceProcess {    //执行指定动态资源的service方法    //参数一    //由于后期可能根据用户请求的uri做出相应的处理.    //参数二    //要给用户响应数据,那么就需要使用到httpResponse.    public void process(HttpRequest httpRequest,HttpResponse httpResponse){        //获取请求的uri        String requestURI = httpRequest.getRequestURI();        //根据请求的uri到map集合中直接找到对应的servlet的对象        HttpServlet httpServlet = ServletConcurrentHashMap.map.get(requestURI);        if(httpServlet != null){            //调用service方法对请求进行处理并响应            httpServlet.service(httpRequest,httpResponse);        }else{            //浏览器请求的动态资源不存在            //响应404            response404(httpResponse);        }    }    //浏览器请求动态资源不存在,响应404的方法    private void response404(HttpResponse httpResponse) {        try {            //准备响应行            String responseLine = "HTTP/1.1 404 NOT FOUNDrn";            //准备响应头            String responseHeader = "Content‐Type: text/html;charset=UTF‐8rn";            //准备响应空行            String emptyLine = "rn";            //拼接在一起            String result = responseLine + responseHeader + emptyLine;            //把响应行,响应头,响应空行去响应给浏览器            SelectionKey selectionKey = httpResponse.getSelectionKey();            SocketChannel channel = (SocketChannel) selectionKey.channel(); ByteBuffer byteBuffer1 = ByteBuffer.wrap(result.getBytes());            channel.write(byteBuffer1);            //给浏览器 响应 响应体内容            ByteBuffer byteBuffer2 = ByteBuffer.wrap("404 NOT FOUND....".getBytes());            channel.write(byteBuffer2);            //释放资源            channel.close();        } catch (IOException e) {            e.printStackTrace();        }    }}



推荐阅读