Простой сайт JSP - PullRequest
       18

Простой сайт JSP

2 голосов
/ 19 декабря 2009

Мне нужна помощь / совет по созданию простого JSP-сайта с использованием эквивалентной функции PHP include + switch.

Цель состоит в том, чтобы я мог переключаться между несколькими страницами JSP-страниц на одной главной странице.

Какая была бы самая простая возможная форма вышеупомянутой 'функции'?

Ответы [ 2 ]

5 голосов
/ 19 декабря 2009

Там у вас есть <jsp:include> для. Вы можете использовать EL для указания атрибута page.

Создайте файл /WEB-INF/main.jsp, который будет выглядеть так:

<!doctype html>
<html lang="en">
    <head>
        <title>Title</title>
    </head>
    <body>
        <jsp:include page="${page}" />
    </body>
</html>

Вы можете управлять значением ${page} с помощью сервлета контроллера страницы. Что-то вроде:

public class PageController extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setAttribute("page", "/WEB-INF" + request.getPathInfo());
        request.getRequestDispatcher("/WEB-INF/main.jsp").forward(request, response);
    }

}

Отобразить этот сервлет в web.xml следующим образом:

<servlet>
    <servlet-name>pageController</servlet-name>
    <servlet-class>com.example.PageController</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>pageController</servlet-name>
    <url-pattern>/page/*</url-pattern>
</servlet-mapping>

Таким образом, сервлет доступен через http://example.com/context/page/foo.jsp, и в этом примере URL он будет получать /foo.jsp из pathinfo и, таким образом, установить атрибут page со значением /WEB-INF/foo.jsp, чтобы он был доступен в EL как ${page}, чтобы jsp:include знал, что он должен включать. Нет необходимости в грязных скриптлетах или операторах переключения.

В /WEB-INF/foo.jsp вы можете просто записать HTML, как если бы он был помещен внутри тега HTML <body>.

Обратите внимание, что файлы JSP помещаются в /WEB-INF, это сделано для предотвращения прямого доступа по URL, чтобы пользователи не могли запрашивать их без прохождения через контроллер страницы, например, http://example.com/context/foo.jsp, который только возвращает частичное содержание (будущая страница).

Надеюсь, это поможет.

1 голос
/ 19 декабря 2009

Попробуйте

<%  if ( expression1 ) { %>
    <%@ include file="file1.jspf" %>
<% } else if(expression2) { %>
    <%@ include file="file2.jspf" %>
<% } %>

Или, если у вас есть возможность, проверьте JSF2 и / или Facelets. У него гораздо более мощные шаблоныные возможности.

...