2010-08-02 2 views
1

У меня возникла проблема с веб-проектом Java. Проект, над которым я работаю, был сделан со стандартным jsp, смешанным с страницами jsf. Главная страница приложения, называемая main.jsp, представляет собой стандартную страницу jsp, которая должна обращаться к управляемому компоненту с областью сеанса, созданной в рамках фильтра сервлетов, используемого для проверки подлинности пользователя. В моей web.xml я настроил, что стоит двигатель должен реагировать на .jsf и/лица/* ЗапросСоздание контекста jsf

<filter-mapping> 
    <filter-name>extensionsFilter</filter-name> 
    <url-pattern>*.jsf</url-pattern> 
    </filter-mapping> 
    <filter-mapping> 
    <filter-name>extensionsFilter</filter-name> 
    <url-pattern>/faces/*</url-pattern> 
    </filter-mapping> 

Если я открываю мое приложение с http//myserver/myapp/faces/main.jsp все работает отлично. Если я открою приложение с помощью http://myserver/myapp/main.jsp, я получу ошибку, потому что контекст лиц еще не создан. Ни настройка страницы приветствия, ни настройка перенаправления apache Я могу позволить приложению открыть правую страницу (main.jsp в контексте лиц), когда пользователи просто набирают h ** p: // myserver/myapp в своих браузерах : это потому, что страница /faces/main.jsp физически не существует.

Я думаю, что может быть 2 решения: возможность запуска контекста лиц даже за пределами шаблона/faces/* или найти способ перенаправления tomcat на /faces/main.jsp, даже если страница doesn ' t существует ... но я провалил все, что я пробовал.

ответ

1

Просто не открыть приложение с помощью http://myserver/myapp/main.jsp, а скорее http://myserver/myapp/faces/main.jsp или (более предпочтительно) http://myserver/myapp/main.jsf.

Если вся ваша забота о том, что конечные пользователи не должны иметь возможности получить доступ к страницам JSP вне url-pattern от FacesServlet (еще этого вопроса не имеет смысла;)), а затем пойти на *.jsf шаблон и добавить security-constraint с пустым auth-constraint по телефону *.jsp на web.xml. Это должно позаботиться о том, чтобы конечные пользователи не смогли напрямую запросить URL-адрес *.jsp.

<security-constraint> 
    <display-name>Restrict direct access to JSP files</display-name> 
    <web-resource-collection> 
     <web-resource-name>JSP files</web-resource-name> 
     <url-pattern>*.jsp</url-pattern> 
    </web-resource-collection> 
    <auth-constraint /> 
</security-constraint> 

Это напрямую не возможно, если вы используете /faces/* отображение. Я бы избавился от него в web.xml.

Кроме того, для покрытия конечных пользователей, которые печатают http://myserver/myapp, то просто определить, как main.jsfwelcome-file в web.xml и избавиться от других определяемых приветственных файлов. В Tomcat (и, возможно, и других сервлетконтейнерах) вам нужно будет создать пустой файл с таким именем, чтобы обмануть сервер, чтобы файл существовал на диске.

+0

Я пытаюсь следовать вашему намеку, но мне что-то не хватает: просто переименовать main.jsp в main.jsf недостаточно, чтобы заставить его работать; tomcat отвечает содержимым main.jsf как текстовым, отправляя код страницы. Что я должен делать, чтобы страница работала так же, как она работает, когда я вызываю /faces/main.jsp? – themarcuz

+0

Вам нужно переименовать его только в URL, а не в файл. Фактическое расширение файла должно быть '.jsp'. «FacesServlet» автоматически найдет правый JSP-файл. Расширение должно быть сохранено, потому что оно вызовет встроенный 'sservice' servletcontainer' для анализа JSP-файла. – BalusC

+0

Я не могу заставить его работать :(Если бы я понял, что вы сказали, не изменяя ничего, просто называя http: //myserver/myapp/main.jsf, приложение должно создать контекст лиц и ответить с помощью main.jsp sandard jsp страница ... это так?? потому что это не работает. – themarcuz

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