English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Интеграция MyEclipse с тремя основными фреймворками SSH и загрузка исходного кода для регистрации пользователя

Введение

SSH не является фреймворком, а интеграцией нескольких фреймворков (struts+spring+hibernate), это是目前较流行的一种开源 интегрированный фреймворк Web-приложений, используемый для создания гибких и легко расширяемых многослойных Web-приложений.

Системы, интегрирующие фреймворки SSH, с точки зрения ответственности делятся на четыре уровня: уровень представления, уровень бизнес-логики, уровень persistence и уровень модулей области (уровень сущностей).

Struts является основой системы, отвечает за разделение MVC, в модели фреймворка Struts контролирует переходы бизнеса, используя фреймворк Hibernate для поддержки уровня persistence. Spring, с одной стороны, является легковесным контейнером IoC, отвечает за поиск, определение, создание и управление объектами и зависимостями между ними, а с другой стороны, позволяет Struts и Hibernate лучше работать.

Используйте MyEclipse для интеграции трёх больших фреймворков SSH и реализуйте Demo для имитации регистрации пользователей, соответствующие версии:

Версия Struts: 2.1;

Версия Spring: 3.1;

Версия Hibernate: 3.3;

Первый раздел: подготовка перед интеграцией:

1. Создайте веб-проект, как показано ниже:

Внимание:Имя пакета, поддерживающего action, должно быть "action", и класс action должен заканчиваться на Action, то есть в виде XxxAction, как показано на рисунке выше

2. Создайте базу данных и таблицы:

CREATE DATABASE sshdemo; 
CREATE table t_user( 
id INT PRIMARY KEY, 
username VARCHAR(10), 
password VARCHAR(20) 
) 

3. Импортируйте пакет подключения к базе данных c3p0jar, нажмите для скачивания:

c3p0-0.9.2-pre1.jarmysql-connector-java-5.1.13-bin.jar

Второй раздел: конфигурация фреймворка Struts:

1. Выберите проект, нажмите правой кнопкой мыши и выберите: MyEclipse -> Project Facets[Capabilities] -> Установить Apache Struts (2.x) Facet, как показано ниже:

2. Выберите версию, здесь я выбрал 2.1, нажмите "Готово", как показано ниже:

3. После выполнения предыдущих шагов, вы обнаружите, что в папке src добавился файл struts.xml, содержимое которого такое:

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> 
<struts> 
</struts> 

4. В файле web.xml в директории WEB-INF появился новый фрагмент кода конфигурации фильтра struts, как показано ниже:

5. С参照ением рисунка, измените *.action на "/*", до этого моментаКонфигурация фреймворка struts завершена;

Три, конфигурация фреймворка Spring:
1. С参照ением конфигурации struts, выберите проект, нажмите правой кнопкой мыши и выберите: MyEclipse -> Project Facets[Capabilities] -> Install Spring Facet, выберите версию, в данном случае выберите 3.1:

2. Нажмите "Готово", и вы обнаружите, что в директории src появился новый:applicationContext.xmlВ директории WEB-INF появился новый файл spring-form.tld и spring.tld, и в файле web.xml появился новый фрагмент кода, связанный с конфигурацией spring, базовая установка spring-фреймворка завершена (о включении пространства имен будет рассказано позже), как показано ниже:

Четыре, конфигурация фреймворка Hibernate:

1. С参照ением конфигурации struts, выберите проект, нажмите правой кнопкой мыши и выберите: MyEclipse -> Project Facets[Capabilities] -> Install HibernateFacet, выберите версию, в данном случае выберите 3.3:

2. Нажмите "Готово", и вы обнаружите, что в директории src появился новый пакет (его можно удалить), и в файле web.xml появился новый фрагмент кода (будет настроен позже), как показано ниже:

3. Импорт jar-пакета, поддерживающего аннотацию "@Entity": выберите проект, нажмите правой кнопкой мыши и выберите: MyEclipse -> Project Facets[Capabilities] -> Manage..., затем следуйте шагам, показанным на рисунке:

После выполнения указанных шагов, основные три фреймворка уже установлены,接下来我们将它们整合。

Пять, интеграция

1. Чтобы не сделать applicationContext.xml слишком громоздким и для удобства управления, мы храним конфигурации Hibernate в другом.xml файле, а затем импортируем его в applicationContext.xml. Конкретные шаги: 

