У меня есть старое приложение на Java 1.6, Servlet 2.5, развернутое как WAR на сервере приложений Websphere 7.x. Теперь я пытаюсь добавить недавно написанную страницу с фреймворком Angular2 и машинописным текстом.
Мой web.xml имеет следующее сопоставление сервлета.
<servlet>
<servlet-name>MyControllerServlet</servlet-name>
<servlet-class>com.company.path.MyControllerServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyControllerServlet</servlet-name>
<url-pattern>/MyControllerServlet</url-pattern>
</servlet-mapping>
В нашем существующем приложении мы передаем запросы GET с параметром запроса нашему сервлету для перенаправления адреса.
http://localhost:9081/rootContext/MyControllerServlet?brand=brand1 http://localhost:9081/rootContext/MyControllerServlet?brand=brand2 и так далее. К этому мы должны добавить только что созданную страницу Angular2, когда бренд равен brand3. Таким образом, http://localhost:9081/rootContext/MyControllerServlet?brand=brand3 должен перенаправить на страницу Angular2.
MyControllerServlet.com
if(brand.equalsIgnoreCase(BRAND1)){
response.sendRedirect(BRAND1_PAGE);
}else if(brand.equalsIgnoreCase(BRAND2)){
response.sendRedirect(BRAND2_PAGE);
}
Это хорошо работало с существующими страницами, которые все являются JSP. Недавно добавленная страница Angular2 называется brand3.jsp со следующей конфигурацией.
webpack-dist-conf.js
new HtmlWebpackPlugin({
template: conf.path.src('index.html'),
filename: 'brand3.jsp'
})
Выходной блок выглядит так.
output: {
path: path.join(process.cwd(), conf.paths.dist),
filename: '[name]-[hash].js',
publicPath: '${pageContext.request.contextPath}/'
}
PublicPath был добавлен, так как main*.js и vendor*.js давали 404 без корневого контекста.
routes.ts имеет следующую корневую конфигурацию.
{
path: '',
redirectTo: 'landingpage',
pathMatch: 'full'
},
{
path: 'landingpage',
component: LandingPageComponent
}
Проблема в том, что когда мы перенаправляем на brand3.jsp, мы получаем 404 со следующей ошибкой.
ОШИБКА Ошибка: Неперехваченный (в промисе): Ошибка: Не удается сопоставить ни один маршрут. Сегмент URL: 'rootContext/MyControllerServlet' Ошибка: не удается сопоставить ни одного маршрута. Сегмент URL: 'rootContext/MyControllerServlet'
Это перенаправление работало довольно хорошо раньше, когда страница была разработана с версией Angular 1.6. Нам даже не понадобился publicPath для рендеринга файлов main*.js и vendor*.js, которые находятся в той же папке, что и capmf.jsp.
Проблема начала возникать только после перехода на TypeScript и Angular2.
Я читал, что маршруты Angular2 требуют некоторой конфигурации на стороне сервера. Для этого я попытался использовать UrlRewriteFilter tuckey со следующей конфигурацией.
web.xml
<filter>
<filter-name>UrlRewriteFilter</filter-name>
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
<init-param>
<param-name>logLevel</param-name>
<param-value>DEBUG</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>UrlRewriteFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
urlrewrite.xml
<rule enabled="true">
<note>Do not process URL ending at index.html</note>
<from>contextRoot/brand3.jsp$</from>
<to last="true">-</to>
</rule>
<rule>
<from>contextRoot/landingpage</from>
<to>contextRoot/brand3.jsp</to>
</rule>
Я знаю, что перезапись URL-адреса работает, поскольку я мог видеть операторы отладки. Однако я не использовал его раньше и не уверен, правильно ли я его настроил.
Дополнительное примечание. Мы используем Maven3 для создания приложения и для страниц Angular, которые мы используем.
<groupId>com.github.eirslett</groupId>
<artifactId>frontend-maven-plugin</artifactId>
<version>1.4</version>
У меня вопрос -
- Это происходит из-за тега ? Я не могу изменить базовый тег href с помощью плагинов npm. Я получаю не ошибку конструктора с base-href-webpack-plugin и webpack-base-href plugin
- Является ли publicPath правильным способом решения проблемы, когда rootContext не добавляется для файлов src javascript?
- Что еще я могу сделать, чтобы избежать ошибки 404 для brand3.jsp?