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(); } }}
推荐阅读
- 多年前借鉴b/s优势实现基于.net的c/s框架
- 百度|车位级导航!百度地图助力重庆永川实现“停车自由”
- ipad密码忘记了怎么办?
- 苹果|苹果iOS 16照片新功能亮眼:一步实现抠图 PS弱爆了
- 食疗实现美白祛斑
- 忘记一个人需要屏蔽朋友圈吗?忘了屏蔽某人又不想删除朋友圈
- 拼多多用5年实现年GMV破万亿?拼多多用5年实现年GMV破万亿,但要盈利依然举步维艰
- 离职|为什么清朝无法实现近代化?西方学者:农业压倒一切,精英不在城市
- 保险箱密码忘记了怎么办 保险柜开启方法
- 行李箱密码忘记了怎么办 行李箱密码锁打不开怎么办
