Я начал изучать 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=""%>
, для «головы» и «снизу», но я не уверен, что это решение не имеет плохих последствий.
Итак, что мне делать?
- Используйте только
<%@include file=""%>
- Перенаправление (но я думаю, что это не последняя проблема моей архитектуры)
- Я слышал о Spring Web Flow, думаю, это то, что мне нужно. Однако это может быть излишним для небольшого веб-сервиса
- Используйте taglib и создайте собственные теги, используя их как JSTL
- Ваше предложение?
Это правильное решение. – NINCOMPOOP
Аутентификация находится в контроллере. Вы думаете, что это неправильно? – AlexB
@AlexB Ну, у вас будет несколько контроллеров, но только одна точка аутентификации (и/или авторизация). Поэтому я бы не назвал его идеальным. –