Я работаю над веб-приложением, которое использует JSF. У меня есть папка под названием «admin» под «web», и у меня есть пара jsp-страниц в папке «admin». Я могу получить доступ к страницам jsp под «web», но когда я пытаюсь получить доступ к страницам под «admin», я получаю «404-запрошенный ресурс не может быть найден» «context.xml» для моего приложения примерно такой:Приложение JSF, дающее 404 для подконтекста
<Context antiJARLocking="true" path="/MyApp"/>
Эта вещь работает на моем местном tomcat, но когда я разворачиваю это на своих хостинг-провайдерах tomcat, у меня есть вышеупомянутая проблема. Что именно мне нужно сделать, чтобы исправить эту проблему.
Вот server.xml для моего приложения на хостинг предоставляет:
кота<Host name="myapp.com" appBase="/home/myapp/public_html">
<Alias>www.myapp.com</Alias>
<Context path="" reloadable="true" docBase="/home/myapp/public_html" debug="1"/>
<Context path="/manager" debug="0" privileged="true"
docBase="/usr/local/jakarta/tomcat/server/webapps/manager">
</Context>
</Host>
Или мне нужно добавить URL-Mapping в моей web.xml?
Я следующий сервлет фильтр в web.xml для '/ админ/*' URL-шаблона
<filter>
<filter-name>SecurityFilter</filter-name>
<filter-class>com.myapp.SecurityFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>SecurityFilter</filter-name>
<url-pattern>/admin/*</url-pattern>
</filter-mapping>
И код фильтра выглядит следующим образом:
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
lgMgr.logDebug("doFilter() is called...");
String validuser = null;
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
HttpSession session = req.getSession(true);
//If authorization key not in session, redirect to login page.
validuser = (String) session.getAttribute(Common.AUTH_USER);
if(validuser != null) {
lgMgr.logDebug("doFilter(): User is allowed to access the page...");
//If the user is allowed access to the URI, let the flow proceed as normal
chain.doFilter(request, response);
return;
} else {
lgMgr.logDebug("doFilter(): User is not allowed to access the page, redirecting user login...");
//User not allowed access - redirect to login page
res.sendRedirect(req.getContextPath() + "/AdmLogin.jsf");
return;
}
}
@BalusC, я попробовал с вашим ответом, теперь у меня есть все страницы на один уровень вверх, который находится под «WEB», и у меня есть папка «admin» внутри «WEB» и некоторые страницы внутри «admin». Я могу получить доступ к страницам под «WEB», но не под WEB/admin. Нужно ли добавлять сервлет-сопоставление или что-то еще? –
Нет, вам это не нужно. У вас есть сервлеты или фильтры или ограничения в 'web.xml', которые могут вести себя безумно? Также имейте в виду, что пути/имена файлов в URL-адресах чувствительны к регистру. Он не будет работать, если папка называется 'Admin', и вы используете' admin' в URL. – BalusC
@BalusC, Да я следующий фильтр в web.xml: SecurityFilter <имя-фильтра /> <фильтр-класс> com.myapp.SecurityFilter фильтр класса> <фильтр-отображение> SecurityFilter filter-name> /admin/* url-pattern> filter-mapping> –