标签:tps 细节问题 buffered 16px edr stream 路径 alt ref
代码结构整理
一. 前言
在前上一章教程中,介绍了和浏览器的通讯。
本章将在上一章的基础上,进一步扩展程序。
注:
1.本文针对初学Java的同学训练学习思路,请不要太纠结于细节问题。
2.本文旨在达到抛砖引玉的效果,希望大家扩展本例子,以学到更多知识的精髓。
学习本章需要准备的知识:
1.读完本系列教程的前面章节。
二. 步入正题
话不多说,大家自己理解,下面步入正题:
为了在后面的课程中走的更远,我们来整理一下代码的结构。
首先我们把业务逻辑都放在app包下,并且将这个包分为三层,web,service,dao
然后我们把框架相关代码放在fw下,
把服务器代码放到server下
代码结构如下:
为了让程序变得通用,我们把请求处理和结果处理封装成Request和Response
代码如下:
1 /** 2 * 3 * @author http://www.java123.vip 4 * 5 */ 6 public class Request { 7 8 private Map<String,String> parameterMap = new HashMap<String,String>(); 9 private String path; 10 11 /** 12 * 如果是get行,则解析后面的参数为key-value形式 13 * @param message 14 */ 15 public void addHeader(String message) { 16 String[] messageDetails = message.split(" "); 17 18 if(messageDetails[0].equalsIgnoreCase("get")) { 19 path = messageDetails[1]; 20 21 int endPos = path.indexOf("?"); 22 if(endPos == -1) { 23 path = path.substring(1); 24 }else { 25 String paramString = path.substring(endPos+1); 26 path = path.substring(1,endPos); 27 28 String[] params = paramString.split("&"); 29 for(int i = 0; i < params.length; i ++) { 30 String[] keyValue = params[i].split("="); 31 parameterMap.put(keyValue[0], keyValue[1]); 32 } 33 } 34 } 35 36 } 37 38 public String getPath() { 39 return this.path; 40 } 41 42 public String getParameter(String key) { 43 return parameterMap.get(key); 44 } 45 }
1 /** 2 * 3 * @author http://www.java123.vip 4 * 5 */ 6 public class Response { 7 8 private StringBuffer data = new StringBuffer(); 9 10 public String getData() { 11 return data.toString(); 12 } 13 14 public void print(String printData) { 15 data.append(printData); 16 } 17 }
相关调用部分代码修改如下:
1 /** 2 * 3 * @author http://www.java123.vip 4 * 5 */ 6 public class PersonController { 7 8 public void doGet(Request request, Response response) { 9 10 String personId = request.getParameter("personid"); 11 MyContainer container = MyContainer.getInstance(); 12 PersonService personService = (PersonService)container.getObject(PersonService.class); 13 14 Person personResult = personService.getPerson(personId); 15 16 response.print("id:"+personResult.id); 17 response.print("<br/>username:"+personResult.username); 18 response.print("<br/>password:"+personResult.passwd); 19 20 } 21 }
1 /** 2 * 3 * @author http://www.java123.vip 4 * 5 */ 6 public class ClientThread implements Runnable{ 7 8 private Socket socket; 9 private BufferedReader br; 10 private PrintWriter pw; 11 12 public ClientThread(Socket socket) { 13 try { 14 15 InputStream is = socket.getInputStream(); 16 InputStreamReader isr = new InputStreamReader(is); 17 br = new BufferedReader(isr); 18 19 OutputStream os = socket.getOutputStream(); 20 OutputStreamWriter osw = new OutputStreamWriter(os); 21 pw = new PrintWriter(osw,true); 22 23 } catch (IOException e) { 24 e.printStackTrace(); 25 } 26 } 27 28 public void run() { 29 30 // 初始化request和response 31 Request request = new Request(); 32 Response response = new Response(); 33 34 while(true) { 35 try { 36 // 读取一行请求 37 String message = br.readLine(); 38 System.out.println("get message:"+message); 39 40 if(message == null) { 41 break; 42 } 43 44 45 if(!"".equals(message)) { 46 // 将请求作为request头,添加到request中 47 request.addHeader(message); 48 49 }else { 50 // 请求发送完毕(读到空字符串)后,根据请求参数查数据 51 52 // 获得请求路径(person) 53 String requestPath = request.getPath(); 54 System.out.println("request path:"+requestPath); 55 56 if(requestPath.equals("person")) { 57 // 处理person请求 58 PersonController personController = new PersonController(); 59 personController.doGet(request,response); 60 61 }else if(requestPath.equals("favicon.ico")){ 62 //不处理 63 } 64 65 pw.println("HTTP/1.1 200 OK"); 66 pw.println("Content-Type: text/html"); 67 pw.println("Content-length: "+response.getData().length()); 68 pw.println(); 69 pw.println(response.getData()); 70 pw.println(); 71 break; 72 } 73 74 } catch(IOException e) { 75 e.printStackTrace(); 76 } catch (Exception e) { 77 e.printStackTrace(); 78 } 79 } 80 } 81 82 }
三. 测试
启动服务器:
在浏览器端输入1,点query按钮:
显示查询结果:
完整程序请大家从[这里]下载
如有问题,大家来我的网站进行提问。
https://www.java123.vip/qa
版权声明:本教程版权归java123.vip所有,禁止任何形式的转载与引用。
标签:tps 细节问题 buffered 16px edr stream 路径 alt ref
原文地址:https://www.cnblogs.com/java123-vip/p/9771051.html