反思:请求与响应基本的框架封装好后,将之前所学的知识点串联起来了,虽然有种豁然开朗的感觉,不过其中的设计思想依旧是任重而道远,如果不是拓哥引导的话很难想象到这点。
夯实基础的前提下 如何在遇到问题时保持独立思考
学习内容及代码:**
package server;
_/*
这个类为了便于管理 findController
同时优化了方法中的机制
1.遵循高内聚低耦合原则 findController与其他方法的功能不一致,抽离出去
2.将文件拿出来写入Map中 通过静态块执行 提高性能
3.定义 IndexControlle 的规则 统一规范
4.将 Controller设置为单例 生命周期托管 延迟加载方式
/
public class ServletController {
//将文件中的信息缓存到集合里<br /> private static HashMap<String,String> _controllerMap _= new HashMap<>();<br /> //存储被管理的所有类对象<br /> private static HashMap<String,HttpServlet> _controllerObjectMap _= new HashMap<>();
static{<br /> try {<br /> //读取配置文件<br /> Properties pro = new Properties();<br /> pro.load(new FileReader("src//server//web.properties"));<br /> Enumeration en = pro.propertyNames();<br /> //有就接收 类似迭代器<br /> while(en.hasMoreElements()){<br /> String content = (String)en.nextElement();<br /> String realControllerName = pro.getProperty(content);<br /> _controllerMap_.put(content,realControllerName);<br /> }<br /> } catch (IOException e) {<br /> e.printStackTrace();<br /> }<br /> }
//找人干活--控制层<br /> static void findController(HttpServletRequest request, HttpServletResponse response){<br /> //从request获取请求名<br /> String content = request.getContent();<br /> try {<br /> //先去controllerObjectMap中找寻需要的对象<br /> HttpServlet servlet = _controllerObjectMap_.get(content);<br /> //若对象不存在 证明之前没有使用过<br /> if(servlet == null) {<br /> //获取到真实的请求名<br /> String realControllerName = _controllerMap_.get(content);<br /> //当类不为null<br /> if(realControllerName != null) {<br /> //反射获取类<br /> Class clazz = Class._forName_(realControllerName);<br /> servlet = (HttpServlet)clazz.newInstance();<br /> //将新创建的对象放在上面的对象集合内<br /> _controllerObjectMap_.put(content,servlet);<br /> }<br /> }<br /> //反射获取类中的方法<br /> Class controllerClass = servlet.getClass();<br /> Method method = controllerClass.getMethod("service", HttpServletRequest.class, HttpServletResponse.class);<br /> method.invoke(servlet,request,response);<br /> } catch (ClassNotFoundException e) {<br /> response.write("找不到"+content+"的请求");<br /> }catch (NoSuchMethodException e){<br /> response.write("NotFound 405");<br /> }catch (Exception e) {<br /> e.printStackTrace();<br /> }<br /> }<br />}