Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Переход на другую JSP-ку в JBuilder

21K
26 октября 2006 года
Iliot
8 / / 26.10.2006
1) Есть приложение в JBuilder 2005, под встроенным Томкэтом 5.5.9. JSP+бины+парочка сервлетов. Все компилиться и запускается, но перехода на другие JSP с главной, не происходит - не находит страничку. То же приложение, под внешним TomCat-ом 5.0 прекрасно работает. Думаю что-то с конфигурацией web.xml. Я новичек в java/jsp/JBuilder, поэтому надеюсь на советы.
2) Поделитесь ссылкой на пример web.xml, для приложения с jsp+servlet-ами.
3) Tcp-монитор никак не реагирует на запросы/ответы. Вроде надо только порт поменять, чтоб через него все лилось, но не хочет гад.
13K
26 октября 2006 года
VictorS
27 / / 17.09.2006
Расскажи здесь подробней о точках перехода(значения тегов <a href="?"> или <form action="?">) на главной странице .А также названия других JSP-ек и их расположение. Часто ошибка бывает там. Для настойки сервлетов нужно также их название,их пакет и твой web.xml .
21K
27 октября 2006 года
Iliot
8 / / 26.10.2006
web.xml:
Код:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
<web-app>
  <servlet>
    <servlet-name>a</servlet-name>
    <jsp-file>/svt</jsp-file>
  </servlet>
  <servlet>
    <servlet-name>b</servlet-name>
    <jsp-file>/index.jsp</jsp-file>
  </servlet>
  <servlet>
    <servlet-name>c</servlet-name>
    <jsp-file>/main.jsp</jsp-file>
  </servlet>
  <servlet>
    <servlet-name>d</servlet-name>
    <servlet-class>cal.Table</servlet-class>
  </servlet>
  <servlet>
    <servlet-name>e</servlet-name>
    <servlet-class>cal.Table0</servlet-class>
  </servlet>
  <servlet>
    <servlet-name>f</servlet-name>
    <servlet-class>cal.Table1</servlet-class>
  </servlet>
  <servlet>
    <servlet-name>g</servlet-name>
    <servlet-class>cal.Table2</servlet-class>
  </servlet>
  <servlet>
    <servlet-name>h</servlet-name>
    <servlet-class>cal.Table3</servlet-class>
  </servlet>
  <servlet>
    <servlet-name>i</servlet-name>
    <servlet-class>cal.Table4</servlet-class>
  </servlet>
  <servlet>
    <servlet-name>j</servlet-name>
    <servlet-class>cal.Table5</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>a</servlet-name>
    <url-pattern>/svt</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>b</servlet-name>
    <url-pattern>/svt</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>c</servlet-name>
    <url-pattern>/svt</url-pattern>
  </servlet-mapping>
  <login-config>
    <auth-method>FORM</auth-method>
    <form-login-config>
      <form-login-page>/security/protected/login.jsp</form-login-page>
      <form-error-page>/security/protected/error.jsp</form-error-page>
    </form-login-config>
  </login-config>
</web-app>


1) Где еще используются <servlet-name>, кроме мэпинга?
2) Нужно ли в дескрипторе упоминать все сервлеты которые у меня есть или только связанные со стартовым jsp?

У меня на первом jsp(который связан jspBeen-ом авторизации на отображение конкретной странички с таблицой из БД ) идет дополнительно проверка на авторизацию в домене и переход на jsp с главным списком. На jsp со списком находятся ссылки, при нажатии на какую-то вызывается опять предыдущая с параметром(имя jsp на который идет переход), происходит проверка на переход. И он происходит если все ok. НО...во внешнем Томе все работает!!! Скорее это настройки самого Тома, либо JB(2005). Но что именно на это влияет не знаю. В Томе под JB всё по-умолчанию. Может server.xml? web.xml одинаковые.

т е есть main.jsp, на котором идет проверка на авторизацию в домене, и в нем ссылка на index.jsp:
...
<A href="<%=response.encodeURL("/svt/main.jsp?table=users")%>" style="cursor:hand; text-decoration:underline">
<A href="<%=response.encodeURL("/svt/main.jsp?table=rowperms")%>" style="cursor:hand; text-decoration:underline">
<A href="<%=response.encodeURL("/svt/main.jsp?table=subdivs")%>" style="cursor:hand; text-decoration:underline">
...
и т д
...
Bean, связанный main.jsp проверяет доступ текущего пользователя на данную ссылку(ресурс) и производит переход или выдает обламывает => (я уже сам начинаю что-то понимать :) ) не дается доступ не к какому ресурсу, либо не передается имя ресурса. OK, буду копать в вопросе доступа. Но почему же работает на внешнем TomCat-е?!!!! А во внешнем браузере по JB-тома пишет "The page cannot be found"!

Нашел разницу в отображении:
в TomCat 5.0(который нормально выдает) - http://127.0.0.1:8080/svt/main.jsp;jsessionid=9805433F98C022B10A06F3F595127877?table=traffic
в TomCat 5.5.9(JBuilder) - http://localhost:8086/svt/main.jsp?table=traffic
21K
27 октября 2006 года
Iliot
8 / / 26.10.2006
Еще один вопрос - на что влияет checkbox Enable Web Run/Debug/Optimize


Заранее огроменное спасибо!
13K
27 октября 2006 года
VictorS
27 / / 17.09.2006
1 Для начала в твоём web.xml идёт переопределение 3 тем на 1 URL (/svt)

Код:
<servlet-mapping>
    <servlet-name>a</servlet-name>
    <url-pattern>/svt</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>b</servlet-name>
    <url-pattern>/svt</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>c</servlet-name>
    <url-pattern>/svt</url-pattern>
  </servlet-mapping>


2 <servlet-name> используется для меппинга

3 Твой участок web.xml по авторизации

 
Код:
<login-config>
    <auth-method>FORM</auth-method>
    <form-login-config>
      <form-login-page>/security/protected/login.jsp</form-login-page>
      <form-error-page>/security/protected/error.jsp</form-error-page>
    </form-login-config>
  </login-config>


он неполный(не указано что защищать).

4 по поводу "checkbox Enable Web Run/Debug/Optimize" опиши кокретней где это.

5 И Главное чтобы быстрей всё доделать пришли лучше полностью war файл твоей работы - без него непонятен механизм. Только убери оттуда ,если они там есть, библиотеки(jar файды) дров баз данных, чтобы не качать лищние мб.
21K
27 октября 2006 года
Iliot
8 / / 26.10.2006
Я разобрался в проблеме, но как решить пока не знаю.
Я использую SharedSessionBean для сохранения параметров сессии, который всем доступен. Я когда-то исключил 2 файла с такой вставкой во все jsp-ки, и поэтому параметры сессии не были доступны...
Код:
_abstractJSPBean.setSharedSessionBean(_sharedSessionBean);%>
<%_abstractJSPBean.setRequest(request);%>
<%_abstractJSPBean.setResponse(response);%>
<%_abstractJSPBean.setSession(session);%>
<%_abstractJSPBean.setServlet(this);%>
<%_abstractJSPBean.setConnection();%>
<%_abstractJSPBean.process();
%>
<% if (! _abstractJSPBean.getSkipPageOutput()) { %>
...
<%@ page errorPage="" %>
<%_abstractJSPBean.footerProcess();%>
<%_abstractJSPBean.closeConnection();%>
<%//System.out.println("closed" + "-" + _abstractJSPBean.getJSPCode());%>
<%}
}catch(Exception ex){}%>

В JBuilder-е вылетает ошибка:
'catch' without 'try'
'try' without 'catch' or 'finally'
'}' expected
'try' without 'catch' or 'finally'
illegal start of type
<identifier> expected
'class' or 'interface' expected
, но код нормальный и он проглатывается TomCat-ом 5.0, потому в нем все и работает.

Насчет web.xml:
1) аутентификацию Тома я вообще не стал использовать, так что просто забыл все убрать
2) Маппить, да и вообще упоминать, надо все сервлеты, или только тот что связан с моим стартовым jsp?
3) "checkbox Enable Web Run/Debug/Optimize" - Пакет с файлами модуля\(jsp/servlet)->правой кнопкой\Properties\Web Run
13K
27 октября 2006 года
VictorS
27 / / 17.09.2006
1 По поводу маппинга:

Маппить нужно -для того чтобы это можно было вызвать по URL.
Для чего нужен сервлетт который нельзя вызвать?
Есть вообще-то старый способ - InvokerServlet для вызова сервлета по его полному имяни, но это другая тема. Чтоб толком разобраться в этом и не только в этом посмотри спецификации JSP и Servlett на http://www.jcp.org и также J2EE туториалы и доки к ним на http://www.sun.com

2 checkbox Enable Web Run/Debug/Optimize
Это для запуска под профилировщиком(конроль выделения памяти,скорости и тд ), если у тебя установлен BorlandOptimizeSuite...

3 Присланного тобой куска кода недостаточно чтоб понять проблему!
Но в нём действительно как пишет JBuilder нарушена конструкция
try-сatch.
Приведи полный код JSP и своего Беана.
21K
31 октября 2006 года
Iliot
8 / / 26.10.2006
С try/catch-проблеммой решено, причем без всякого исправления. Почему-то иногда JB совершенно не замечает этой якобы ошибки. Если появилась - просто переоткрываю проект и все нормально компилиться. :confused:
!Но основная проблемма все та же - не хочет работать c идентификаторами сессии. Например:

<A href="<%=response.encodeURL("/svt/main.jsp?table=users")%>" style="cursor:hand; text-decoration:underline">П</STRONG>ользователи</A>

