2010-09-19 2 views
0

Я работаю над веб-приложением, которое использует 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; 
    } 
} 

ответ

0

файлы в /WEB-INF являются нет общедоступный. Я не знаю, почему он работает локально, но это нарушает спецификацию сервлета. Кроме того, JSF не может пересылать представления на страницы JSP в папке /WEB-INF, их следует размещать в открытом webcontent (один уровень папки выше /WEB-INF).

+0

@BalusC, я попробовал с вашим ответом, теперь у меня есть все страницы на один уровень вверх, который находится под «WEB», и у меня есть папка «admin» внутри «WEB» и некоторые страницы внутри «admin». Я могу получить доступ к страницам под «WEB», но не под WEB/admin. Нужно ли добавлять сервлет-сопоставление или что-то еще? –

+0

Нет, вам это не нужно. У вас есть сервлеты или фильтры или ограничения в 'web.xml', которые могут вести себя безумно? Также имейте в виду, что пути/имена файлов в URL-адресах чувствительны к регистру. Он не будет работать, если папка называется 'Admin', и вы используете' admin' в URL. – BalusC

+0

@BalusC, Да я следующий фильтр в web.xml: SecurityFilter <имя-фильтра /> <фильтр-класс> com.myapp.SecurityFilter <фильтр-отображение> SecurityFilter /admin/*

Смежные вопросы