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

📄 dhtmllayoutservlet.java

📁 非常接近C/S操作方式的Java Ajax框架-ZK 用ZK框架使你的B/S应用程序更漂亮更易操作。 官网:www.zkoss.org
💻 JAVA
字号:
/* DHtmlLayoutServlet.java{{IS_NOTE	Purpose:			Description:			History:		Mon May 30 21:11:28     2005, Created by tomyeh}}IS_NOTECopyright (C) 2005 Potix Corporation. All Rights Reserved.{{IS_RIGHT	This program is distributed under GPL Version 2.0 in the hope that	it will be useful, but WITHOUT ANY WARRANTY.}}IS_RIGHT*/package org.zkoss.zk.ui.http;import java.util.Map;import java.util.HashMap;import java.io.IOException;import javax.servlet.ServletConfig;import javax.servlet.ServletContext;import javax.servlet.ServletException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpSession;import org.zkoss.mesg.Messages;import org.zkoss.lang.D;import org.zkoss.util.logging.Log;import org.zkoss.web.Attributes;import org.zkoss.web.servlet.Servlets;import org.zkoss.web.servlet.http.Https;import org.zkoss.zk.mesg.MZk;import org.zkoss.zk.ui.WebApp;import org.zkoss.zk.ui.Desktop;import org.zkoss.zk.ui.Page;import org.zkoss.zk.ui.Session;import org.zkoss.zk.ui.Execution;import org.zkoss.zk.ui.Richlet;import org.zkoss.zk.ui.metainfo.PageDefinition;import org.zkoss.zk.ui.metainfo.PageDefinitions;import org.zkoss.zk.ui.sys.UiFactory;import org.zkoss.zk.ui.sys.RequestInfo;import org.zkoss.zk.ui.sys.WebAppCtrl;import org.zkoss.zk.ui.impl.RequestInfoImpl;/** * Used to process the request for a ZUML page. Though it is called * DHtmlLayoutServlet, it is used to serve all kind of HTTP-based clients, * including html, mul and others (see {@link Desktop#getClientType}. * * @author tomyeh */public class DHtmlLayoutServlet extends HttpServlet {	private static final Log log = Log.lookup(DHtmlLayoutServlet.class);	private ServletContext _ctx;	private WebManager _webman;	public void init(ServletConfig config) throws ServletException {		//super.init(config);			//Note callback super to avoid saving config		_ctx = config.getServletContext();		if (WebManager.getWebManagerIfAny(_ctx) != null)			throw new ServletException("Only one layout servlet is allowed in one context: "+_ctx);		String updateURI = config.getInitParameter("update-uri");		if (updateURI == null		|| (updateURI = updateURI.trim()).length() == 0		|| updateURI.charAt(0) != '/')			throw new ServletException("The update-uri parameter must be specified and starts with /");		if (updateURI.indexOf(';') >= 0 || updateURI.indexOf('?') >= 0)			throw new ServletException("The update-uri parameter cannot contain ';' or '?'");			//Jetty will encode URL by appending ';jsess..' and we have to			//remove it under certain situations, so not alow it		if (updateURI.charAt(updateURI.length() - 1) == '\\') {			if (updateURI.length() == 1)				throw new ServletException("The update-uri parameter cannot contain only '/'");			updateURI = updateURI.substring(0, updateURI.length() - 1);				//remove the trailing '\\' if any		}		_webman = new WebManager(_ctx, updateURI);	}	public void destroy() {		if (_webman != null) _webman.destroy();	}	public ServletContext getServletContext() {		return _ctx;	}	//-- super --//	protected	void doGet(HttpServletRequest request, HttpServletResponse response)	throws ServletException, IOException {		final Session sess = WebManager.getSession(getServletContext(), request);		final Object old = I18Ns.setup(sess, request, response,			sess.getWebApp().getConfiguration().getCharset());		try {			process(sess, request, response);		} finally {			I18Ns.cleanup(request, old);		}	}	protected	void doPost(HttpServletRequest request, HttpServletResponse response)	throws ServletException, IOException {		doGet(request, response);	}	//-- private --//	private void process(Session sess,	HttpServletRequest request, HttpServletResponse response)	throws ServletException, IOException {		final String pi = Https.getThisPathInfo(request);		final String path = pi != null && pi.length() > 0 ?			pi: Https.getThisServletPath(request);		if (D.ON && log.finerable()) log.finer("Creates from "+path+", "+pi);		final WebApp wapp = _webman.getWebApp();		final WebAppCtrl wappc = (WebAppCtrl)wapp;		final Desktop desktop = _webman.getDesktop(sess, request, path);		final RequestInfo ri = new RequestInfoImpl(			wapp, sess, desktop, request,			PageDefinitions.getLocator(wapp, path));		final UiFactory uf = wappc.getUiFactory();		if (pi != null) {			final Richlet richlet = wapp.getConfiguration().getRichlet(pi);			if (richlet == null) {				sendError(request, response, pi);				return;			}			final Page page = uf.newPage(ri, richlet, pi);			final Execution exec = new ExecutionImpl(				_ctx, request, response, desktop, page);			wappc.getUiEngine().execNewPage(exec, richlet, page, response.getWriter());				//no need to set client type here, since UiEngine will do it later		} else {			final PageDefinition pagedef = uf.getPageDefinition(ri, path);			if (pagedef == null) {				sendError(request, response, path);				return;			}			final Page page = uf.newPage(ri, pagedef, path);			final Execution exec = new ExecutionImpl(				_ctx, request, response, desktop, page);			wappc.getUiEngine()				.execNewPage(exec, pagedef, page, response.getWriter());		}	}	private void sendError(HttpServletRequest request, HttpServletResponse response,	String path) throws ServletException, IOException {		if (Servlets.isIncluded(request)) {			final String msg = Messages.get(MZk.PAGE_NOT_FOUND,				new Object[] {path});			final Map attrs = new HashMap();			attrs.put(Attributes.ALERT_TYPE, "error");			attrs.put(Attributes.ALERT, msg);			Servlets.include(_ctx, request, response,				"~./html/alert.dsp", attrs, Servlets.PASS_THRU_ATTR);		} else {			response.sendError(HttpServletResponse.SC_NOT_FOUND);		}	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -