Commit c53f59d8 authored by Liang Ding's avatar Liang Ding

🎨 #12580

parent 86bbde7f
......@@ -23,11 +23,6 @@ import org.b3log.latke.Latkes;
import org.b3log.latke.ioc.BeanManager;
import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger;
import org.b3log.latke.servlet.DispatcherServlet;
import org.b3log.latke.servlet.RequestContext;
import org.b3log.latke.servlet.HttpMethod;
import org.b3log.latke.servlet.HttpControl;
import org.b3log.latke.servlet.renderer.Http500Renderer;
import org.b3log.solo.service.InitService;
import javax.servlet.*;
......@@ -84,13 +79,6 @@ public final class InitCheckFilter implements Filter {
return;
}
// If requests Latke Remote APIs, skips this filter
if (requestURI.startsWith(Latkes.getContextPath() + "/latke/remote")) {
chain.doFilter(request, response);
return;
}
final BeanManager beanManager = BeanManager.getInstance();
final InitService initService = beanManager.getReference(InitService.class);
if (initService.isInited()) {
......@@ -99,11 +87,8 @@ public final class InitCheckFilter implements Filter {
return;
}
if ("POST".
equalsIgnoreCase(httpServletRequest.getMethod()) && (Latkes.getContextPath() + "/init").
equals(requestURI) ||
if ("POST".equalsIgnoreCase(httpServletRequest.getMethod())
&& (Latkes.getContextPath() + "/init").equals(requestURI) ||
StringUtils.startsWith(requestURI, Latkes.getContextPath() + "/oauth/github")) {
// Do initialization
chain.doFilter(request, response);
......@@ -116,18 +101,7 @@ public final class InitCheckFilter implements Filter {
initReported = true;
}
final RequestContext context = new RequestContext();
context.setRequest((HttpServletRequest) request);
context.setResponse((HttpServletResponse) response);
request.setAttribute(Keys.HttpRequest.REQUEST_URI, Latkes.getContextPath() + "/init");
request.setAttribute(Keys.HttpRequest.REQUEST_METHOD, HttpMethod.GET.name());
final HttpControl httpControl = new HttpControl(DispatcherServlet.HANDLERS.iterator(), context);
try {
httpControl.nextHandler();
} catch (final Exception e) {
context.setRenderer(new Http500Renderer(e));
}
DispatcherServlet.result(context);
chain.doFilter(request, response);
}
@Override
......
......@@ -25,10 +25,8 @@ import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger;
import org.b3log.latke.repository.RepositoryException;
import org.b3log.latke.servlet.DispatcherServlet;
import org.b3log.latke.servlet.RequestContext;
import org.b3log.latke.servlet.HttpMethod;
import org.b3log.latke.servlet.HttpControl;
import org.b3log.latke.servlet.renderer.Http500Renderer;
import org.b3log.latke.servlet.RequestContext;
import org.b3log.solo.model.Article;
import org.b3log.solo.model.Page;
import org.b3log.solo.repository.ArticleRepository;
......@@ -47,8 +45,7 @@ import java.io.IOException;
*
* @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.0.1.8, Oct 5, 2018
* @see org.b3log.solo.processor.ArticleProcessor#showArticle(org.b3log.latke.servlet.RequestContext,
* javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
* @see org.b3log.solo.processor.ArticleProcessor#showArticle(org.b3log.latke.servlet.RequestContext)
* @see org.b3log.solo.processor.PageProcessor#showPage(org.b3log.latke.servlet.RequestContext)
* @since 0.3.1
*/
......@@ -130,6 +127,7 @@ public final class PermalinkFilter implements Filter {
}
dispatchToArticleOrPageProcessor(request, response, article, page);
chain.doFilter(request, response);
}
/**
......@@ -155,17 +153,7 @@ public final class PermalinkFilter implements Filter {
request.setAttribute(Page.PAGE, page);
request.setAttribute(Keys.HttpRequest.REQUEST_URI, Latkes.getContextPath() + "/page");
}
request.setAttribute(Keys.HttpRequest.REQUEST_METHOD, HttpMethod.GET.name());
final HttpControl httpControl = new HttpControl(DispatcherServlet.HANDLERS.iterator(), context);
try {
httpControl.nextHandler();
} catch (final Exception e) {
context.setRenderer(new Http500Renderer(e));
}
DispatcherServlet.result(context);
}
@Override
......
......@@ -30,9 +30,8 @@ import org.b3log.latke.model.Pagination;
import org.b3log.latke.model.User;
import org.b3log.latke.service.LangPropsService;
import org.b3log.latke.service.ServiceException;
import org.b3log.latke.servlet.RequestContext;
import org.b3log.latke.servlet.HttpMethod;
import org.b3log.latke.servlet.URIPatternMode;
import org.b3log.latke.servlet.RequestContext;
import org.b3log.latke.servlet.annotation.RequestProcessing;
import org.b3log.latke.servlet.annotation.RequestProcessor;
import org.b3log.latke.servlet.renderer.AbstractFreeMarkerRenderer;
......@@ -348,7 +347,7 @@ public class ArticleProcessor {
*
* @param context the specified context
*/
@RequestProcessing(value = "/articles/\\d+", uriPatternsMode = URIPatternMode.REGEX, method = HttpMethod.GET)
@RequestProcessing(value = "/articles/{p}", method = HttpMethod.GET)
public void getArticlesByPage(final RequestContext context) {
final JSONObject jsonObject = new JSONObject();
final HttpServletRequest request = context.getRequest();
......@@ -390,7 +389,7 @@ public class ArticleProcessor {
*
* @param context the specified context
*/
@RequestProcessing(value = "/articles/tags/.+/\\d+", uriPatternsMode = URIPatternMode.REGEX, method = HttpMethod.GET)
@RequestProcessing(value = "/articles/tags/{tagTitle}/{p}", method = HttpMethod.GET)
public void getTagArticlesByPage(final RequestContext context) {
final JSONObject jsonObject = new JSONObject();
......@@ -448,7 +447,7 @@ public class ArticleProcessor {
*
* @param context the specified context
*/
@RequestProcessing(value = "/articles/archives/.+/\\d+", uriPatternsMode = URIPatternMode.REGEX, method = HttpMethod.GET)
@RequestProcessing(value = "/articles/archives/{archive}/{p}", method = HttpMethod.GET)
public void getArchivesArticlesByPage(final RequestContext context) {
final JSONObject jsonObject = new JSONObject();
......@@ -500,8 +499,7 @@ public class ArticleProcessor {
*
* @param context the specified context
*/
@RequestProcessing(value = "/articles/authors/\\d+/\\d+", uriPatternsMode = URIPatternMode.REGEX,
method = HttpMethod.GET)
@RequestProcessing(value = "/articles/authors/{author}/{p}", method = HttpMethod.GET)
public void getAuthorsArticlesByPage(final RequestContext context) {
final JSONObject jsonObject = new JSONObject();
......
......@@ -28,7 +28,6 @@ import org.b3log.latke.service.LangPropsService;
import org.b3log.latke.service.ServiceException;
import org.b3log.latke.servlet.RequestContext;
import org.b3log.latke.servlet.HttpMethod;
import org.b3log.latke.servlet.URIPatternMode;
import org.b3log.latke.servlet.annotation.RequestProcessing;
import org.b3log.latke.servlet.annotation.RequestProcessor;
import org.b3log.latke.servlet.renderer.AbstractFreeMarkerRenderer;
......@@ -94,7 +93,7 @@ public class IndexProcessor {
* @param context the specified context
* @throws Exception exception
*/
@RequestProcessing(value = {"/\\d*", ""}, uriPatternsMode = URIPatternMode.REGEX, method = HttpMethod.GET)
@RequestProcessing(value = {"/{p}", ""}, method = HttpMethod.GET)
public void showIndex(final RequestContext context) {
final HttpServletRequest request = context.getRequest();
final HttpServletResponse response = context.getResponse();
......
......@@ -22,7 +22,7 @@ import org.apache.commons.lang.time.DateFormatUtils;
import org.b3log.latke.Keys;
import org.b3log.latke.ioc.BeanManager;
import org.b3log.latke.repository.Query;
import org.b3log.latke.servlet.HTTPRequestContext;
import org.b3log.latke.servlet.RequestContext;
import org.b3log.solo.AbstractTestCase;
import org.b3log.solo.model.Article;
import org.b3log.solo.model.Option;
......@@ -327,14 +327,14 @@ public class ArticleProcessorTestCase extends AbstractTestCase {
final HttpServletResponse response = mock(HttpServletResponse.class);
when(response.getWriter()).thenReturn(printWriter);
final HTTPRequestContext httpRequestContext = new HTTPRequestContext();
httpRequestContext.setRequest(request);
httpRequestContext.setResponse(response);
final RequestContext RequestContext = new RequestContext();
RequestContext.setRequest(request);
RequestContext.setResponse(response);
final ArticleProcessor articleProcessor = BeanManager.getInstance().getReference(ArticleProcessor.class);
articleProcessor.showArticle(httpRequestContext);
articleProcessor.showArticle(RequestContext);
final Map<String, Object> dataModel = httpRequestContext.getRenderer().getRenderDataModel();
final Map<String, Object> dataModel = RequestContext.getRenderer().getRenderDataModel();
final JSONObject handledArticle = (JSONObject) dataModel.get(Article.ARTICLE);
Assert.assertTrue(StringUtils.contains(handledArticle.optString(Keys.OBJECT_ID), article.optString(Keys.OBJECT_ID)));
}
......
......@@ -17,17 +17,11 @@
*/
package org.b3log.solo.processor;
import org.b3log.latke.servlet.HTTPRequestContext;
import org.b3log.latke.servlet.HttpControl;
import org.b3log.latke.servlet.DispatcherServlet;
import org.b3log.latke.servlet.handler.*;
import org.b3log.latke.servlet.renderer.AbstractHTTPResponseRenderer;
import org.b3log.latke.servlet.renderer.HTTP404Renderer;
import org.b3log.latke.servlet.renderer.HTTP500Renderer;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
......@@ -35,59 +29,24 @@ import java.util.List;
* Mock dispatcher servlet for unit tests.
*
* @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.0.0.1, Apr 22, 2017
* @version 1.0.0.2, Dec 5, 2018
* @since 1.7.0
*/
public class MockDispatcherServlet {
/**
* the holder of all the sys-handler.
* Handlers
*/
private static final List<Handler> SYS_HANDLER = new ArrayList<>();
private static final List<Handler> HANDLERS = new ArrayList<>();
public void init() throws ServletException {
SYS_HANDLER.add(new RequestPrepareHandler());
SYS_HANDLER.add(new RequestDispatchHandler());
SYS_HANDLER.add(new ArgsHandler());
SYS_HANDLER.add(new AdviceHandler());
SYS_HANDLER.add(new MethodInvokeHandler());
public void init() {
HANDLERS.add(new RouteHandler());
HANDLERS.add(new BeforeHandleHandler());
HANDLERS.add(new ContextHandleHandler());
HANDLERS.add(new AfterHandleHandler());
}
public void service(final HttpServletRequest req, final HttpServletResponse resp) throws ServletException, IOException {
final HTTPRequestContext httpRequestContext = new HTTPRequestContext();
httpRequestContext.setRequest(req);
httpRequestContext.setResponse(resp);
final HttpControl httpControl = new HttpControl(SYS_HANDLER.iterator(), httpRequestContext);
try {
httpControl.nextHandler();
} catch (final Exception e) {
httpRequestContext.setRenderer(new HTTP500Renderer(e));
}
result(httpRequestContext);
}
/**
* To http repsonse.
*
* @param context {@link HTTPRequestContext}
* @throws IOException IOException
*/
public static void result(final HTTPRequestContext context) throws IOException {
final HttpServletResponse response = context.getResponse();
if (response.isCommitted()) { // Response sends redirect or error
return;
}
AbstractHTTPResponseRenderer renderer = context.getRenderer();
if (null == renderer) {
renderer = new HTTP404Renderer();
}
renderer.render(context);
public void service(final HttpServletRequest req, final HttpServletResponse resp) {
DispatcherServlet.handle(req, resp);
}
}
......@@ -20,7 +20,7 @@ package org.b3log.solo.processor;
import org.apache.commons.lang.StringUtils;
import org.b3log.latke.Keys;
import org.b3log.latke.ioc.BeanManager;
import org.b3log.latke.servlet.HTTPRequestContext;
import org.b3log.latke.servlet.RequestContext;
import org.b3log.solo.AbstractTestCase;
import org.b3log.solo.model.Option;
import org.b3log.solo.model.Page;
......@@ -83,14 +83,14 @@ public class PageProcessorTestCase extends AbstractTestCase {
final HttpServletResponse response = mock(HttpServletResponse.class);
when(response.getWriter()).thenReturn(printWriter);
final HTTPRequestContext httpRequestContext = new HTTPRequestContext();
httpRequestContext.setRequest(request);
httpRequestContext.setResponse(response);
final RequestContext RequestContext = new RequestContext();
RequestContext.setRequest(request);
RequestContext.setResponse(response);
final PageProcessor pageProcessor = BeanManager.getInstance().getReference(PageProcessor.class);
pageProcessor.showPage(httpRequestContext);
pageProcessor.showPage(RequestContext);
final Map<String, Object> dataModel = httpRequestContext.getRenderer().getRenderDataModel();
final Map<String, Object> dataModel = RequestContext.getRenderer().getRenderDataModel();
final JSONObject handledPage = (JSONObject) dataModel.get(Page.PAGE);
Assert.assertTrue(StringUtils.contains(handledPage.optString(Keys.OBJECT_ID), page.optString(Keys.OBJECT_ID)));
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment