📄 j2se6contexthandler.java
字号:
//========================================================================//$$Id: J2SE6ContextHandler.java 550 2007-11-02 15:23:21Z lorban $$////------------------------------------------------------------------------//Licensed under the Apache License, Version 2.0 (the "License");//you may not use this file except in compliance with the License.//You may obtain a copy of the License at //http://www.apache.org/licenses/LICENSE-2.0//Unless required by applicable law or agreed to in writing, software//distributed under the License is distributed on an "AS IS" BASIS,//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.//See the License for the specific language governing permissions and//limitations under the License.//========================================================================package org.mortbay.jetty.j2se6;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.mortbay.jetty.HttpConnection;import org.mortbay.jetty.Request;import org.mortbay.jetty.handler.ContextHandler;import com.sun.net.httpserver.Authenticator;import com.sun.net.httpserver.HttpContext;import com.sun.net.httpserver.HttpHandler;import com.sun.net.httpserver.HttpPrincipal;import com.sun.net.httpserver.Authenticator.Result;/** * Jetty handler that bridges requests to {@link HttpHandler}. * @author lorban */public class J2SE6ContextHandler extends ContextHandler{ private HttpContext _context; private HttpHandler _handler; public J2SE6ContextHandler(HttpContext context, HttpHandler handler) { this._context = context; this._handler = handler; } @Override public void handle(String target, HttpServletRequest req, HttpServletResponse resp, int dispatch) throws IOException, ServletException { if (!target.startsWith(getContextPath())) return; JettyHttpExchange jettyHttpExchange = new JettyHttpExchange(_context, req, resp); // TODO: add filters processing Authenticator auth = _context.getAuthenticator(); try { if (auth != null) handleAuthentication(resp, jettyHttpExchange, auth); else _handler.handle(jettyHttpExchange); } catch(Exception ex) { PrintWriter writer = new PrintWriter(jettyHttpExchange.getResponseBody()); resp.setStatus(500); writer.println("<h2>HTTP ERROR: 500</h2>"); writer.println("<pre>INTERNAL_SERVER_ERROR</pre>"); writer.println("<p>RequestURI=" + req.getRequestURI() + "</p>"); writer.println("<pre>"); ex.printStackTrace(writer); writer.println("</pre>"); writer.println("<p><i><small><a href=\"http://jetty.mortbay.org\">Powered by jetty://</a></small></i></p>"); writer.close(); } finally { Request base_request = (req instanceof Request) ? (Request)req:HttpConnection.getCurrentConnection().getRequest(); base_request.setHandled(true); } } private void handleAuthentication(HttpServletResponse resp, JettyHttpExchange jettyHttpExchange, Authenticator auth) throws IOException { Result result = auth.authenticate(jettyHttpExchange); if (result instanceof Authenticator.Failure) { int rc = ((Authenticator.Failure)result).getResponseCode(); resp.sendError(rc); } else if (result instanceof Authenticator.Retry) { int rc = ((Authenticator.Retry)result).getResponseCode(); resp.sendError(rc); } else if (result instanceof Authenticator.Success) { HttpPrincipal p = ((Authenticator.Success)result).getPrincipal(); jettyHttpExchange.setPrincipal(p); _handler.handle(jettyHttpExchange); } } public HttpHandler getHttpHandler() { return _handler; } public void setHttpHandler(HttpHandler handler) { this._handler = handler; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -