Commit ec7ef602 authored by Liang Ding's avatar Liang Ding

🐛 修复生成静态站点链接问题 Fix #70

parent f9b4b22e
...@@ -66,6 +66,16 @@ public class StaticSiteConsole { ...@@ -66,6 +66,16 @@ public class StaticSiteConsole {
@Inject @Inject
private LangPropsService langPropsService; private LangPropsService langPropsService;
/**
* Mock request scheme.
*/
private static String scheme;
/**
* Mock request host.
*/
private static String host;
/** /**
* Generates static site. * Generates static site.
* *
...@@ -93,12 +103,10 @@ public class StaticSiteConsole { ...@@ -93,12 +103,10 @@ public class StaticSiteConsole {
FileUtils.forceMkdir(new File(staticSitePath)); FileUtils.forceMkdir(new File(staticSitePath));
final URL u = new URL(url); final URL u = new URL(url);
Latkes.setScheme(u.getProtocol()); scheme = u.getProtocol();
Latkes.setHost(u.getHost()); host = u.getHost();
if (-1 != u.getPort()) { if (-1 != u.getPort()) {
Latkes.setPort(String.valueOf(u.getPort())); host += ":" + u.getPort();
} else {
Latkes.setPort("");
} }
Solos.GEN_STATIC_SITE = true; Solos.GEN_STATIC_SITE = true;
...@@ -160,7 +168,7 @@ public class StaticSiteConsole { ...@@ -160,7 +168,7 @@ public class StaticSiteConsole {
} }
} }
private static void genCategories() throws Exception { private static void genCategories() {
final BeanManager beanManager = BeanManager.getInstance(); final BeanManager beanManager = BeanManager.getInstance();
final CategoryQueryService categoryQueryService = beanManager.getReference(CategoryQueryService.class); final CategoryQueryService categoryQueryService = beanManager.getReference(CategoryQueryService.class);
final List<JSONObject> categories = categoryQueryService.getMostTagCategory(Integer.MAX_VALUE); final List<JSONObject> categories = categoryQueryService.getMostTagCategory(Integer.MAX_VALUE);
...@@ -245,7 +253,7 @@ public class StaticSiteConsole { ...@@ -245,7 +253,7 @@ public class StaticSiteConsole {
filePath = StringUtils.replace(filePath, "=", "/"); filePath = StringUtils.replace(filePath, "=", "/");
FileUtils.forceMkdir(new File(staticSitePath + filePath)); FileUtils.forceMkdir(new File(staticSitePath + filePath));
final OutputStream outputStream = new FileOutputStream(staticSitePath + filePath + "/index.html"); final OutputStream outputStream = new FileOutputStream(staticSitePath + filePath + "/index.html");
String html = Mocks.mockRequest(uri); String html = Mocks.mockRequest(uri, scheme, host);
IOUtils.write(html, outputStream, StandardCharsets.UTF_8); IOUtils.write(html, outputStream, StandardCharsets.UTF_8);
outputStream.close(); outputStream.close();
LOGGER.log(Level.INFO, "Generated a page [" + uri + "]"); LOGGER.log(Level.INFO, "Generated a page [" + uri + "]");
...@@ -254,7 +262,7 @@ public class StaticSiteConsole { ...@@ -254,7 +262,7 @@ public class StaticSiteConsole {
private static void genURI(final String uri) throws Exception { private static void genURI(final String uri) throws Exception {
FileUtils.forceMkdirParent(new File(staticSitePath + uri)); FileUtils.forceMkdirParent(new File(staticSitePath + uri));
final OutputStream outputStream = new FileOutputStream(staticSitePath + uri); final OutputStream outputStream = new FileOutputStream(staticSitePath + uri);
String html = Mocks.mockRequest(uri); String html = Mocks.mockRequest(uri, scheme, host);
IOUtils.write(html, outputStream, StandardCharsets.UTF_8); IOUtils.write(html, outputStream, StandardCharsets.UTF_8);
outputStream.close(); outputStream.close();
LOGGER.log(Level.INFO, "Generated a file [" + uri + "]"); LOGGER.log(Level.INFO, "Generated a file [" + uri + "]");
...@@ -263,13 +271,13 @@ public class StaticSiteConsole { ...@@ -263,13 +271,13 @@ public class StaticSiteConsole {
private static void genArticle(final String permalink) throws Exception { private static void genArticle(final String permalink) throws Exception {
if (!StringUtils.endsWithIgnoreCase(permalink, ".html") && !StringUtils.endsWithIgnoreCase(permalink, ".htm")) { if (!StringUtils.endsWithIgnoreCase(permalink, ".html") && !StringUtils.endsWithIgnoreCase(permalink, ".htm")) {
FileUtils.forceMkdir(new File(staticSitePath + permalink)); FileUtils.forceMkdir(new File(staticSitePath + permalink));
final String html = Mocks.mockRequest(permalink); final String html = Mocks.mockRequest(permalink, scheme, host);
final OutputStream outputStream = new FileOutputStream(staticSitePath + permalink + "/index.html"); final OutputStream outputStream = new FileOutputStream(staticSitePath + permalink + "/index.html");
IOUtils.write(html, outputStream, StandardCharsets.UTF_8); IOUtils.write(html, outputStream, StandardCharsets.UTF_8);
outputStream.close(); outputStream.close();
} else { } else {
FileUtils.forceMkdirParent(new File(staticSitePath + permalink)); FileUtils.forceMkdirParent(new File(staticSitePath + permalink));
final String html = Mocks.mockRequest(permalink); final String html = Mocks.mockRequest(permalink, scheme, host);
final OutputStream outputStream = new FileOutputStream(staticSitePath + permalink); final OutputStream outputStream = new FileOutputStream(staticSitePath + permalink);
IOUtils.write(html, outputStream, StandardCharsets.UTF_8); IOUtils.write(html, outputStream, StandardCharsets.UTF_8);
outputStream.close(); outputStream.close();
......
...@@ -19,6 +19,7 @@ package org.b3log.solo.util; ...@@ -19,6 +19,7 @@ package org.b3log.solo.util;
import io.netty.handler.codec.http.*; import io.netty.handler.codec.http.*;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.b3log.latke.Latkes;
import org.b3log.latke.http.Dispatcher; import org.b3log.latke.http.Dispatcher;
import org.b3log.latke.http.Request; import org.b3log.latke.http.Request;
import org.b3log.latke.http.Response; import org.b3log.latke.http.Response;
...@@ -31,7 +32,7 @@ import java.util.Map; ...@@ -31,7 +32,7 @@ import java.util.Map;
* Mock utilities. * Mock utilities.
* *
* @author <a href="http://88250.b3log.org">Liang Ding</a> * @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.0.0.0, Jan 7, 2020 * @version 1.0.0.1, Feb 28, 2020
* @since 3.9.0 * @since 3.9.0
*/ */
public final class Mocks { public final class Mocks {
...@@ -39,10 +40,8 @@ public final class Mocks { ...@@ -39,10 +40,8 @@ public final class Mocks {
private Mocks() { private Mocks() {
} }
public static String mockRequest(final String uri) { public static String mockRequest(final String uri, final String scheme, final String host) {
final Mocks.MockRequest request = Mocks.mockRequest(); final Mocks.MockRequest request = Mocks.mockRequest0(uri, scheme, host);
request.setRequestURI(uri);
if (StringUtils.contains(uri, "?")) { if (StringUtils.contains(uri, "?")) {
final Map<String, String> params = new LinkedHashMap<>(); final Map<String, String> params = new LinkedHashMap<>();
final String query = StringUtils.substringAfter(uri, "?"); final String query = StringUtils.substringAfter(uri, "?");
...@@ -64,8 +63,17 @@ public final class Mocks { ...@@ -64,8 +63,17 @@ public final class Mocks {
new MockDispatcher().handle(request, response); new MockDispatcher().handle(request, response);
} }
private static MockRequest mockRequest() { private static MockRequest mockRequest0(final String uri, final String scheme, final String host) {
final FullHttpRequest req = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.GET, "/a"); final FullHttpRequest req = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.GET, uri);
Latkes.setScheme(scheme);
if (StringUtils.contains(host, ":")) {
Latkes.setHost(host.split(":")[0]);
Latkes.setPort(host.split(":")[1]);
} else {
Latkes.setHost(host);
Latkes.setPort("");
}
return new MockRequest(req); return new MockRequest(req);
} }
......
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