(1)в директории src (на одном уровне с applicationContext.xml) создайте файл с именем}}hibernateContext.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.springframework.org/schema/beans/spring-beans-3.1.xsd" 
 <!--Конфигурация sessionFactory 
 <bean id="sessionFactory" 
 class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
 <!--Свойства dataSource будут настроены в файле applicationContext.xml, здесь сначала используется ссылка 
 <property name="dataSource" ref="dataSource"></property> 
 <!--Настройка параметров hibernate 
 <property name="hibernateProperties"> 
  <!--Тег props предназначен для инъекции свойств типа Properties 
  <!--ключ должен начинаться с префикса hibernate. 
  <props> 
  <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> 
  <!--show_sql цель - это печать запросов SQL 
  <prop key="hibernate.show_sql">true</prop> 
  <!--美化和打印SQL формата 
  <prop key="hibernate.format_sql">true</prop> 
  <!-- a) create-drop: При выполнении программы создается таблица данных, после выполнения операции таблица данных удаляется, часто используется в разработке для тестирования 
   b) create: При каждом выполнении программы таблица данных создается заново 
   c) update: При выполнении программы выполняется проверка, если таблица уже существует, то таблица не создается, в противном случае создается таблица данных, и поля таблицы данных автоматически добавляются в зависимости от свойств класса сущности (разработка в среде разработки) 
   d) validate: При выполнении программы будет проверяться, если свойства класса сущности не соответствуют полям таблицы, то будет выдаваться ошибка (в производственной среде) --> 
  <prop key="hibernate.hbm2ddl.auto">validate</prop> 
  </props> 
 </property> 
 <!-- Конфигурация实体 классов hibernate --> 
 <property name="packagesToScan"> 
  <!-- Тег list используется для инъекции свойств типа String[], значения которых обычно являются полными именами пакетов bean, а классы в этих пакетах обычно соответствуют таблицам в базе данных --> 
  <list> 
  <value>com.beauxie.bean</value> 
  </list> 
 </property> 
 </bean> 
 <!-- Конфигурация шаблона hibernateTemplate --> 
 <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate"> 
 <property name="sessionFactory" ref="sessionFactory"></property> 
 </bean> 
</beans>

 (3)В файле applicationContext.xm удалить конфигурацию "sessionFactory" (поскольку она уже настроена в 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 http://www.springframework.org/schema/beans/spring-beans-3.1.xsd" 
 <bean id="dataSource"}} 
 class="org.apache.commons.dbcp.BasicDataSource"> 
 </bean> 
 <!-- Импорт других конфигурационных файлов spring, если все поместить в один файл, то он будет выглядеть более громоздким --> 
 <import resource="hibernateContext.xml"/> 
 </beans> 

