Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Голый JSP без доп.файлов Как?


Автор: Nymph666 28.2.2013, 15:58
Всем доброго времени!
Столкнулась с такой задачей: нужно создать JSP страничку, которая затем копируется в задеплоенное приложение на сервер.
То есть вся логика на Java должна быть в JSP, без каких-либо дополнительных файлов.
У меня есть работающее задеплоенное приложение и уже готовый сервлет:
Код

public class SQLServiceImpl extends RemoteServiceServlet implements SQLService {
    private final static String user = "n";
    private final static String password = хххх";
    private final static String httpURI = "http://хххххххх";
    private final static String iiopURI = "iiop://хххххх";
    private final static String objectStoreName= "OS1";
    @Override
    public List<String> getQuery(String sqlQuery) {
        String url = iiopURI;
        return search(user,password, url, objectStoreName, sqlQuery);
    }

    private static List<String> search(String user,String password, String url, String objectStoreName, String sqlQuery) {
        String port = url.substring(0,4);
        Connection connection;
        if (port.equalsIgnoreCase("iiop")
        {
              connection = Factory.Connection.getConnection(url);
//            Subject subject = UserContext.createSubject(connection, user, password, stanza);
//            com.filenet.api.util.UserContext uc = com.filenet.api.util.UserContext.get();
//            uc.pushSubject(subject);
        }
        else
        {
            connection = Factory.Connection.getConnection(url);
            com.filenet.api.util.UserContext uc = com.filenet.api.util.UserContext.get();
            uc.pushSubject(com.filenet.api.util.UserContext.createSubject(connection, user, password, null));
        }
        Domain domain = Factory.Domain.getInstance(connection, null);

        try {
            ObjectStore objectStore = Factory.ObjectStore.getInstance(domain, objectStoreName);
           // String sql = "Select * from Document";
            SearchSQL sqlObject = new SearchSQL(sqlQuery);
            SearchScope searchScope = new SearchScope(objectStore);
            IndependentObjectSet independentObjectSet = searchScope.fetchObjects(sqlObject, null, null, true);
            Iterator iterator = independentObjectSet.iterator();
            List<String> objectsNames = new LinkedList<String>();
            while (iterator.hasNext()) {

                objectsNames.add(iterator.next().toString());
            }
            return objectsNames;
           } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
        return null;


И вот этот сервлет нужно засунуть в JSP.
Самый главный вопрос: Как?
Ибо просто копирование в теги <% %> не работает.

Автор: mbasil 1.3.2013, 00:40
Один из вариантов (не самый лучший)
Код

<%
     RequestDispatcher rd = sCtx.getRequestDispatcher( "URL_servlet_address" );
     if( rd != null ) { 
         try { 
               rd.include( request, response );
        } catch( Exception e ) {
             out.println( e.getMessage() );
        }
     }
%>


Еще два варианта:

Код
<jsp:include page="{ относительный URL | <%= выражение %> }" flush=" true" />


Директива include включение в исходный JSP файл текстового файла или кода

Код
<%@ include file="относительный URL" %>


Автор: Nymph666 1.3.2013, 09:13
В общем тему можно закрывать, задача решена!
Для тех, кто вдруг столкнется с подобной задачей:
советы: не забывать про импорт библиотек. 
А импортируются они так: 
<%@ page import="java.util.*"%>

Ну и потом любой код вы можете писать в тегах <% %>
В частности приведу код вывода объектов в textArea
Код
Iterator iterator = independentObjectSet.iterator();
Integer num = 0;
 while (iterator.hasNext()) {                        
%>
<html>
<body>
<br> Object<%=num+1%>:<br>
<TEXTAREA NAME="result" ROWS=6 COLS=100>  <%=(iterator.next().toString())%> </TEXTAREA>

<% num++;}%>
</body>
</html>

Автор: mbasil 1.3.2013, 15:13
Сегодня "писать в тегах <% %>", то есть использовать  скриптлеты - плохая практика и плохой совет.

Автор: AugMaster 26.3.2013, 16:38
Цитата

Сегодня "писать в тегах <% %>", то есть использовать  скриптлеты - плохая практика и плохой совет.

оффтопный вопрос - имеется ввиду любая комбинация ? то есть

Код

<%@ page import="java.util.*"%>
<input type="hidden" name="URLURL"  value = <%=(String)request.getHeader("Referer") %> />

тоже плохая практика ? я сам новичок

Автор: Farmazon 20.4.2013, 22:24
Сейчас тебе понасоветуют... 

Есть концепция MVC, гласящая, что jsp - это только слой отображения(V), в нём не должно быть логики контроллеров (потому библиотек тагов выше крыши и нефиг сервлетные вставки делать). 

Когда одна страничка = всё приложение, разделять контроллер/вьюху/модель нет смысла... Или если ты не хочешь чтоб нужно было передеплоивать приложение, тоже есть смысл оформить в иде одной странички всё. В конце концов, даже контролллер можно закодировать в той же страничке аккуратно(в саммом начале странички), чтоб это не привело к сильному смешению слоёв.... Короче, отталкивайся от требований и думай. Карго-культ не нужен.

Это же какк холивор, размещать ли css внутри html файлов...

Добавлено @ 22:30
<%@ page import="java.util.*"%> с библиотеками тагов не требуется...
за сервлетный код считаются вставки <% java-code %> и <%=java-expr%>

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)