学习内容
    读取浏览器发送过来的请求,将请求解析并交给控制层比对无误后,最终把结果响应给浏览器
    以后请求发送过来的信息可能不止有两个
    在解析过程里新添俩个对象 HttpServletRequest 、HttpservletResponse
    以及 在控制层通过文件和反射的方式增强了代码的复用性
    总结:可以理解“存储所有请求携带的信息”与“接收响应回来的结果并在Controller执行完毕后将其填满”的作用。
    代码:
    public class ServerHandle extends Thread{
    private Socket socket;
    public ServerHandle (Socket socket){this.socket = socket;}

    1. public void run(){<br /> this.readMessage();<br /> }
    2. //读取消息<br /> private void readMessage(){<br /> try {<br /> BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));<br /> //读取到整行的信息<br /> String contentAndParams = reader.readLine();<br /> this.analysis(contentAndParams);<br /> } catch (IOException e) {<br /> e.printStackTrace();<br /> }<br /> }<br /> //解析<br /> private void analysis(String contentAndParams){<br /> //创建两个变量存储参数<br /> String content = null;<br /> HashMap<String,String> paramsMap = null;<br /> //找寻问号所在的位置<br /> int questionMarkIndex = contentAndParams.indexOf("?");<br /> //判断是否携带了参数<br /> if(questionMarkIndex != -1){<br /> //携带了参数 截取问号前面的信息-->请求资源名 问号后面的信息拆分存入map集合里<br /> content = contentAndParams.substring(0,questionMarkIndex);<br /> paramsMap = new HashMap<>();<br /> //处理问号后面的参数 拆分存入map集合 key=value&key=value<br /> String params = contentAndParams.substring(questionMarkIndex+1);<br /> String[] KeyAndValues = params.split("&");<br /> for(String KeyAndValue:KeyAndValues){<br /> String[] KV = KeyAndValue.split("=");<br /> paramsMap.put(KV[0],KV[1]);<br /> }<br /> }else{<br /> //没有携带<br /> content = contentAndParams;<br /> }<br /> //存储请求所带来的参数<br /> HttpServletRequest request = new HttpServletRequest(content,paramsMap);<br /> //为了接受响应回来的结果 创建时是空对象 在Controller执行完毕后 将其填满<br /> HttpServletResponse response= new HttpServletResponse();<br /> this.findController(request,response);
    3. }<br /> //找人干活--控制层<br /> private void findController(HttpServletRequest request,HttpServletResponse response){<br /> try {<br /> //从request获取请求名<br /> String content = request.getContent();<br /> //读取配置文件<br /> Properties pro = new Properties();<br /> pro.load(new FileReader("src//server//web.properties"));<br /> String realControllerName = pro.getProperty(content);<br /> //反射获取类<br /> Class clazz = Class._forName_(realControllerName);<br /> Object obj = clazz.newInstance();<br /> //反射获取类中的方法<br /> Method method = clazz.getMethod("text",HttpServletRequest.class,HttpServletResponse.class);<br /> method.invoke(obj,request,response);<br /> } catch (Exception e) {<br /> e.printStackTrace();<br /> }<br /> }