⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 defaultrequestprocessor.java.svn-base

📁 EasyJWeb是基于java技术
💻 SVN-BASE
📖 第 1 页 / 共 2 页
字号:
	 * @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 + -