Commit c53f59d8 authored by Liang Ding's avatar Liang Ding

🎨 #12580

parent 86bbde7f
...@@ -23,11 +23,6 @@ import org.b3log.latke.Latkes; ...@@ -23,11 +23,6 @@ import org.b3log.latke.Latkes;
import org.b3log.latke.ioc.BeanManager; import org.b3log.latke.ioc.BeanManager;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; 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 org.b3log.solo.service.InitService;
import javax.servlet.*; import javax.servlet.*;
...@@ -84,13 +79,6 @@ public final class InitCheckFilter implements Filter { ...@@ -84,13 +79,6 @@ public final class InitCheckFilter implements Filter {
return; 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 BeanManager beanManager = BeanManager.getInstance();
final InitService initService = beanManager.getReference(InitService.class); final InitService initService = beanManager.getReference(InitService.class);
if (initService.isInited()) { if (initService.isInited()) {
...@@ -99,11 +87,8 @@ public final class InitCheckFilter implements Filter { ...@@ -99,11 +87,8 @@ public final class InitCheckFilter implements Filter {
return; return;
} }
if ("POST". if ("POST".equalsIgnoreCase(httpServletRequest.getMethod())
&& (Latkes.getContextPath() + "/init").equals(requestURI) ||
equalsIgnoreCase(httpServletRequest.getMethod()) && (Latkes.getContextPath() + "/init").
equals(requestURI) ||
StringUtils.startsWith(requestURI, Latkes.getContextPath() + "/oauth/github")) { StringUtils.startsWith(requestURI, Latkes.getContextPath() + "/oauth/github")) {
// Do initialization // Do initialization
chain.doFilter(request, response); chain.doFilter(request, response);
...@@ -116,18 +101,7 @@ public final class InitCheckFilter implements Filter { ...@@ -116,18 +101,7 @@ public final class InitCheckFilter implements Filter {
initReported = true; initReported = true;
} }
final RequestContext context = new RequestContext(); chain.doFilter(request, response);
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);
} }
@Override @Override
......
...@@ -25,10 +25,8 @@ import org.b3log.latke.logging.Level; ...@@ -25,10 +25,8 @@ import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.repository.RepositoryException; import org.b3log.latke.repository.RepositoryException;
import org.b3log.latke.servlet.DispatcherServlet; import org.b3log.latke.servlet.DispatcherServlet;
import org.b3log.latke.servlet.RequestContext;
import org.b3log.latke.servlet.HttpMethod; import org.b3log.latke.servlet.HttpMethod;
import org.b3log.latke.servlet.HttpControl; import org.b3log.latke.servlet.RequestContext;
import org.b3log.latke.servlet.renderer.Http500Renderer;
import org.b3log.solo.model.Article; import org.b3log.solo.model.Article;
import org.b3log.solo.model.Page; import org.b3log.solo.model.Page;
import org.b3log.solo.repository.ArticleRepository; import org.b3log.solo.repository.ArticleRepository;
...@@ -47,8 +45,7 @@ import java.io.IOException; ...@@ -47,8 +45,7 @@ import java.io.IOException;
* *
* @author <a href="http://88250.b3log.org">Liang Ding</a> * @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.0.1.8, Oct 5, 2018 * @version 1.0.1.8, Oct 5, 2018
* @see org.b3log.solo.processor.ArticleProcessor#showArticle(org.b3log.latke.servlet.RequestContext, * @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.PageProcessor#showPage(org.b3log.latke.servlet.RequestContext) * @see org.b3log.solo.processor.PageProcessor#showPage(org.b3log.latke.servlet.RequestContext)
* @since 0.3.1 * @since 0.3.1
*/ */
...@@ -130,6 +127,7 @@ public final class PermalinkFilter implements Filter { ...@@ -130,6 +127,7 @@ public final class PermalinkFilter implements Filter {
} }
dispatchToArticleOrPageProcessor(request, response, article, page); dispatchToArticleOrPageProcessor(request, response, article, page);
chain.doFilter(request, response);
} }
/** /**
...@@ -155,17 +153,7 @@ public final class PermalinkFilter implements Filter { ...@@ -155,17 +153,7 @@ public final class PermalinkFilter implements Filter {
request.setAttribute(Page.PAGE, page); request.setAttribute(Page.PAGE, page);
request.setAttribute(Keys.HttpRequest.REQUEST_URI, Latkes.getContextPath() + "/page"); request.setAttribute(Keys.HttpRequest.REQUEST_URI, Latkes.getContextPath() + "/page");
} }
request.setAttribute(Keys.HttpRequest.REQUEST_METHOD, HttpMethod.GET.name()); 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 @Override
......
...@@ -30,9 +30,8 @@ import org.b3log.latke.model.Pagination; ...@@ -30,9 +30,8 @@ import org.b3log.latke.model.Pagination;
import org.b3log.latke.model.User; import org.b3log.latke.model.User;
import org.b3log.latke.service.LangPropsService; import org.b3log.latke.service.LangPropsService;
import org.b3log.latke.service.ServiceException; import org.b3log.latke.service.ServiceException;
import org.b3log.latke.servlet.RequestContext;
import org.b3log.latke.servlet.HttpMethod; 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.RequestProcessing;
import org.b3log.latke.servlet.annotation.RequestProcessor; import org.b3log.latke.servlet.annotation.RequestProcessor;
import org.b3log.latke.servlet.renderer.AbstractFreeMarkerRenderer; import org.b3log.latke.servlet.renderer.AbstractFreeMarkerRenderer;
...@@ -348,7 +347,7 @@ public class ArticleProcessor { ...@@ -348,7 +347,7 @@ public class ArticleProcessor {
* *
* @param context the specified context * @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) { public void getArticlesByPage(final RequestContext context) {
final JSONObject jsonObject = new JSONObject(); final JSONObject jsonObject = new JSONObject();
final HttpServletRequest request = context.getRequest(); final HttpServletRequest request = context.getRequest();
...@@ -390,7 +389,7 @@ public class ArticleProcessor { ...@@ -390,7 +389,7 @@ public class ArticleProcessor {
* *
* @param context the specified context * @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) { public void getTagArticlesByPage(final RequestContext context) {
final JSONObject jsonObject = new JSONObject(); final JSONObject jsonObject = new JSONObject();
...@@ -448,7 +447,7 @@ public class ArticleProcessor { ...@@ -448,7 +447,7 @@ public class ArticleProcessor {
* *
* @param context the specified context * @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) { public void getArchivesArticlesByPage(final RequestContext context) {
final JSONObject jsonObject = new JSONObject(); final JSONObject jsonObject = new JSONObject();
...@@ -500,8 +499,7 @@ public class ArticleProcessor { ...@@ -500,8 +499,7 @@ public class ArticleProcessor {
* *
* @param context the specified context * @param context the specified context
*/ */
@RequestProcessing(value = "/articles/authors/\\d+/\\d+", uriPatternsMode = URIPatternMode.REGEX, @RequestProcessing(value = "/articles/authors/{author}/{p}", method = HttpMethod.GET)
method = HttpMethod.GET)
public void getAuthorsArticlesByPage(final RequestContext context) { public void getAuthorsArticlesByPage(final RequestContext context) {
final JSONObject jsonObject = new JSONObject(); final JSONObject jsonObject = new JSONObject();
......
...@@ -28,7 +28,6 @@ import org.b3log.latke.service.LangPropsService; ...@@ -28,7 +28,6 @@ import org.b3log.latke.service.LangPropsService;
import org.b3log.latke.service.ServiceException; import org.b3log.latke.service.ServiceException;
import org.b3log.latke.servlet.RequestContext; import org.b3log.latke.servlet.RequestContext;
import org.b3log.latke.servlet.HttpMethod; 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.RequestProcessing;
import org.b3log.latke.servlet.annotation.RequestProcessor; import org.b3log.latke.servlet.annotation.RequestProcessor;
import org.b3log.latke.servlet.renderer.AbstractFreeMarkerRenderer; import org.b3log.latke.servlet.renderer.AbstractFreeMarkerRenderer;
...@@ -94,7 +93,7 @@ public class IndexProcessor { ...@@ -94,7 +93,7 @@ public class IndexProcessor {
* @param context the specified context * @param context the specified context
* @throws Exception exception * @throws Exception exception
*/ */
@RequestProcessing(value = {"/\\d*", ""}, uriPatternsMode = URIPatternMode.REGEX, method = HttpMethod.GET) @RequestProcessing(value = {"/{p}", ""}, method = HttpMethod.GET)
public void showIndex(final RequestContext context) { public void showIndex(final RequestContext context) {
final HttpServletRequest request = context.getRequest(); final HttpServletRequest request = context.getRequest();
final HttpServletResponse response = context.getResponse(); final HttpServletResponse response = context.getResponse();
......
...@@ -22,7 +22,7 @@ import org.apache.commons.lang.time.DateFormatUtils; ...@@ -22,7 +22,7 @@ import org.apache.commons.lang.time.DateFormatUtils;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.ioc.BeanManager; import org.b3log.latke.ioc.BeanManager;
import org.b3log.latke.repository.Query; 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.AbstractTestCase;
import org.b3log.solo.model.Article; import org.b3log.solo.model.Article;
import org.b3log.solo.model.Option; import org.b3log.solo.model.Option;
...@@ -327,14 +327,14 @@ public class ArticleProcessorTestCase extends AbstractTestCase { ...@@ -327,14 +327,14 @@ public class ArticleProcessorTestCase extends AbstractTestCase {
final HttpServletResponse response = mock(HttpServletResponse.class); final HttpServletResponse response = mock(HttpServletResponse.class);
when(response.getWriter()).thenReturn(printWriter); when(response.getWriter()).thenReturn(printWriter);
final HTTPRequestContext httpRequestContext = new HTTPRequestContext(); final RequestContext RequestContext = new RequestContext();
httpRequestContext.setRequest(request); RequestContext.setRequest(request);
httpRequestContext.setResponse(response); RequestContext.setResponse(response);
final ArticleProcessor articleProcessor = BeanManager.getInstance().getReference(ArticleProcessor.class); 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); final JSONObject handledArticle = (JSONObject) dataModel.get(Article.ARTICLE);
Assert.assertTrue(StringUtils.contains(handledArticle.optString(Keys.OBJECT_ID), article.optString(Keys.OBJECT_ID))); Assert.assertTrue(StringUtils.contains(handledArticle.optString(Keys.OBJECT_ID), article.optString(Keys.OBJECT_ID)));
} }
......
...@@ -17,17 +17,11 @@ ...@@ -17,17 +17,11 @@
*/ */
package org.b3log.solo.processor; package org.b3log.solo.processor;
import org.b3log.latke.servlet.HTTPRequestContext; import org.b3log.latke.servlet.DispatcherServlet;
import org.b3log.latke.servlet.HttpControl;
import org.b3log.latke.servlet.handler.*; 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.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
...@@ -35,59 +29,24 @@ import java.util.List; ...@@ -35,59 +29,24 @@ import java.util.List;
* Mock dispatcher servlet for unit tests. * Mock dispatcher servlet for unit tests.
* *
* @author <a href="http://88250.b3log.org">Liang Ding</a> * @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 * @since 1.7.0
*/ */
public class MockDispatcherServlet { 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 { public void init() {
SYS_HANDLER.add(new RequestPrepareHandler()); HANDLERS.add(new RouteHandler());
SYS_HANDLER.add(new RequestDispatchHandler()); HANDLERS.add(new BeforeHandleHandler());
SYS_HANDLER.add(new ArgsHandler()); HANDLERS.add(new ContextHandleHandler());
SYS_HANDLER.add(new AdviceHandler()); HANDLERS.add(new AfterHandleHandler());
SYS_HANDLER.add(new MethodInvokeHandler());
} }
public void service(final HttpServletRequest req, final HttpServletResponse resp) throws ServletException, IOException { public void service(final HttpServletRequest req, final HttpServletResponse resp) {
final HTTPRequestContext httpRequestContext = new HTTPRequestContext(); DispatcherServlet.handle(req, resp);
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);
} }
} }
...@@ -20,7 +20,7 @@ package org.b3log.solo.processor; ...@@ -20,7 +20,7 @@ package org.b3log.solo.processor;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.ioc.BeanManager; 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.AbstractTestCase;
import org.b3log.solo.model.Option; import org.b3log.solo.model.Option;
import org.b3log.solo.model.Page; import org.b3log.solo.model.Page;
...@@ -83,14 +83,14 @@ public class PageProcessorTestCase extends AbstractTestCase { ...@@ -83,14 +83,14 @@ public class PageProcessorTestCase extends AbstractTestCase {
final HttpServletResponse response = mock(HttpServletResponse.class); final HttpServletResponse response = mock(HttpServletResponse.class);
when(response.getWriter()).thenReturn(printWriter); when(response.getWriter()).thenReturn(printWriter);
final HTTPRequestContext httpRequestContext = new HTTPRequestContext(); final RequestContext RequestContext = new RequestContext();
httpRequestContext.setRequest(request); RequestContext.setRequest(request);
httpRequestContext.setResponse(response); RequestContext.setResponse(response);
final PageProcessor pageProcessor = BeanManager.getInstance().getReference(PageProcessor.class); 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); final JSONObject handledPage = (JSONObject) dataModel.get(Page.PAGE);
Assert.assertTrue(StringUtils.contains(handledPage.optString(Keys.OBJECT_ID), page.optString(Keys.OBJECT_ID))); 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