从服务器得到html页面
一. 前言
在前上一章教程中,我们整理了代码的结构。
本章将在上一章的基础上,进一步扩展程序。
注:
1.本文针对初学Java的同学训练学习思路,请不要太纠结于细节问题。
2.本文旨在达到抛砖引玉的效果,希望大家扩展本例子,以学到更多知识的精髓。
学习本章需要准备的知识:
1.读完本系列教程的前面章节。
二. 步入正题
话不多说,大家自己理解,下面步入正题:
在之前的例子,我们都是直接打开本地的html文件来完成与服务器的通讯,
本章我们把html页面放到服务器上,通过发送请求来获得此文件。
首先建立一个WebContent目录来存储html页面,
如下:
然后,我们对所有以.html结尾的请求,读取文件名并且在WebContent目录下找到该文件,
将文件内容发送给客户端:
请求处理部分代码修改如下:
1 public void run() { 2 3 Request request = new Request(); 4 Response response = new Response(); 5 6 while(true) { 7 try { 8 9 String message = br.readLine(); 10 System.out.println("get message:"+message); 11 12 if(message == null) { 13 break; 14 } 15 16 if(!"".equals(message)) { 17 18 request.addHeader(message); 19 20 }else { 21 22 String requestPath = request.getPath(); 23 System.out.println("request path:"+requestPath); 24 25 // 处理html文件请求 26 if(requestPath.length() > 5 && requestPath.substring(requestPath.length()-5).equals(".html")) { 27 28 String basePath = this.getClass().getResource("/").toString().replace("bin/", "WebContent/").replace("file:/", ""); 29 System.out.println(basePath); 30 31 File f = new File(basePath+requestPath); 32 33 FileInputStream fis = new FileInputStream(f); 34 InputStreamReader isr = new InputStreamReader(fis); 35 BufferedReader br = new BufferedReader(isr); 36 37 String tempLine = null; 38 while((tempLine = br.readLine()) != null) { 39 response.print(tempLine + "\n"); 40 } 41 42 br.close(); 43 isr.close(); 44 fis.close(); 45 46 }else if(requestPath.equals("person")) { 47 48 PersonController personController = new PersonController(); 49 personController.doGet(request,response); 50 51 }else if(requestPath.equals("favicon.ico")){ 52 53 } 54 55 pw.println("HTTP/1.1 200 OK"); 56 pw.println("Content-Type: text/html"); 57 pw.println("Content-length: "+response.getData().length()); 58 pw.println(); 59 pw.println(response.getData()); 60 pw.println(); 61 break; 62 } 63 64 } catch(IOException e) { 65 e.printStackTrace(); 66 } catch (Exception e) { 67 e.printStackTrace(); 68 } 69 } 70 } 71
三. 测试
启动服务器:
向服务器请求person.html文件,在浏览器端输入1,点query按钮:
显示查询结果:
完整程序请大家从[这里]下载
如有问题,大家来我的网站进行提问。
https://www.java123.vip/qa
版权声明:本教程版权归java123.vip所有,禁止任何形式的转载与引用。