2. В файле applicationContext.xml изменить конфигурацию, основанную на先前ном dataSource (имя базы данных, имя пользователя, пароль и т.д.), (Внимание: в теге value не должно быть пробелов и переносов строк!!),如下图所示:

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> 
  <property name="jdbcUrl"> 
  <!-- Если использовать атрибут value, а не тег value,则需要escape "&" (пробелы), использование тега value, <span style="color:#FF0000;">теге не должно быть пробелов, переносящих строк, так как они будут преобразованы в " ", что может привести к тому, что база данных не будет подключена,除非 будет переписан источник данных --> 
  <value><![CDATA[jdbc:mysql://localhost:3306/sshdemo?useUnicode=true&characterEncoding=UTF8&useServerPrepStmts=true&prepStmtCacheSqlLimit=256&cachePrepStmts=true&prepStmtCacheSize=256&rewriteBatchedStatements=true]]></value> 
 </property> 
 <property name="driverClass" value="com.mysql.jdbc.Driver"></property> 
 <property name="user" value="root"></property> 
 <property name="password" value="root"></property> 
 <property name="acquireIncrement" value="3"></property> 
 <property name="initialPoolSize" value="10"></property> 
 <property name="minPoolSize" value="2"></property> 
 <property name="maxPoolSize" value="10"></property> 
 </bean> 

3. В applicationContext.xm настройте сканер spring, чтобы наши классы могли автоматически загружать компоненты spring с аннотациями, подробные шаги следующие: (1) Введите пространство имен context, поддерживающее теги context, нажмите "Namespaces" в нижней части, затем отметьте пункт context:


(2) Настройка сканера spring:

<!-- Настройка сканера spring, добавление компонентных аннотаций к нашим классам, чтобы автоматически загрузить bean--> 
<context:component-scan base-package="com.beauxie.action,com.beauxie.service,com.beauxie.dao"> 
</context:component-scan> 

Таким образом, завершена установка环境的 для трех больших фреймворков ssh,接下来 на основе фреймворка ssh будет реализована регистрация пользователей

Шестой раздел: Пример: простая имитация регистрации пользователя

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%>"> 
<title>Добро пожаловать, регистрируйтесь</title> 
<meta http-equiv="pragma" content="no-cache"> 
<meta http-equiv="cache-control" content="no-cache"> 
<meta http-equiv="expires" content="0"> 
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> 
<meta http-equiv="description" content="This is my page"> 
<!-- 
 <link rel="stylesheet" type="text/css" href="styles.css"> 
 --> 
</head> 
<body> 
 <form action="${pageContext.request.contextPath }/user/regist" method="POST"> 
 <!-- Также можно использовать user.username для автоматического добавления свойства user, но это не является главной темой, поэтому значение будет получено вручную на заднем плане--> 
 Имя пользователя: <input type="text" name="username"><br> Пароль 
  Код: <input type="password" name="password"><br> 
 <input type="submit" value="Регистрация"> 
 </form> 
</body> 
</html> 

2. Код класса User:

package com.beauxie.bean; 
import javax.persistence.Entity; 
import javax.persistence.Id; 
import javax.persistence.Table; 
/** 
 * @author Beauxie 
 * В данном случае свойства User должны соответствовать полям таблицы t_user 
 * В противном случае необходимо вручную определить соответствующие поля для различных свойств 
 */ 
@Entity//Маппинг таблицы базы данных 
@Table(name="t_user")//Если не добавить этот аннотацию, по умолчанию будет соответствовать таблице user 
public class User { 
 @Id//Соответствует первичному ключу таблицы t_user 
 private int id;//ID пользователя 
 private String username;//Имя пользователя 
 private String 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 password; 
 } 
 public void setPassword(String password) { 
 this.password = password; 
 } 
} 

3. Код класса UserDao:

package com.beauxie.dao; 
импорт org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.orm.hibernate3.HibernateTemplate; 
import org.springframework.stereotype.Repository; 
импорт com.beauxie.bean.User; 
/** 
 * @author Beauxie 
 * Слой Dao, выполняющий операции с базой данных 
 */ 
@Repository//Этот атрибут соответствует слою persistence (обычно Dao-слой), указывает на то, что класс управляется Spring, и имя класса в соответствующем пакете также будет иметь "S" 
public class UserDao { 
 @Autowired//Автоматическая инъекция, настройку не нужно, так как она уже настроена в файле конфигурации Spring 
 private HibernateTemplate template; 
 /** 
 * Регистрация пользователя, то есть добавление новой записи в таблицу 
 * @param user 
 */ 
 public void addUser(User user){ 
 //Добавление данных в базу данных, одного предложения достаточно 
 template.save(user); 
 } 
} 

4. Код класса UserService:

пакет com.beauxie.service; 
импорт org.springframework.beans.factory.annotation.Autowired; 
импорт org.springframework.stereotype.Service; 
импорт com.beauxie.bean.User; 
импорт com.beauxie.dao.UserDao; 
/** 
 * @author Beauxie 
 * Слой Service 
 */ 
@Service// Эта атрибут corresponds to the business layer, usually the Service layer), indicating that it is managed by spring, and the class name in the corresponding package will also have an "S" 
public class UserService { 
 @Autowired// Это также автоматическая инъекция 
 private UserDao userDao; 
 public void addUser(User user){ 
 // Вызов метода addUser из слоя Dao 
 userDao.addUser(user); 
 } 
} 

5. Код класса UserAction:

пакет 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.Result; 
импорт org.apache.struts2.convention.annotation.Results; 
импорт org.springframework.beans.factory.annotation.Autowired; 
импорт org.springframework.context.annotation.Scope; 
импорт org.springframework.stereotype.Controller; 
импорт com.beauxie.bean.User; 
импорт com.beauxie.service.UserService; 
/** 
 * @author Beauxie 
 * 
 */ 
@Controller// используется для маркировки компонента управления 
@Namespace("/user")// префикс URL 
@Scope("prototype")// Action по умолчанию является singleton, но на практике, как правило, многоsingleton, так как один Action может соответствовать нескольким различным запросам 
// @ParentPackage("struts-default")// наследование определенного пакета, по умолчанию «struts-default», поэтому можно пропустить 
@Results({ 
 @Result(name="registSuccess",location="/msg.jsp") 
}) 
public class UserAction { 
 @Autowired// автоматическая инъекция 
 private UserService service ; 
 // по умолчанию struts перехватывает «.action» и без всякого суффикса 
 @Action(value="regist")// доступ: /user/regist.action или /user/regist 
 public String regist(){ 
 // Получение request 
 HttpServletRequest request = ServletActionContext.getRequest(); 
 // Получение данных из формы submissions 
 String username = request.getParameter("username"); 
 String password = request.getParameter("password"); 
 // Обработка userBean 
 User user = new User(); 
 user.setId(1000); 
 user.setUsername(username); 
 user.setPassword(password); 
 // Вызов метода уровня service, для добавления записи в базу данных 
 service.addUser(user); 
 // Сохранение сообщения в области request, для отображения на переднем плане 
 request.setAttribute("msg", "Поздравляем, вы успешно зарегистрировались! <br>Имя пользователя: " + username); 
 return "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%>"> 
<title>Сообщение о сообщении</title> 
<meta http-equiv="pragma" content="no-cache"> 
<meta http-equiv="cache-control" content="no-cache"> 
<meta http-equiv="expires" content="0"> 
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> 
<meta http-equiv="description" content="This is my page"> 
<!-- 
 <link rel="stylesheet" type="text/css" href="styles.css"> 
 --> 
</head> 
<body> 
 ${msg } 
</body> 
</html> 

7. Добавьте проект на сервер, запустите сервис, откройте браузер и перейдите по адресу: http://localhost/SSHDemo/user/regist

8. Введите имя пользователя и пароль, нажмите “Регистрация”, результат будет отображен:

9. Вывод sql-запросов в консоль (в файле hibernateContext.xml уже настроен вывод и美化 SQL-запросов):

10. Проверка результатов базы данных:

До этого этот простой пример уже завершен, вопросы проверки данных формы отправки и проблем с кириллицей не рассматривались, возможно, в будущем это будет обновлено?,,,

7. Обобщение:

1. Слияние трех основных рамок должно начинаться с внедрения каждой из них по отдельности, а затем их интеграции;

2. Обязательно запомните, чтобы импортировать jar-пакет базы данных;

3. Класс Action должен быть в пакете action, и имя класса должно заканчиваться на Action, например “XxxAction”;

4. При настройке Hibernate необходимо импортировать jar-пакет, поддерживающий аннотацию '@Entity';

5. В файле struts.xml можно определить тип запросов,拦截 struts, по умолчанию это .action и без суффикса

6. В файле web.xml можно определить тип фильтра struts, по умолчанию это *.action, следует изменить на /*;

7. В файле applicationContext.xm необходимо настроить: sessionFactory, сущности hibernate, шаблон hibernateTemplate, источник данных dataSource, сканер spring five parts (включая hibernateContext.xml);

8. В каждом классе一定要 добавить соответствующие аннотации, а также на методах Action также должны быть аннотации.

Загрузка примерного исходного кода:http://xiazai.jb51.net/201610/yuanma/SSHzhuce(jb51.net).rar

Это все содержимое статьи, надеюсь, это поможет вам в изучении, также希望大家多多 поддерживать учебник呐喊.

Заявление: содержимое статьи взято из Интернета, авторские права принадлежат соответствующему автору, контент предоставлен пользователями Интернета, сайт не обладает правами собственности, не был обработан вручную, и не несет ответственности за соответствующие юридические последствия. Если вы обнаружите подозрительное содержание о нарушении авторских прав, пожалуйста, отправьте письмо по адресу: notice#oldtoolbag.com (во время отправки письма замените # на @) для сообщения о нарушении и предоставьте соответствующие доказательства. Если факт будет подтвержден, сайт немедленно удалил涉嫌侵权的内容.

Основной курс
Вам может понравиться