Я считаю, что никто не знает о SSH. Struts2+Spring+Hibernate, «основная» архитектура развития предприятия, почему основы отмечены в цитатах? Потому что этот фундамент - именно то, что многие люди думают об этом. Самый простой - сервлет. Многие учебные учреждения не учат многим основам, и у них будет три основные рамки напрямую. SSH или SSI, что заставляет многих людей думать, что у Javaweb Development должны быть рамки. Без рамки это то же самое, что теряет руки. В трех основных рамках нет никакого вреда, и они практичны. Многие компании используют их и могут напрямую начать их разрабатывать. Но после окончания учебы я подумал, что давно не использовал три основных рамках. Весна полезна, особенно Springmvc. Это кажется гораздо более захватывающим, чем Struts2. На самом деле, если вы думаете об этом, Spring поглощает некоторые преимущества стойки, и с некоторыми спокойными вещами, она чувствует себя гораздо более приятной. Но сегодня мы не будем смотреть SpringMVC, и мы потратим время, чтобы увидеть элегантные части SpringMVC в будущем.
Добраться до сути. SSH обновлял версию, поэтому я все еще хочу поговорить здесь о версии, в противном случае многие друзья будут ругать меня. Я использую 2.3.4 для Struts2, Spring - это последний 3.2.2, а Hibernate - 4,1,9, что довольно новое.
Перед входом в код давайте впервые поймем роли, сыгранные тремя основными рамками.
1) стойки: почему мы используем стойки? В чем разница между ними и сервлетами? На самом деле, мы все еще можем выполнять MVC без стойки, но в файле конфигурации он может быть немного более подавленным. Спорты в основном помогают нам реализовать функцию распределения, разделить наши конкретные запросы на конкретный класс и помогает нам установить свойства (которые выполняются через ActionForm в Struts1.x). Struts2 добился большого прогресса по сравнению с Struts1. Он автоматически устанавливает значения, не требует классов реализации или наследования и имеет ряд концепций, таких как сети запросов. Поскольку они не используются много, я не введет в заблуждение вас, братья, поэтому я не скажу много.
2) Весна: я считаю, что весна Даймё - это не Java, не знаю. Многие люди должны были узнать о Spring через его МОК в начале, или они ничего не знали, только три основные рамки SSH пришли. В любом случае, это не имеет значения, когда мы используем три основных рамках, пружина в значительной степени является инструментом для класса ссылок. В сочетании с двумя другими основными рамками, SSI и SSH они одинаковы. Spring предоставляет только инструменты, чтобы сделать нас более удобными для использования трех основных рамок. Конечно, большое количество программ в комбинации структуры также полагается на Весенний МОК, и мы, конечно, будем использовать транзакции. AOP и другие более продвинутые вещи зависят от потребностей. Если есть какие -либо требования к журналу и требования перехвата, лучше использовать AOP для его достижения.
3) Hibernate: Hibernate также известен в мире Java, в основном стандарт ORM. Он обеспечивает кэш, уровень первого и второго уровня, а также HQL. Что мы используем при объединении трех основных рамок? Конечно, это основная функция картирования ORM, поэтому мы не будем рассматривать кэш на данный момент. Многие люди никогда не думали, почему им нужен ORM. Фактически, это в основном связано с конфликтом между областями данных и классом. Если вы используете JDBC для эксплуатации и установки полей один за другим, вы, вероятно, сойдете с ума после того, как в течение долгого времени сделаете это, поэтому ORM появляется в это время.
За следующие вещи несут три основные рамки: Struts2 - Ответственный за пересылку запроса и соответствующая обработка форм, организация Spring - Class (то есть IOC), управляет действием, изначально управляемым Struts2 в качестве бобов и Hibernate - Orm, отображает классы в таблицы.
Понимая общее разделение труда, конечно, мы начали кодировать. Самая неприятная вещь в трех основных фреймворках - это пакет. Многим людям нравится использовать Myeclipse главным образом потому, что он может помочь нам импортировать пакеты трех основных рамок. Но рекомендуется, чтобы новички не использовали это. Во -первых, у Myeclipse есть своя собственная структура проекта. Когда вы получите Руководство по затмению, вы должны настроить некоторые аспекты проекта, что принесет неудобства для других; Во -вторых, Myeclipse редко использует его в компании, поэтому лучше познакомиться с Eclipse. Или это хорошо, если вам нравятся идеи.
Необходимые пакеты для Struts2 заключаются в следующем: ANTLR, ASM, Xwork, Struts2-ядер, ognl, обыкновенная, общая загрузка, Struts-Spring-Plugin. Вероятно, есть только несколько, и это не может быть написано полностью. Вы можете добавить ошибки при запуске. Не рекомендуется выбросить все упаковки, как только вы начнете. Некоторые пакеты в трех рамках находятся в конфликте.
Пакеты, необходимые для Spring3, следующие: пружинные бобы, пружинный ядер, пружинный контекст, поддержание пружинного контекста, пружина-экспрессия, пружина (мы используем три основные рамки и требуем поддержки ORM), Spring-Web, Spring-TX (мы используем транзакции, но не участвуют в примере).
Пакеты, требуемые Hibernate4, следующие: Hibernate загружают все пакеты JAR в требуемой папке в пакете.
Как и эти пакеты, это все же. Не рекомендуется размещать все пакеты, как только вы запустите, потому что некоторые пакеты в трех рамках имеют конфликты, поэтому просто добавьте их по мере необходимости, когда это необходимо. Когда появляется ClassNotFound, поместите соответствующий пакет JAR в каталог LIB.
Подготовка заканчивается здесь, и мы официально начинаем.
1) Прежде всего, нам нужно использовать Struts2, и мы должны сделать его перехватом запроса
<Filter> <Filter-name> StrUTS2 </filter-name> <filter-class> org.apache.struts2.dispatcher.ng.filter.strutspreareandexecutefilter </filter-class> <urlter> <filter-mapping> <filter-name> struts2 </filter-male> <urler> </urln-p-p-p-p-p-p-p-p-p-p-pattern> </filter-карты>
Этот код позволяет стойкам перехватывать все запросы. Конечно, это не означает, что все запросы перехватываются к весне. Мы также можем настроить struts.xml для перехвата определенных имен суффиксов. Вообще говоря, это действие. следующее:
<constant name = "struts.objectfactory" value = "spring" /> <constant name = "struts.action.extension" value = "action" />
struts.Action.Extension настраивает имя суффикса по умолчанию для перехвата, так что имя суффикса будет проверено во время перехвата, и те, которые соответствуют соответствующим, будут пересылать стойки. Спорты.
2) Обычно, когда мы используем Spring напрямую, мы вызовут *ApplicationContext, но теперь мы находимся в Интернете, поэтому мы не можем назвать это вручную. На самом деле, Spring предоставляет метод для Call в ситуации в Интернете, с сервлетом (я не использовал его, я не знаю, как его использовать), слушатель, сервлет предназначен для серверов приложений, которые не поддерживают фильтры, но теперь мы в основном используем слушателя.
<Learser> <lloader-class> org.springframework.web.context.contextloaderListener </sluster-class> </sluster>
В этом случае большинство случаев, когда пружина должна быть объединена с другими рамками. Когда мы используем только Springmvc, мы можем напрямую настроить диспетчерскую, чтобы заменить вышеуказанный сервлет стойки. Давайте посмотрим на детали при использовании SpringMVC позже.
В этом случае файл ApplicationContext.xml в каталоге Web-Inf обычно загружается. Когда имя вашего файла не является этим или пути здесь нет, вы можете настроить свойство configContextPath.
<Stext-Param> <param-name> configContextPath </param-name> <param-value> web-inf/applicationContext.xml </param-value> </context-param>
Он поддерживает использование ClassPath: Prefix и т. Д., Я не буду говорить об этом здесь, вы можете подробно прочитать файл конфигурации Spring. Таким образом, мы на самом деле объединили стойки и пружину, но мы не сделали какую -то конфигурацию бобов и пересылку стойки.
3) В качестве ORM, Hibernate также управляется весной в настоящее время. Весна обеспечивает местный фактор. Обратите внимание, что этот класс, hibernate3 и 4 разные, пружина предоставляет два. Следующая конфигурация находится в ApplicationContext.xml
<bean id = "sessionfactory"> <name = "dataSource" ref = "dataSource"/> <name = "mappingResources"> <Sist> </list> </property> <name = "hibernateProperties"> <Props> </props> </property> </bean>>
На самом деле, конфигурация аналогична накануне в Hibernate, поэтому я не буду говорить о конкретном коде здесь.
4) В прошлом, когда весна 2.5.x мы использовали HibernatedAosupport больше всего, но Spring 3.x не обеспечила эту поддержку в начале. Нам нужно использовать нативную сеанс для работы (просто инъекция SessionFactory), но здесь есть проблема. Если мы откроем и закроем соединение для каждого запроса, оно будет потреблять больше ресурсов, но если мы не закроем соединение, оно не будет очень хорошо. Таким образом, есть компромиссное решение и менеджер для управления соединением. Здесь весна предоставляет OpenSessionInView. Каждый раз, когда открывается представление (в основном каждый запрос), сеанс будет открыт. Мы пока не будем игнорировать, как это управляется внутри.
<Filter> <Filter-name> opensessionInviewfilter </filter-name> <filter-class> org.springframework.orm.hibernate4.support.opensessionInviewFilter </filter-class> </filter> <Filter-MAPPIP> <Filter-Name> OpenSessionInViewFilter </filter> <Filter> <Filter-Name> OpenSessionInViewFilter </filter> <Filter> <Filter-name> outsessesseSessionInViewFilter </filter> <Filter-name> outsessessionInViewFilter <Url-pattern>/*</url-pattern> </filter-mapping>
Здесь мы все еще просим его перехватить все запросы. Конечно, его можно настроить только на то, чтобы перехватить суффиксы действий, поэтому нет необходимости тратить ресурсы.
5) По сути, наша структура SSH настроена, и следующая вещь - это просто проблема с кодом. Вам нужно только настроить бобы в файле конфигурации пружины, или если вам нравится аннотация, вы можете просто напрямую @component (value = 'name') напрямую, но не забудьте включить компонент-сканирование в файле конфигурации.
Код не будет написан подробно, примерно следующим образом:
@Component (value = "userAction") public class userAction {} <name = "user" extends = "struts-default" kines-space = "/user"> <!-user login-> <name = "login" method = "login"> <name = "error">/pages/login.jsp </result> </action> </package> package> </resual = ">/pages/login.jsp </result> </action> </package> На самом деле, ему просто нужно изменить указатель в классе, чтобы указать фасоль.
Я не буду публиковать подробный код, в конце концов, это резюме. В целом, SSH более полезен для кода спецификации команды, потому что код, написанный в рамках спецификации, в основном имеет определенную форму, которая лучше для будущего обслуживания. Но для начинающих рекомендуется не полагаться на рамки. Если вам действительно нужно его использовать, вы должны понимать в целом, что делает эта структура, какие обстоятельства вам нужно использовать и какие обстоятельства вы никогда не должны использовать.