2013-06-21 3 views
0

Я начал изучать Java недавно, и мой вопрос может быть глупым, но тем не менее:Как уменьшить дублирование в jsp?

Я работаю над небольшим проектом, пока это просто простой веб-сервис, работающий на Google App Engine. Мы используем JSP таким образом.

View - Jsp файл

<jsp:useBean id="bean" class="my.package.web.SpecificBean" /> 
<jsp:setProperty name="bean" property="request" value="<%=request%>" /> 

Controller - Java Bean.

public class SpecificBean { 
    public void setRequest(HttpServletRequest request) { 
     /* 
     Do authorization 
     Prepare data for page 
     */ 
    } 
} 

--- ДОБАВЛЕНО --- в первый раз она была спрятана

<jsp:setProperty вызовы SetRequest метод, подготавливает данные для страницы, и я использую JSTL поместить эти данные в необходимых местах. Контроллер, использующий домен & и т. Д., Но это не то, о чем я говорю. Когда я добавляю авторизацию, я решу не перенаправлять людей, а давать им страницу входа по этому адресу. я написал то вроде этого:

---/--- ДОБАВЛЕНО

<jsp:useBean id="bean" class="my.package.web.SpecificBean" /> 
<jsp:setProperty name="bean" property="request" value="<%=request%>" /> 
<c:choose> 
    <c:when test="${!bean.userAuth.loggedIn}"> 
     <html><head><title>Please log in</title></head><body>...</body></html> 
    </c:when> 
    <c:when test="${!bean.userAuth.userValid}"> 
     <html><head><title>You are not allowed</title></head><body>...</body></html> 
    </c:when> 
    <c:otherwise> 
     <html><head><title>Page you have been requested</title></head><body>...</body></html> 
    </c:otherwise> 
</c:choose> 

Да, это выглядит громоздким, я знаю! В каждом .jsp мне нужно скопировать-вставить такой большой кусок кода. Конечно, я сделал некоторые улучшения, например, поставлю «Пожалуйста, войдите» в html на отдельный .jsp и использовал <%@include file=""%> Но в любом случае есть достойная часть кода, которая обертывает каждую страницу. Есть только 3 страницы, но ... Я мог бы использовать две инструкции <%@include file=""%>, для «головы» и «снизу», но я не уверен, что это решение не имеет плохих последствий.

Итак, что мне делать?

  1. Используйте только <%@include file=""%>
  2. Перенаправление (но я думаю, что это не последняя проблема моей архитектуры)
  3. Я слышал о Spring Web Flow, думаю, это то, что мне нужно. Однако это может быть излишним для небольшого веб-сервиса
  4. Используйте taglib и создайте собственные теги, используя их как JSTL
  5. Ваше предложение?

ответ

2

Аутентификация - это не то, о чем должна знать ваша страница.

Переместите эту логику в Filter, которая проверяет подлинность и перенаправляет, если необходимо.

+0

Это правильное решение. – NINCOMPOOP

+0

Аутентификация находится в контроллере. Вы думаете, что это неправильно? – AlexB

+0

@AlexB Ну, у вас будет несколько контроллеров, но только одна точка аутентификации (и/или авторизация). Поэтому я бы не назвал его идеальным. –

1

Простые идти на динамическом включает:

<jsp:include page="pagename" /> 

<jsp:include действия выполняются во время запроса, где, как <%@include выполняющего времени компиляции.

+0

В чем разница 'includes' в этой ситуации? Там будет такое же копирование кода. – AlexB

+0

Динамическое включение выполняет включенную страницу и включает результат на выходе текущей страницы. Статичность включает добавление содержимого включенной страницы в источник текущей страницы до компиляции текущей страницы. Включено только копирование для статических включений. –

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