Включить другой файл JSP

161

В настоящее время я пытаюсь изучить JSP. Мой вопрос, в настоящее время я использовал заголовок и нижний колонтитул страницы, используя:

<%@include file="includes/header.jsp" %>

и

<%@include file="includes/footer.jsp" %>

Но теперь я также разделил содержание страницы. Таким образом, если пользователь нажимает на странице, скажем , продукты, он должен загрузить файл JSP , который расположен в: includes/pages/products.jsp Итак, ссылка на пользователя, как: <a href="index.jsp?p=products">Products</a>.

Итак, я должен получить значение p и отобразить страницу на его основе.

Следующее - то, что я сделал до сих пор.

<%
 if(request.getParameter("p")!=null)
 { 
   String p = request.getParameter("p");
%>    

<%@include file="includes/page_name.jsp" %>

<% 
 }
%>

Итак, как мне разместить значение переменной "p" в позиции "page_name"?

Или есть какой-нибудь другой метод, который я мог бы использовать?

В PHP мы могли бы использовать include()или include_once(). Я немного застрял в этой JSP. :(

Ахилеш Б Чандран
источник
1
Почему бы не жестко закодировать имя страницы? В любом случае, вы проверяете на P, тогда вы знаете, что страница дистрибуции будет p.jsp, поэтому есть какая-то причина усложнить?
Коса
Спасибо за ответ. Это было для примера. На самом деле, я разделил страницу на несколько. Например, если у меня есть страница «Продукты» в области администратора, чтобы добавить новый продукт, отредактировать продукт, выполнить поиск продукта, просмотреть продукт и т. Д., Он разделен на подстраницы. Таким образом, жесткое кодирование каждой строки будет выглядеть неприятно. Скажем, чтобы отображать свое имя только 10 раз, я мог либо выбрать печать с использованием цикла, либо записать 10 строк. Но я думаю, что лучше выбрать петлю. Не так ли? Я думаю, что это могло бы быть решением: stackoverflow.com/questions/482788/…
Akhilesh B Chandran

Ответы:

231

То, что вы делаете, это статическое включение. Статическое включение разрешается во время компиляции и, таким образом, может не использовать значение параметра, которое известно только во время выполнения.

Что вам нужно, это динамическое включение:

<jsp:include page="..." />

Обратите внимание, что вы должны использовать JSP EL, а не скриптлеты. Также кажется, что вы реализуете центральный контроллер с index.jsp. Вместо этого вы должны использовать сервлет и отправить его в соответствующий JSP из этого сервлета. Или лучше использовать существующую инфраструктуру MVC, такую ​​как Stripes или Spring MVC.

Дж. Б. Низет
источник
1
Спасибо за ваши предложения. :) Я пробовал использовать тег jsp: include. Но во время выполнения выдает ошибку «файл не найден». Сведения об исключении: java.io.FileNotFoundException: /includes/&lt;%= p %&gt;.jsp. Похоже, что <%= p %>он используется в пути к файлу!
Ахилеш Б. Чандран
7
Не используйте скриптлеты. Используйте JSP EL: page = "/ includes / $ {param.p}". Или попробуйте с page = "<% =" / includes / "+ p%>".
JB Низет
3
Спасибо. Я использовал это так: <jsp:include page="<%= "includes/" + p + ".jsp" %>" />и теперь это работает :)
Akhilesh B Chandran
2
Очень хороший ответ! Я видел этот шаблон (центральный контроллер в index.jsp) слишком много раз, и он всегда приводит к проблемам.
Матиас Гринишак,
Разве это не время перевода? И я думаю, что вы все еще можете использовать параметры с этим?
Корай Тугай
26

Вы можете использовать такие параметры

<jsp:include page='about.jsp'>
    <jsp:param name="articleId" value=""/>
</jsp:include>

и

в about.jsp вы можете взять параметр

<%String leftAds = request.getParameter("articleId");%>
vitralyoz
источник
18

Вы можете использовать директивы включения

<%
 if(request.getParameter("p")!=null)
 { 
   String p = request.getParameter("p");
%>    

<%@include file="<%="includes/" + p +".jsp"%>"%>

<% 
 }
%>

или JSP Включить действие

<%
 if(request.getParameter("p")!=null)
 { 
   String p = request.getParameter("p");
%>    

<jsp:include page="<%="includes/"+p+".jsp"%>"/>

<% 
 }
%>

различная директива include включает файл на этапе перевода. в то время как JSP Include Action включает файл во время запроса страницы

Я рекомендую Spring MVC Framework в качестве вашего контроллера для манипулирования вещами. используйте шаблон URL вместо параметра.

пример:

www.yourwebsite.com/products

вместо того

www.yourwebsite.com/?p=products

Посмотрите это видео Spring MVC Framework

Джеймелсон Галанг
источник
1
видео защищено .. пожалуйста, поделитесь им с общественностью
AutoMEta
Можете ли вы проверить, работает ли ваш первый пример? Я не могу заставить его работать.
Jus12
8

Во время перевода страницы содержимое файла, указанного в директиве include, «вставляется» в том месте, где используется директива включения JSP. Затем исходная страница JSP преобразуется в класс сервлетов Java. Включенный файл может быть статическим ресурсом или страницей JSP. Обычно директива JSP include используется для включения заголовков и нижних колонтитулов.

Синтаксис для включения файла JSP:

<%@ include file="relative url">

пример

<%@include file="page_name.jsp" %>
Аравинд Чиккаллур
источник
6

1. <a href="index.jsp?p=products">Products</a>когда пользователь нажимает на ссылку «Товары», вы можете напрямую вызвать products.jsp.

Я имею в виду, вы можете сохранить имя файла JSP так же, как параметр Value.

<%
 if(request.getParameter("p")!=null)
 { 
   String contextPath="includes/";
   String p = request.getParameter("p");
   p=p+".jsp";
   p=contextPath+p;

%>    

<%@include file="<%=p%>" %>

<% 
 }
%>

или

2. Вы можете поддерживать внешний файл ресурсов с ключом, парой значений. как ниже

products : products.jsp

customer : customers.jsp

Вы можете программно получить имя файла JSP из файла свойств.

таким образом, вы можете легко изменить имя файла JSP

Баласвами Ваддеман
источник
Спасибо. Я использую первое, что на данный момент. На самом деле, у меня проблемы с тем, как это сделать!
Ахилеш Б. Чандран
org.apache.jasper.JasperException: /admin.jsp(239,44) PWC6117: File "/<%=p%>" not found, Это сработало на вашей стороне?
Ахилеш Б. Чандран
это проверка связанных с путем проблем, если файл существует в вашем пути, я полагаю, вам не хватает контекстного пути (должно быть, включает / admin.jsp). Я не симулировал entre scenerio мою сторону
Balaswamy Vaddeman
1
Я попытался повторить значение «р». Это: includes/add.jsp. Затем использовали это производное включает: <%@ include file="includes/add.jsp" %>. Показывает содержимое страницы. Но если я использую эту строку вместо:, <%@ include file="<%=p%>" %>она показывает исключение!
Ахилеш Б. Чандран
Привет, у меня та же проблема. Получаю ошибку File "<%=p%>" not found. Если я буду использовать реальную ценность, это работает.
Редди СК
0

По причине, которую я до сих пор не понимаю, после того, как я использовал <%@include file="includes/footer.jsp" %>в своем index.jspтогда в других файлах JSP, как register.jspя должен был использовать <%@ include file="footer.jsp"%>. Как видите, больше не нужно было использовать полный путь, STS сохранил мой начальный путь.

Лекакос Теодор
источник