java实现mvc模式代码,从零开始实现一个简易的JavaMVC框架(九)--优化MVC代码.pdf
文本预览下载声明
java实现mvc模式代码,从零开始实现⼀个简易的JavaMVC框
架(九)--优化MVC代码
前⾔
在从零开始实现⼀个简易的Java MVC框架(七)--实现MVC中实现了doodle框架的MVC的功能,不过最后指出代码的逻辑不是很好,在这
⼀章节就将这⼀部分代码进⾏优化。
优化的⽬标是1.去除DispatcherServlet请求分发器中的http逻辑代码;2.将ControllerHandler和ResultRender中代码按功能细分出来,
使其各司其职。
修改DispatcherServlet
创建接⼝
先在com.zbw.mvc包下创建两个包handler和render,分别⽤于放ControllerHandler和ResultRender拆分出来的功能类。
再在这两个包下创建两个接⼝,以便后⾯的功能类都按这个接⼝规范。
package com.zbw.mvc.handler;
import com.zbw.mvc.RequestHandlerChain;
/**
* 请求执⾏器 Handler
*/
public interface Handler {
/**
* 请求的执⾏器
*/
boolean handle(final RequestHandlerChain handlerChain) throws Exception;
}
package com.zbw.mvc.render;
import com.zbw.mvc.RequestHandlerChain;
/**
* 渲染请求结果 interface
*/
public interface Render {
/**
* 执⾏渲染
*/
void render(RequestHandlerChain handlerChain) throws Exception;
}
实现RequestHandlerChain
上⾯两个接⼝都有个参数RequestHandlerChain,这个类是整个请求的执⾏链,⽤于存储整个请求需要保存的⼀些属性和串联整个请求。
在com.zbw.mvc下创建这个类
package com.zbw.mvc;
import ...
/**
* http请求处理链
*/
@Data
@Slf4j
public class RequestHandlerChain {
/**
* Handler迭代器
*/
private Iterator handlerIt;
/**
* 请求request
*/
private HttpServletRequest request;
/**
* 请求response
*/
private HttpServletResponse response;
/**
* 请求http⽅法
*/
private String requestMethod;
/**
* 请求http路径
*/
private String requestPath;
/**
* 请求状态码
*/
private int responseStatus;
/**
* 请求结果处理器
*/
private Render render;
public RequestHandlerChain(Iterator handlerIt, HttpServletRequest request, HttpServletResponse response) {
this.handlerIt = handlerIt;
this.request = request;
this.response = response;
this.requestMethod = request.getMethod();
this.requestPath = request.getPathInfo();
this.responseStatus = HttpServletResponse.SC_OK;
}
/**
* 执⾏请求链
*/
public void doHandlerChain() {
try {
while (handlerIt.hasNext()) {
if (!handlerIt.next().handle(this)) {
break;
}
}
} catch (Exception e) {
log.error(doHandlerChain error, e);
render = new InternalErro
显示全部