📄 defaultrequestprocessor.java.svn-base
字号:
* @param request
* HttpservletRequest对象
* @param response
* HttpServletResponse对象
* @throws IOException
* @throws ServletException
*/
private void doVenderPage(Page page, WebForm form,
HttpServletRequest request, HttpServletResponse response,
WebInvocationParam param) throws IOException, ServletException {
if (pageVenders == null) {
pageVenders = FrameworkEngine.getContainer().getBeans(
IPageVender.class);
pageVenders.add(new DefaultPageVender());
}
if (pageVenders != null) {
for (IPageVender vender : pageVenders) {
logger.debug("使用视图合成器处理页面:"
+ vender.getClass().getCanonicalName());
if (vender.venderPage(request, response, page, param)) {
break;
}
}
}
}
/**
* 处理action类型的Page对象
* 对于该类型对象,会记录已经跳转的次数,并在跳转次数达到框架设置的最大跳转次数后抛出FrameworkException。
* 如果能继续传递该跳转,会根据page的url样式构建一个新的pathRuler对象,并将当前的WebForm和pathRuler对象一起传递给process方法进行下一个action的执行
*
* @param request
* @param response
* @param vm
* @param page
* @param param
* @param jumpTimes
* @throws FrameworkException
* @throws Throwable
* @throws Exception
* @throws ValidateException
* @throws IOException
* @throws ServletException
*/
private void processActionPage(HttpServletRequest request,
HttpServletResponse response, ValidatorManager vm, Page page,
WebInvocationParam param, int jumpTimes) throws FrameworkException,
Throwable, Exception, ValidateException, IOException,
ServletException {
if (jumpTimes + 1 > this.webConfig.getMaxDirectJumpToActionTimes()) {
throw new FrameworkException(
"has jump direct to another action more than "
+ this.webConfig.getMaxDirectJumpToActionTimes()
+ " times,please check if there has a dead lock jump circle.");
} else {
jumpTimes += 1;
if (page.getUrl().indexOf(".") < 0) {
throw new FrameworkException(
"you send a page to jump to a action,but you give a wrong page url,the correct pattern must be module.command");
}
PathMappingRulerImpl ruler = new PathMappingRulerImpl(page.getUrl());
ruler.setUrlPattern(ActionContext.getContext()
.getWebInvocationParam().getUrlType());
this.process(request, response, vm, ruler, param.getForm(),
jumpTimes);
}
}
/**
* 该方法根据调用参数返回出现验证错误时,应该返回的页面
*
* @param param
* @return
* @throws Exception
*/
protected Page findValidatePage(WebInvocationParam param) throws Exception {
Page page = param.getModule().findPage("input");
if (page == null) {
String input = ActionContext.getContext().getRequest().getHeader(
"Referer");
String[] ps = input.split("/");
// System.out.println(ps[ps.length-1]);
page = param.getModule().findPage(ps[ps.length - 1]);
}
return page;
}
private void processAutoToken(WebInvocationParam param) throws Exception {
Module m = param.getModule();
if (m.getAutoToken()) {
String tokenInRequest = (String) param.getForm().get(
Globals.TOKEN_NAME);
if (tokenInRequest != null && !"".equals(tokenInRequest)) {
if (!this.token.isTokenValid(tokenInRequest)) {
logger.debug("token vaild");
throw new TokenVaildException("token vaild!");
}
}
token.saveToken();
}
}
/**
* 执行错误处理,如果从异常处理链中抛出了异常,则将把异常抛给框架外的过滤器、Web容器及用户
*
* @param error
* 程序执行过程中的异常
* @param param
* 调用参数
* @throws Exception
* 异常处理器出现异常,则表示异常将不由EasyJWeb处理
*/
protected void doErrorHandler(Throwable error, WebInvocationParam param)
throws Exception {
// this.container.getBean(ExceptionInterceptor.class)
java.util.Iterator it = webConfig.getErrorHandler().iterator();
while (it.hasNext()) {
ExceptionInterceptor ei = (ExceptionInterceptor) FrameworkEngine
.getContainer().getBean((Class) it.next());
if (ei.getClass() != com.easyjf.web.exception.DefaultExceptionHandle.class) {
if (ei.handle(error, param != null ? param.getAction() : null,
null, new Object[] { param }))
return;
}
}
// 调用最后一个异常处理器,也就是DefaultExceptionHandle,若前面的异常处理没处理这个异常,则该处理器总是执行
ExceptionInterceptor defaultException = (ExceptionInterceptor) FrameworkEngine
.getContainer().getBean(DefaultExceptionHandle.class);
if (defaultException == null)
defaultException = new DefaultExceptionHandle();
defaultException.handle(error,
param != null ? param.getAction() : null, null,
new Object[] { param });
}
// 需要拦截非法输入 比如 ff' and 'fff 避免组合为SQL语句
// 执行全局拦截操作,全局拦截必须是BeforeInterceptors
// 还需要改动
protected void invokeGlobalInterceptors(WebInvocationParam param)
throws Throwable {
List apps = webConfig.getInterceptors();
for (int i = 0; i < apps.size(); i++) {
Map app = (Map) apps.get(i);
Method init = (Method) app.get("method");
if (init != null) {
init.invoke(app.get("classname"), new Object[] {});
}
}
}
// 执行前拦截操作,前拦截类型为BeforeInterceptor
protected void invokeActionBeforeInterceptors(Module module,
WebInvocationParam param) throws Throwable {
Iterator interceptors = module.getInterceptors().iterator();
if (interceptors != null) {
while (interceptors.hasNext()) {
Interceptor interceptor = (Interceptor) interceptors.next();
if (interceptor instanceof BeforeInterceptor)
((BeforeInterceptor) interceptor).before(param.getAction(),
null, new Object[] { param });
}
}
}
// 执行后拦截,后拦截类型为AfterInterceptors
protected void invokeActionAfterInterceptors(Module module, Page page,
WebInvocationParam param) throws Throwable {
Iterator interceptors = module.getInterceptors().iterator();
if (interceptors != null) {
while (interceptors.hasNext()) {
Interceptor interceptor = (Interceptor) interceptors.next();
if (interceptor instanceof AfterInterceptor)
((AfterInterceptor) interceptor).after(page, param
.getAction(), null, new Object[] { param });
}
}
}
public Page getResult(WebInvocationParam param) throws Exception {
WebForm form = param.getForm();
Module module = param.getModule();
IWebAction action = param.getAction();
Page page = null;
try {
// 执行
page = action.execute(form, module);
} catch (java.lang.RuntimeException re) {
throw re;
} catch (Exception e) {
throw new FrameworkException(e.getMessage(), e);
}
// 保存表单form中的数据
// 处理没有定义属性property的表单
if (form != null && form.getClass() == WebForm.class) {
form.setProperty(form.getTextElement());// 只保存文本属性
form.getProperty().putAll(form.getFileElement());
}
if (form != null && (form.getProperty() != null)) {
Iterator it = form.getProperty().keySet().iterator();
while (it.hasNext()) {
String name = (String) it.next();
form.addResult(name, form.get(name));
}
}
return page;
}
protected void doForward(String uri, HttpServletRequest request,
HttpServletResponse response) throws IOException, ServletException {
RequestDispatcher rd = getServletContext().getRequestDispatcher(uri);
rd.forward(request, response);
}
protected ServletContext getServletContext() {
return (servlet.getServletContext());
}
public WebConfig getWebConfig() {
return webConfig;
}
public void setWebConfig(WebConfig webConfig) {
this.webConfig = webConfig;
}
public IErrorHandlerManager getErrorHandlerManager() {
return errorHandlerManager;
}
public void setErrorHandlerManager(IErrorHandlerManager errorHandlerManager) {
this.errorHandlerManager = errorHandlerManager;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -