| /******************************************************************************* |
| * Copyright (c) 2014 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.help.internal.webapp.service; |
| |
| import java.io.IOException; |
| import java.io.InputStream; |
| import java.io.OutputStream; |
| import java.io.OutputStreamWriter; |
| import java.io.PrintWriter; |
| import java.net.URL; |
| import java.net.URLConnection; |
| |
| import javax.servlet.ServletContext; |
| import javax.servlet.ServletException; |
| import javax.servlet.http.HttpServlet; |
| import javax.servlet.http.HttpServletRequest; |
| import javax.servlet.http.HttpServletResponse; |
| |
| import org.eclipse.help.internal.base.util.ProxyUtil; |
| import org.eclipse.help.internal.webapp.utils.Utils; |
| |
| /** |
| * Returns an HTML page for the selected topic passed as request path info. |
| * |
| * <p>Passes the request to {@link org.eclipse.help.internal.webapp.servlet.ContentServlet} |
| * servlet. |
| * |
| * @param lang - (optional) specifies the locale |
| * |
| * @return An html page for the selected topic |
| * |
| * @version $Version$ |
| * |
| **/ |
| public class ContentService extends HttpServlet { |
| |
| private static final long serialVersionUID = 1L; |
| |
| @Override |
| protected void doGet(HttpServletRequest req, HttpServletResponse resp) |
| throws ServletException, IOException { |
| req.setCharacterEncoding("UTF-8"); //$NON-NLS-1$ |
| |
| String baseURL = req.getRequestURL().toString(); |
| String contentURL = baseURL.replaceFirst(Utils.SERVICE_CONTEXT, ""); //$NON-NLS-1$ |
| String query = req.getQueryString(); |
| if (query != null) |
| contentURL += '?' + query; |
| |
| URL url = new URL(contentURL); |
| URLConnection con = ProxyUtil.getConnection(url); |
| con.setAllowUserInteraction(false); |
| con.setDoInput(true); |
| con.connect(); |
| |
| String contentType; |
| ServletContext context = getServletContext(); |
| String pathInfo = req.getPathInfo(); |
| String mimeType = context.getMimeType(pathInfo); |
| if (mimeType != null && !mimeType.equals("application/xhtml+xml")) { //$NON-NLS-1$ |
| contentType = mimeType; |
| } else { |
| contentType = con.getContentType(); |
| } |
| resp.setContentType(contentType); |
| |
| InputStream is = con.getInputStream(); |
| OutputStream out = resp.getOutputStream(); |
| if (!contentType.equals("application/xhtml+xml") //$NON-NLS-1$ |
| && !contentType.equals("text/html") //$NON-NLS-1$ |
| && !con.getContentType().equals("text/html")) { //$NON-NLS-1$ |
| Utils.transferContent(is, out); |
| out.flush(); |
| } else { |
| String response = Utils.convertStreamToString(ProxyUtil.getStream(url)); |
| response = Utils.updateResponse(response); |
| PrintWriter writer = new PrintWriter(new OutputStreamWriter(out, "UTF-8")); //$NON-NLS-1$ |
| writer.write(response); |
| writer.close(); |
| } |
| } |
| |
| } |