Предисловие
SSH - это не структура, а интеграция нескольких рамках (стойки+пружина+Hibernate). В настоящее время это популярная структура интеграции с открытым исходным кодом для веб-приложений, используемая для создания гибких и простых для масштабирования многослойных веб-приложений.
Система, интегрирующая структуру SSH, разделена на четыре уровня с точки зрения ответственности: уровень презентации, слой бизнес -логики, уровень стойкости данных и уровень модуля домена (уровень объекта).
Как общая инфраструктура системы, стойки отвечают за разделение MVC. В модельной части структуры стойки он контролирует, что бизнес прыгает и использует структуру Hibernate, чтобы обеспечить поддержку уровня постоянства. С одной стороны, Spring - это легкий контейнер IOC, ответственный за поиск, позиционирование, создание и управление зависимостями между объектами и объектами, а с другой стороны, он может улучшить работу стойки и спячки.
Используйте MyeClipse для интеграции трех основных фреймворков SSH и реализации демонстрации, которая имитирует регистрацию пользователя, соответствующую версии:
Версия стойки: 2.1;
Весенняя версия: 3.1;
Священная версия: 3.3;
1. Подготовка перед интеграцией
1. Создайте веб -проект следующим образом:
Примечание. Имя пакета, поддерживающее действие
2. Создайте базу данных и таблицу:
Создать базу данных SSHDEMO; Создать таблицу T_USER (ID Int Primary Key, имя пользователя varchar (10), пароль varchar (20))
3. Импортируйте пакет базы данных базы данных C3P0JAR, нажмите, чтобы загрузить:
C3P0-0.9.2-pre1.jar, MySQL-Connector-Java-5.1.13-bin.jar
2. Конфигурация структуры стопор:
1. Выберите проект и щелкните правой кнопкой мыши, чтобы выбрать: Myeclipse -> Фассеты проекта [возможности] -> Установить аспекты Apache Struts (2.x), следующим образом:
2. Выберите версию, здесь я выбрал 2.1, нажмите «Отделка», следующим образом:
3. После завершения вышеуказанных шагов вы обнаружите, что в каталоге SRC есть дополнительный файл struts.xml со следующим содержанием:
<? xml version = "1.0" Encoding = "UTF-8"?> <! Doctype Struts Public "-// Apache Software Foundation // DTD Конфигурация Struts 2.1 // en" "http://struts.apache.org/dtds/struts-2.1.dtd"> <struts> </struts>
4. В файле web.xml в каталоге Web-Inf существует дополнительный раздел кода конфигурации для фильтров стопор, следующим образом:
5. См. Приведенный выше рисунок, изменить * .
3. Конфигурация Spring Framework:
1. См. Конфигурацию стойки, выберите проект, щелкните правой кнопкой мыши и выберите: MyeClipse -> Project Facets [Возможности] -> Установите пружинный аспект, выберите версию и выберите 3.1 следующим образом:
2. Нажмите «Закончить», и вы обнаружите, что в каталоге SRC есть файл ApplicationContext.xml , файлы Spring-form.tld и Spring.tld в каталоге Web-Inf, а в файле Web.xml добавляется кусок кода, связанный с пружиной. Конструкция пружинной структуры была в основном завершена (введение пространства имен будет обсуждено позже), как показано ниже:
4. Конфигурация сгибательной структуры:
1. См. Конфигурацию стойки, выберите проект, щелкните правой кнопкой мыши и выберите: MyeClipse -> Project Facets [Возможности] -> Установить Hibernatefacet, выберите версию и выберите 3.3 здесь следующим образом:
2. Нажмите «Закончить», и вы обнаружите, что в каталоге SRC есть дополнительный пакет по умолчанию (можно удалить) и часть кода в файле web.xml (он будет перенастроен позже), как показано ниже:
3. Импортируйте пакеты JAR, которые поддерживают аннотацию «@Entity»: выберите проект, щелкните правой кнопкой мыши, чтобы выбрать: MyeClipse -> Project Facets [Возможности] -> Управление ..., а затем выполните шаги на следующем рисунке:
После завершения вышеуказанных этапов в основном созданы три основные рамки, а затем они интегрированы.
5. Интеграция
1. Чтобы не допустить, чтобы ApplicationContext.xml выглядел слишком раздутым и простым в управлении, мы сохраняем конфигурацию, связанную с гибернатом, в другом файле .xml, а затем импортируем ее в ApplicationContext.xml. Конкретные шаги:
(1) Создайте файл с именем hibernatecontext.xml в каталоге SRC (тот же уровень, что и ApplicationContext.xml), скопируйте содержимое в ApplicationContext.xml, а затем внесет изменения;
(2) Содержание в файле hibernatecontext.xml:
<? xml version = "1.0" Encoding = "UTF-8"?> <Beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns: p = "http://www.springframework.org/schema/p" xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.spramework.orgema/schema/beans/springbeans-3.11.1.11spring-3.1.1spring-3.11.spring-3.11.spring-3.11spring-3.11spring-3.11spring-3. SessionFactory Configuration-> <bean id = "sessionFactory"> <!-Свойство DataSource будет настроено в файле ApplicationContext.xml. Ref = "dataSource"> </property> <!-Установить элементы конфигурации, связанные с гибернатом-> <и имя свойства = "hibernateproperties"> <!-Репусная тег-это внедрять свойства типа свойств-> <!-Ключ должен быть hibernate.prefix-> <props> < key = "hibernate.dialect"> org.hibernate.dialect.mysqlidialect </prop> <!-show_sql-это цель печати операторов SQL-> <prop key = "hibernate.show_sql"> true </prop> <!-Beautify Prypting format of sql-> <prop key = "hibernate. <!-A) Create-Drop: Создайте таблицу данных при выполнении программы, и удалите таблицу после выполнения. В реальной разработке он часто используется для тестирования b) Создание: воссоздать таблицу данных каждый раз, когда выполняется программа C) Обновление: при выполнении программы будет признано, что если есть, таблица не будет создана, в противном случае будет создана таблица данных, и поля в таблице данных будут автоматически добавлены в соответствии с увеличением атрибутов в классе предприятия (разработка) D). Несовместимо с полями в таблице, сообщается об ошибке (производственная среда)-> <prop key = "hibernate.hbm2ddl.auto"> Validate </prop> </props> </property> <!-Настройте класс объектов Hibernate-> <propance = "packagestoscan"> <!-списка тега, чтобы инъекция свойства. Его значение, как правило, является полным именем соответствующего пакета бобов, и классы в пакете бобов, как правило, соответствуют таблице в базе данных-> <Sist> <datue> com.beauxie.bean </value> </list> </property> </bean> <!-Configure HibernateTemptemptemptemptemptemptemptait ref = "sessionFactory"> </property> </bean> </beans>
(3) Удалить конфигурацию «sessionFactory» в ApplicationContext.xm (потому что она была настроена в hibernatecontext.xml), а затем импортируйте измененный содержимое hibernatecontext.xml. После импорта содержание ApplicationContext.xml выглядит следующим образом:
<? xml version = "1.0" Encoding = "UTF-8"?> <Beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns: p = "http://www.springframework.org/schema/p" xsi: schemalocation = "http://www.springframework.org/schema/beans/spring-3.1 id = "DataSource"> </bean> <!- импортировать другие файлы конфигурации пружины. Если они помещены в один файл, они будут выглядеть раздутыми -> <import resource = "hibernatecontext.xml"/> </beans>
2. На основании исходного данных DataSource в файле ApplicationContext.xm изменить его конфигурацию (имя базы данных, имя пользователя, пароль и т. Д.) ( Примечание: тег значения не должен содержать пробелы или вводить !! ), как показано ниже:
<bean id = "dataSource"> <name = "jdbcurl"> <!-Если вы используете атрибут значения напрямую вместо тега значения, вам нужно сбежать "&" и использовать тег значения. <Span style = "color:#ff0000;"> TAG не должен содержать пробелов или возврата перевозки, потому что он будет преобразовать пространства в "" </span>, что приводит к тому, что база данных не может подключиться, если источник данных не будет переписан-> <значение> <! [cdata [jdbc: mysql: // localhost: 3306/sshdemo? useUnicode = true & hareverencoding = utf8 & userverprepstmts = t rue & prepstmtcachesqllimit = 256 & cacheprepstmts = true & prepstmtcachesize = 256 & rewritebatchedstatements = true]]> </value> </property> <name = name = "driverclass" value = "com.mysql.jdbc.driver"> </property> <name = "user" value = "root"> </property> <name = "password" value = "root"> </properation> <name = "affireIncrement" value = "3"> </properation> <property negance = "viostrypoolsize" value = ">"> <> "> <>"> <> "> <>". name = "minpoolsize" value = "2"> </свойство> <name = "maxpoolsize" value = "10"> </property> </bean>
3. В ApplicationContext.xm настройка пружинного сканера, чтобы добавить аннотации компонентов пружины в наш класс, а бобы могут быть автоматически загружены. Конкретные шаги следующие: (1) представить пространство имен контекста, поддержать тег контекста, нажмите «Пространство имен» внизу, а затем проверьте элемент контекста:
(2) Настройка пружинного сканера:
<!-Настройте Spring Scanner и добавьте аннотации пружинного компонента в наш класс для автоматической загрузки бобов->
<Контекст: компонент-сканирование base-package = "com.beauxie.action, com.beauxie.service, com.beauxie.dao">
</контекст: компонент-сканирование>
На этом этапе были созданы три основные среды SSH Framework, и следующим шагом является реализация регистрации пользователей на основе Framework SSH.
6. Случай: простое имитация регистрации пользователей
1. Код страницы регистрации стойки регистрации, index.jsp:
<%@ page language = "java" import = "java.util.*" pageencoding = "utf-8"%> <%string path = request.getContextPath (); String basePath = request.getScheme () + ": //" + request.getServername () + ":" + request.getServerport () + path + "/"; %> <! Doctype html public "-// w3c // dtd html 4.01 transitional // en"> <html> <Head> <base href = "<%= basePath%>"> <Tite> Добро пожаловать в регистр </title> <meta http-equiv = "pragma" http-equiv = "cache-control" content = "no-cache"> <meta http-equiv = "expires" content = "0"> <meta http-equiv = "Content" Content = ", ключевое слово1, ключевое слово3"> <meta http-equiv = "description". type = "text/css" href = "styles.css">-> </head> <body> <form action = "$ {pagecontext.request.contextPath}/user/regist" method = "post"> <!-Вы также можете использовать пользователь. type = "text" name = "username"> <br> Пароль: <input type = "password" name = "password"> <br> <input type = "Отправить" value = "Регистрация"> </form> </body> </html>2. Код класса пользователя:
пакет com.beauxie.bean; Импорт javax.persistence.entity; Импорт javax.persistence.id; Импорт javax.persistence.table; /** * @Author Beauxie * Здесь свойства пользователя должны быть такими же, как и полки в таблице T_USER, * В противном случае вам необходимо вручную указать поля в соответствующей таблице для различных свойств */ @Entity // Таблица базы данных @Table (имя = "T_USER") //. Таблица t_user Private INT ID; // Идентификатор пользователя Private String userName; // Имя пользователя Private String Password; // Password public int getId () {return Id; } public void setId (int id) {this.id = id; } public String getUsername () {return username; } public void setUsername (string username) {this.username = username; } public String getPassword () {return пароль; } public void setPassword (String password) {this.password = password; }} 3. Userdao Code:
пакет com.beauxie.dao; Импорт org.springframework.beans.factory.annotation.autowired; Импорт org.springframework.orm.hibernate3.hibernateTemplate; Import org.springframework.sterotype.repository; Импорт com.beauxie.bean.user; /*** @author beauxie* dao -слой, работая в базе данных*/ @repository // Это свойство соответствует уровню стойкости (обычно слой DAO), что означает, что оно передается управлению пружиной, а соответствующее имя класса под пакетом также будет иметь значения, потому что не нужно установить значения, потому что значения, потому что не нужно установить значения, потому что значения, потому что не нужно установить значения, потому что значения не нужно установить значения. В файле конфигурации пружины; /*** Регистрация пользователя, то есть добавить новую запись в таблицу* @param пользователь*/public void Adduser (пользователь пользователя) {// Добавить данные в базу данных, и вы можете получить Template.save (пользователь); }} 4. Код класса SERSERSERVICE:
пакет com.beauxie.service; Импорт org.springframework.beans.factory.annotation.autowired; Импорт org.springframework.stereotype.service; Импорт com.beauxie.bean.user; Импорт com.beauxie.dao.userdao; /*** @author beauxie* Служба Сервиса*/ @service // Это свойство соответствует уровню сервиса, как правило, является уровнем сервиса), что означает, что оно передается управлению пружиной, и соответствующее имя класса также будет иметь «S» Userservice { @autowired // также будет автоматически внедрить частное пользователь userdao; public void Adduser (пользователь пользователя) {// вызов метода AddUser Layer userDao.Adduser (пользователь); }} 5. Код класса пользователя:
пакет com.beauxie.action; Импорт javax.servlet.http.httpservletrequest; Импорт org.apache.struts2.servletactionContext; импорт org.apache.struts2.convention.annotation.action; Импорт org.apache.struts2.convention.annotation.namespace; Импорт org.apache.struts2.convention.annotation.results; Импорт org.springframework.beans.factory.annotation.autowired; Импорт org.springframework.context.annotation.scope; Import org.springframework.sterotype.controller; Импорт com.beauxie.bean.user; Импорт com.beauxie.service.userservice; /** * @author beauxie * */ @controller // используется для аннотирования компонента управляющего слоя @namespace ("/user") // prefix url @scope ("Прототип") // Действие-это синглтон по умолчанию, но в реальном развитии, как правило, многочисленные случаи, потому что один действие может соответствовать различным запросам // @parientpackage ("struts def dea-dea-dea-dea-dea-def По умолчанию-«Struts-Default», так что @Results ({@Result (name = "registsuccess", location = "/msg.jsp")}) открытый класс userAction { @autowired // автоматически внедрять услуги частного пользователя; // стойки по умолчанию перехватывают ".Action и без какого -либо суффикса" @Action (value = "regist") // access:/user/regist.action или//user/regist public String regist () {// get request httpservlectrequest = servletactoctontext.getRequest (); // Получить форму отправленной данные string username = request.getParameter ("username"); String password = request.getParameter ("пароль"); // инкапсулировать пользователь пользователь пользователь = new user (); user.setid (1000); user.setusername (имя пользователя); user.setpassword (пароль); // Вызовите метод уровня службы, чтобы добавить запись в базу данных Service.adduser (пользователь); // Сохранить информацию о приглашении в домен запроса и запрос Display.setAttribute («MSG», «Поздравляем, регистрация успешна! вернуть "registsuccess"; }} 6. Интерфейс подсказки сообщения: код MSG.JSP следующим образом:
<%@ page language = "java" import = "java.util.*" pageencoding = "utf-8"%> <%string path = request.getContextPath (); String basePath = request.getScheme () + ": //" + request.getServername () + ":" + request.getServerport () + path + "/"; %> <! Doctype html public "-// w3c // dtd html 4.01 transitional // en"> <html> <Head> <base href = "<%= basePath%>"> <Telect> no-comemploge </title> <meta http-equiv = "pragma" = "no-cache"> <meta http-equiv = "pragma" = "no-cache"> <meta http-equiv equivtr = "pragma" = "no-cache"> <meta http-equiv equivtr content = "no-cache"> <meta http-equiv = "истекает" content = "0"> <meta http-equiv = "Keywords" Content = "Keyword1, Keyword2, Keyword3"> <Meta http-equiv = "Описание" content = "Это моя страница"> <!-<link relshiet "type =" text/conts " href = "styles.css"> -> </head> <body> $ {msg} </body> </html>7. Добавьте проект на сервер, запустите службу, откройте браузер и посетите: http: // localhost/sshdemo/user/regist
8. Введите имя пользователя и пароль, нажмите «Зарегистрироваться», чтобы отобразить результаты:
9. Консоль выводит оператор SQL (вывод был настроен, и оператор SQL был украшен в файле hibernatecontext.xml):
10. Просмотреть результаты базы данных:
Этот простой случай закончился. Нет проблем с проверкой данных, представленных формой и искаженным кодом. Это должно быть обновлено в будущем.
7. Резюме:
1. Интеграция трех основных рамок должна быть введена сначала, а затем интегрирована;
2. Обязательно не забывайте импортировать пакет базы данных базы данных;
3. Класс действий должен быть размещен под именем пакета «Действие», а имя класса должно закончиться действием, например, «XXXAction»;
4. При настройке Hibernate обязательно импортируйте пакеты JAR, которые поддерживают аннотацию «@Entity»;
5. Вы можете определить тип запроса для стойки, перехваченных в файле struts.xml, который по умолчанию по умолчанию и без суффиксов.
6. Вы можете определить тип фильтра фильтра на стойки в файле web.xml. По умолчанию *.action, и это должно быть изменено на / *;
7. В файле ApplicationContext.xm вам необходимо настроить: SessionFactory, Hibernate Entity Class, шаблон HibernateTemplate, DataSource источника данных и Spring Scanner (включая hibernatecontext.xml);
8. Каждый класс должен добавлять соответствующие аннотации, и методы в действии также должны быть добавлены.
Загрузите исходный код экземпляра: http://xiazai.vevb.com/201610/yuanma/sshzhuce(vevb.com).rar
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.