Цель сериализации в веб-приложении - PullRequest
8 голосов
/ 17 ноября 2009

1.Где используется сериализация в веб-приложении.

2. Необходимо ли сериализовать bean-компонент формы.

3. В Tomcat, что такое использование файла sessions.ser ..

Ответы [ 5 ]

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

1) Это зависимая от сервера приложений функция, но спецификация сервлета говорит, что если контейнер сервлета хочет поддерживать распределенные среды (совместное использование сеансов между экземплярами) и т. П., Он должен принимать объекты, реализующие Serializable, и иметь возможность их переносить , Tomcat также поддерживает сохранение состояния сеанса при перезапусках сервера для объектов сеанса, которые можно сериализировать. Вы можете включить или отключить эту функцию Tomcat в файле conf / context.xml (см. Комментарии там).

2) Было бы необходимо, чтобы компонент формы был сериализуемым, если а) он имеет сессионную область и б) вы используете либо распределенные сеансы, либо функцию, такую ​​как Tomcat, для сохранения сеанса, который требует этого.

3) Файл sessions.ser - это файл, содержащий сериализованные объекты из сеанса. Tomcat использует это для сохранения их при перезапуске сервера, если он настроен для этого (см. Выше). В общем случае .ser-файл - это сериализованный объект Java, который представляет собой двоичное представление состояния объекта.

12 голосов
/ 17 ноября 2009

По первому и второму вопросу взгляните на эту ТА тему . Что касается вашего третьего вопроса, sessions.ser - это сериализованная сессия. Тем не менее,

  1. Да, нам нужна сериализация всякий раз, когда нам нужно сохранить объекты в файловой системе или отправить объекты по проводам. Вы можете подумать, что в веб-приложении мы не обязательно делаем это. Но серверу обычно требуется сериализуемая вещь в случае, если это потребуется в будущем, когда вы переключаетесь в кластерную среду или хотите передать ваш компонент в удаленный компонент, то есть компонент EJB. Или вы можете сохранить ваш bean-компонент в сеансе, по этой причине ваши bean-компоненты должны быть сериализуемыми.

  2. Да, по той же причине, указанной выше.

  3. sessions.ser - это сериализованный сеанс. Tomcat сохранил его, поэтому его можно восстановить позже. Теперь у вас есть идея, почему нам нужны сериализуемые bean-компоненты, потому что вы можете сохранить объекты bean-компонентов в сеансе, а Tomcat-персистентный сеанс в файловой системе, т.е. Таким образом, ваши bean-компоненты должны реализовывать Serializable, чтобы их можно было сохранить / восстановить с помощью сеанса.

Кстати, правильность сохранения и восстановления bean-компонента зависит от правильной реализации Serializable. Для этого я бы порекомендовал вам прочитать соответствующие темы в Effective Java.

3 голосов
/ 10 декабря 2009

Сеансы (и все добавленные в них атрибуты) должны быть сериализуемыми, если контейнер хочет сохранить сеанс. Это может иметь две причины:

  1. сеанс должен быть передан другому узлу кластера с балансировкой нагрузки
  2. сеансы должны быть заменены из-за нехватки памяти

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

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

И, наконец, может быть гораздо больше причин для сериализации, как и в любом другом приложении. Кэши могут понадобиться для замены содержимого кеша (как может сделать ehcache). Любая другая часть данных может быть сериализована для хранения в виде BLOB-объекта в базе данных, ...

1 голос
/ 17 ноября 2009

Ух ты, много вопросов без большого контекста.

Для вашего # 1 я предполагаю, что вы говорите о сериализации, в которой вы упоминаете в других своих пунктах о сериализации Java, а не о сериализации против параллелизма. Если это так, многие веб-приложения будут сериализовать или сохранять состояние объектов, чтобы сохранить его долговечность. Эта долговечность может использоваться в HTTP-запросах (например, при управлении сеансами), для более длительного хранения информации или для отправки по «сети», чтобы все стороны могли получить копию указанной информации.

Нужно спросить себя в HTTP, действительно ли это хорошая идея, так как дизайн и масштабирование без сохранения состояния «хорошо», и если у кого-то есть резервное хранилище, такое как БД, почему БД не выполняет свою работу. Я предполагаю, что компонент формы используется в этой природе, так как сервлеты будут передавать информацию формы как дескрипцию.

0 голосов
/ 16 декабря 2009
  1. Довольно хорошее описание от википедия

    Сериализация имеет ряд преимущества. Это обеспечивает:

    • метод сохранения объектов, который более удобен, чем писать свои свойства в текст файл на диске и повторная сборка их, читая это обратно.
    • метод выдачи удаленных вызовов процедур, например, как в SOAP
    • метод распределения объектов, особенно в программном обеспечении * 1015 комплектующие * такие как COM, CORBA и т. д.
    • метод обнаружения изменений в изменяющихся во времени данных.

    Пример из реального мира (простой): Скажи Вы создаете пользовательский экземпляр в Java. Теперь вы хотите отобразить этот объект в веб-браузере с использованием JavaScript. Одним из вариантов является сериализация объект таким образом, что JavaScript может десериализовать объект (используя представление, которое могут понять как java, так и javascript) и показать его.

  2. Это зависит от того, что вам нужно сделать с бобом формы относительно того, должны быть сериализованы или нет.
  3. Приложение Tomcat Manager - это веб приложение, которое поможет вам развернуть и управлять другими веб-приложениями для Кот. Я не эксперт по котам, но Я думаю, что менеджер Tomcat пытается запомнить информацию о сеансы, созданные в Интернете приложения, которыми он управляет. Это нужно помнить эту информацию даже когда процесс кота перезапущен. Итак, менеджер Tomcat создает файл с именем "Session.ser" который является сериализованным представлением информации, которая ей нужна помните обо всем управляемом сеансы приложений.
...