в TomCat 5.0(который нормально выдает) -
http://127.0.0.1:8080/svt/main.jsp;jsessionid=C35963C0CB892A66504A70046E643D87?table=traffic
в TomCat 5.5.9(JBuilder) - http://localhost:8080/svt/main.jsp?table=traffic
Код один и тот же!
Причем, session.getId() под JB-м TomCat-ом все нормально возвращает.

!!!Скорее всего надо что-то добавить в заголовок jsp.
вот мой заголовок:
 
Код:
<%@ page import = "java.util.*" %>
<jsp:useBean id="_mainJSPBean" class="cal.MainJSPBean" scope="session"/>
<%cal.AbstractJSPBean _abstractJSPBean = _mainJSPBean; %>
<jsp:setProperty name="_mainJSPBean" property="*"/>
<%response.setHeader("Cache-Control", "no-cache");%>
<%response.setHeader("Pragma", "no-cache");%>
<%@ include file="includeheader.jsp" %>
...


Может быть <%@ page session="true"%>?

Сразу вопрос - только при отключенных cookie можно работать
с rewrite a raw URL, или использование как-то включается на страничке?
Если нужно отключать куки, то как это сделать в JB-броузере, где вообще находятся его настройки(конечно можно и на внешнем смотреть, но все-таки).
13K
31 октября 2006 года
VictorS
27 / / 17.09.2006
Привет.:)

По поводу <%@ page session="true"%>:
Это декларативный способ инициализации сессии, т.е. можно так или програмно.А инициализироать её надо обязательно т.к. твой механизм по Твоим словам строится на данных в ней сразу.Две или более сессии в одном контексте запроса создать неполучится!Если Ты второй раз попытаешся создать сессию в контексте одного запроса- Тебе вернут ранее созданную!

По поводу механизма таскания сессии:
Сначала ид сессии прописывается в URL.Далее на следующем запросе если куки включены то врезается туда.Если не включены то так в URL и остаётся.Это всё и делает encodeURL("")!Прикрепляй её ко всем точкам перехода, а то можеш потерять сессию.Если принудительно в приложении(серверном а не брозер) отклучиш куки в то сессия соответственно только в URL и будет.

По билдеру:
Луше в нём тестировать тем-же КОТОМ под которым и будет приложение трудится.Для этого сконфигурируй в нём новый сервер - твоего внешнего КОТА и в проекте выбери именно этот сервер.
конфигуррировать так
1. Enterpris->ConfigureServer->Copy(внутренний КОТ) а дальше в этой копии подредактировать пути на твой рабочий внешний КОТ
2. На проекте правую мышиную->Properties->Server->Свой сервер

Билдеровский Броузер - это самый минимум возможностей браузеров.
Настроек его в Билдере я не знаю.

ПО ПОВОДУ АРХИТЕКТУРЫ:(не обязательно но рекомендую)
Считается дурным тоном в JSP использовать java код(по возможности самый минимум). Контроллеры и биз-логику рекомендуется использовать в сервлетах или в JSP тегах(писать тэги).Такой подход действительно помогает читаемости и расширяемости твоего зверя.
к примеру:
1. login.html->authServlet->NotAccess.html->login.html
2. login.html->authServlet->ViewTable.jsp->.....

Удачи;)

P.S.
Твой код ещё толком непосмотрел.
Кстати сейчас смотрю момент с коментарием "если доступа нет завершающий </A> не выводится" наверно Всётаки вообще тогда <A> открывать и не надо было?

Проект действительно интересный!
Наверно всётаки такие вещи лучше по мейлу обсудить а не глобально...
Пришли мне личное сообщение со своим мейлом.
21K
01 ноября 2006 года
Iliot
8 / / 26.10.2006
коментарии лучше не смотри - они бредовые и верить им нельзя :p Это остались не высказанные(не реализованные мысли). Так что низачто не верь им :)
21K
09 ноября 2006 года
Iliot
8 / / 26.10.2006
Привет Victors!!!
Меня проблемма одна замучала...
Вот такое вот выдает:
org.apache.jasper.JasperException: Unable to compile class for JSP

An error occurred at line: 40 in the jsp file: /includeheader.jsp
Generated servlet error:
The method getJSPCode() from the type AbstractJSPBean is not visible
и т д

Т е полиморфизм понимать не хочет(на первый взгляд). Не пойму как решить проблемму. AbstractJSPBean-переменной назначается ссылка на
класс одного из наследников и уже в нем вызывается метод
getJSPCode(). Почему он пытается вызвать abstract private getJSPCode() из самого AbstractJSPBean не могу понять!!! Это все тормозит.

И еще... Раньше все работало под TomCat 3.x, а я запускаю на 5.x. Может здесь кроется какая-то закавырка. Если ты знаком с особенностями портирования с 3 на 5, поделись опытом.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог