s2sh整合(详细版)

S2SH框架:原理与优点 在S2SH框架中,Spring负责管理整个应用的Bean实例,通过IoC(控制反转)的方式解耦组件之间的依赖关系,并提供了事务管理和AOP支持。S2SH(Struts2 + Spring + Hibernate)是一种常用的Java Web应用开发框架,它结合了Struts2、Spring和Hibernate的优点,提供了一种高效、可扩展的开发模式。S2SH框架的原理是将Struts2、Spring和Hibernate三个独立的框架整合在一起,通过各自的优点来提供更好的开发体验和性能优化。 阅读详情

 

创建项目s2sh

 

添加Hibernate 3.2



默认就可以,不要忘记将jar包加入到/WebRoot/WEB-INF/lib

接着next

 

实际上这里的hibernate.cfg.xml不起作用,因为该配置文件的内容由后面的spring配置文件进行管理,我们可以在创建之后将其删除
默认next


我们根本不用hibernate.cfg.xml,所以这里根本不需要进行数据库配置,当然默认也无所谓。
继续next


sessionFactory我们在之后也会直接使用spring为我们提供的,所以这里不需要创建。
finish 

添加Spring2.0



不要忘记选中这5个库包:
Spring 2.0 AOP Libraries
Spring 2.0 Core Libraries
Spring 2.0 Persistence Core Libraries
Spring 2.0 Persistence JDBC Libraries
Spring 2.0 Web Libraries
也不要忘记将jar包加入到/WebRoot/WEB-INF/lib。
next



这里我们不需要Enable AOP 所以不需要选中
不要忘记将配置文件applicationContext.xml指定在/WEB-INF目录下,不然服务器启动时无法加载
next



这里的sessionFactory我们也不需要,之后会手动配置。
finish

 

添加Struts2

由于MyEclipse并没有加入Struts2的支持,所以我们需要手动导入相关jar包。
需要的相关jar包如下:
freemarker-2.3.8.jar
ognl-2.6.11.jar
struts2-core-2.0.11.jar
xwork-2.0.4.jar
struts2-spring-plugin-2.0.11.jar

struts.xml

在src下加入struts的配置文件struts.xml

<?xml version="1.0"encoding="UTF-8" ?>

<!DOCTYPE strutsPUBLIC

    "-//ApacheSoftware Foundation//DTD Struts Configuration 2.0//EN"

    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

    <constant name="struts.enable.DynamicMethodInvocation"value="false" />

    <constant name="struts.devMode"value="false" />

    <include file="example.xml"/>

    <package name="default"namespace="/" extends="struts-default">

        <default-action-ref name="index"/>

        <action name="index">

            <result type="redirectAction">

                <param name="actionName">HelloWorld</param>

                <param name="namespace">/example</param>

            </result>

        </action>

    </package>

</struts>

 

<?xmlversion="1.0" encoding="UTF-8" ?>

<!DOCTYPEstruts PUBLIC

    "-//Apache Software Foundation//DTDStruts Configuration 2.0//EN"

   "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

<package name="s2sh"extends="struts-default">

</package>

</struts>

web.xml

<?xml version="1.0"encoding="UTF-8"?>

<web-app version="2.5"

    xmlns="http://java.sun.com/xml/ns/javaee"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

  <welcome-file-list>

    <welcome-file>index.jsp</welcome-file>

  </welcome-file-list>

<!-- 配置struts2的过滤器 --> 

    <filter> 

       <filter-name>struts2</filter-name> 

       <filter-class> 

           org.apache.struts2.dispatcher.FilterDispatcher  

       </filter-class> 

    </filter> 

    <filter-mapping> 

       <filter-name>struts2</filter-name> 

       <url-pattern>/*</url-pattern> 

    </filter-mapping>

<!-- 配置spring的监听器 --> 

    <listener> 

       <listener-class> 

           org.springframework.web.context.ContextLoaderListener  

       </listener-class> 

    </listener>

</web-app><?xml version="1.0"encoding="UTF-8"?>

<web-app version="2.5"

  xmlns="http://java.sun.com/xml/ns/javaee"

  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

  http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

<!-- 配置struts2的过滤器 -->

<filter>

  <filter-name>struts2</filter-name>

  <filter-class>

   org.apache.struts2.dispatcher.FilterDispatcher

  </filter-class>

</filter>

 

<filter-mapping>

  <filter-name>struts2</filter-name>

  <url-pattern>/*</url-pattern>

</filter-mapping>

 

<!-- 配置spring的监听器 -->

<listener>

  <listener-class>

   org.springframework.web.context.ContextLoaderListener

  </listener-class>

</listener>

 

 <welcome-file-list>

   <welcome-file>index.jsp</welcome-file>

 </welcome-file-list>

 

</web-app>

 

 

到目前为止我们的整合工作已经完成。我们可以将该工程打包,以备下次直接使用。
这里有一个问题,就是如果采用myeclipse加载hibernate和spring的lib包形式发布项目的时候会出现异常,我们可以手动去掉一个asm-2.2.3jar即可。


测试

sql

(1)使用mysql,记得将mysql-jdbc的jar包导入到工程中
创建s2sh数据库,并创建表person

CREATE TABLE `person` (  

`id` int(11) NOT NULL,  

`name` varchar(20) NOT NULL,  

`age` int(11) NOT NULL,  

PRIMARY KEY  (`id`)  

);  

--Table "person" DDL

CREATETABLE `person` (

  `id` int(11) NOT NULL,

  `name` varchar(20) NOT NULL,

  `age` int(11) NOT NULL,

  PRIMARY KEY (`id`)

)ENGINE=InnoDB DEFAULT CHARSET=utf8;


(2)创建com.s2sh.bean包,创建person表对应的Entity Bean及其映射文件

Person.java

package com.s2sh.bean;

publicclass person {

    private Integer id;

    private String name;

    privateintage;

    public Integer getId() {

       returnid;

    }

    publicvoid setId(Integer id) {

       this.id = id;

    }

    public String getName() {

       returnname;

    }

    publicvoid setName(String name) {

       this.name = name;

    }

    publicint getAge() {

       returnage;

    }

    publicvoid setAge(int age) {

       this.age = age;

    }

   

}

 

packagetest.s2sh.bean;

 

publicclass Person {

private Integer id;

private String name;

private int age;

public Integer getId() {

  return id;

}

public void setId(Integer id) {

  this.id = id;

}

public String getName() {

  return name;

}

public void setName(String name) {

  this.name = name;

}

public int getAge() {

  return age;

}

public void setAge(int age) {

  this.age = age;

}

}

 

 

Person.hbm.xml

<?xml version="1.0"encoding="utf-8"?> 

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/HibernateMapping DTD 3.0//EN"  

    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 

 

<hibernate-mapping> 

    <class name="com.s2sh.bean.Person" table="person"> 

       <id name="id"type="java.lang.Integer" column="id"> 

           <generator class="increment"></generator> 

       </id> 

       <property name="name"type="string" column="name" 

           length="20"></property> 

       <property name="age"type="java.lang.Integer" column="age"></property> 

    </class> 

</hibernate-mapping>

 

sessionFactory创建方式 <?xml version="1.0"encoding="utf-8"?>

<!DOCTYPEhibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

 

<hibernate-mapping>

<classname="test.s2sh.bean.Person" table="person">

  <id name="id"type="java.lang.Integer" column="id">

    <generatorclass="increment"></generator>

  </id>

  <property name="name"type="string" column="name"

   length="20"></property>

   <property name="age"type="java.lang.Integer" column="age"></property>

</class>

</hibernate-mapping>

 

(3)在spring配置文件applicationContext.xml配置hibernate的连接数据库信息及sessionFactory创建方式

<?xml version="1.0"encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

<!-- apache.dbcp连接池的配置 -->

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"

       destroy-method="close">

       <property name="driverClassName"value="com.mysql.jdbc.Driver"></property>

       <property name="url"

           value="jdbc:mysql://localhost:3306/s2sh?useUnicode=true&amp;characterEncoding=UTF-8"></property>

       <property name="username"value="root"></property>

       <property name="password"value="1234"></property> 

        <!-- 最大活动连接数 -->

       <property name="maxActive"value="100"></property> 

        <!-- 最大可空闲连接数 -->

       <property name="maxIdle"value="30"></property> 

        <!-- 最大可等待连接数 -->

       <property name="maxWait"value="500"></property> 

        <!-- 默认的提交方式(如果不需要事务可以设置成true,在实际应用中一般设置为false,默认为false) -->

       <property name="defaultAutoCommit"value="true"></property>

    </bean> 

<!-- 这里直接使用spring对hibernate3支持的sessionFactory -->

    <bean id="sessionFactory"

       class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

       <property name="dataSource"ref="dataSource"></property> 

        <!-- hibernate方言等相关配置 -->

       <property name="hibernateProperties">

           <props>

              <prop key="connection.useUnicode">true</prop>

              <prop key="connection.characterEncoding">utf-8</prop>

              <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>

              <prop key="hibernate.show_sql">true</prop>

           </props>

       </property> 

        <!-- hbm.xml的映射文件 -->

       <property name="mappingResources">

           <list>

              <value>test/s2sh/bean/Person.hbm.xml</value>

           </list>

       </property>

    </bean>

</beans>

<?xmlversion="1.0" encoding="UTF-8"?>

<beans

  xmlns="http://www.springframework.org/schema/beans"

  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

<!--apache.dbcp连接池的配置 -->

<beanid="dataSource"class="org.apache.commons.dbcp.BasicDataSource"destroy-method="close">

  <property name="driverClassName"value="com.mysql.jdbc.Driver"></property>

  <property name="url"value="jdbc:mysql://localhost:3306/s2sh?useUnicode=true&amp;characterEncoding=UTF-8"></property>

  <property name="username"value="root"></property>

  <property name="password"value=""></property>

  <!-- 最大活动连接数-->

  <property name="maxActive"value="100"></property>

  <!-- 最大可空闲连接数-->

  <property name="maxIdle"value="30"></property>

  <!-- 最大可等待连接数-->

  <property name="maxWait"value="500"></property>

  <!-- 默认的提交方式(如果不需要事务可以设置成true,在实际应用中一般设置为false,默认为false) -->

  <property name="defaultAutoCommit"value="true"></property>

</bean>

<!--这里直接使用spring对hibernate3支持的sessionFactory -->

<beanid="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

  <property name="dataSource"ref="dataSource"></property>

  <!-- hibernate方言等相关配置 -->

  <propertyname="hibernateProperties">

   <props>

     <propkey="connection.useUnicode">true</prop>

     <propkey="connection.characterEncoding">utf-8</prop>

     <propkey="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>

     <propkey="hibernate.show_sql">true</prop>

   </props>

  </property>

  <!-- hbm.xml的映射文件 -->

  <propertyname="mappingResources">

   <list>

     <value>test/s2sh/bean/Person.hbm.xml</value>

   </list>

  </property>

</bean>

 

</beans>

乱码问题解决方案

1、

    <property name="hibernateProperties">

       <props>

           <prop key="connection.useUnicode">true</prop>

           <prop key="connection.characterEncoding">utf-8</prop>

           <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>

           <prop key="hibernate.show_sql">true</prop>

       </props>

</property>  

<propertyname="hibernateProperties">

  <props>

    <propkey="connection.useUnicode">true</prop>

    <propkey="connection.characterEncoding">utf-8</prop>

    <propkey="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>

    <propkey="hibernate.show_sql">true</prop>

  </props>

</property>


2、

<property name="url"  value="jdbc:mysql://localhost:3306/s2sh?

        useUnicode=true&amp;characterEncoding=UTF-8"></property><propertyname="url"value="jdbc:mysql://localhost:3306/s2sh?useUnicode=true&amp;characterEncoding=UTF-8"></property>




(4)下面我们开始写DAO层,首先创建com.s2sh.dao包放置Dao类的接口,创建com.s2sh.dao.impl包放置Dao类的实现。

PersonDAO.java

package com.s2sh.dao;

import java.util.List;

import com.s2sh.bean.Person;

publicinterface PersonDAO {

    void savePerson(Person p);

    void removePerson(Person p);

    Person findPersonById(Integer id);

    List<Person> findAllPerson();

    void updatePerson(Person p);

}

packagetest.s2sh.dao;

 

importjava.util.List;

 

importtest.s2sh.bean.Person;

 

publicinterface PersonDAO {

void savePerson(Person p);

void removePerson(Person p);

Person findPersonById(Integer id);

List<Person> findAllPersons();

void updatePerson(Person p);

}


由于使用了spring,所以DAO的实现类可以继承HibernateDaoSupport进行实现

PersonDAOImpl.java

package com.s2sh.dao.impl;

import java.util.List;

importorg.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.s2sh.bean.Person;

import com.s2sh.dao.PersonDAO;

publicclass PersonDAOImpl extends HibernateDaoSupport implements PersonDAO {

    public List<Person> findAllPerson() {

       String sql = " fromperson p order by p.id desc";

       return (List<Person>)this.getHibernateTemplate().find(sql);

    }

    public Person findPersonById(Integer id) {

       Person p = (Person) this.getHibernateTemplate().get(Person.class, id);

       return p;

    }

    publicvoid removePerson(Person p) {

       this.getHibernateTemplate().delete(p);

    }

    publicvoid savePerson(Person p) {

       this.getHibernateTemplate().save(p);

    }

    publicvoid updatePerson(Person p) {

       this.getHibernateTemplate().update(p);

    }

}

 

(5)下面开始进行service层的设计,这里的service层仅是简单调用DAO层的的方法。
同样是创建接口包(com.s2sh.service),实现包和接口类(com.s2sh.service.impl),实现类

PersonService.java

package com.s2sh.service;

import java.util.List;

import com.s2sh.bean.Person;

publicinterface PersonService {

    List<Person> findAll();

    void save(Person p);

    void delete(Person p);

    Person findById(Integer id);

    void update(Person p);

}

packagetest.s2sh.service;

 

importjava.util.List;

 

importtest.s2sh.bean.Person;

 

publicinterface PersonService {

List<Person> findAll();

void save(Person p);

void delete(Person p);

Person findById(Integer id);

void update(Person p);

}

 

 

这里需要使用spring的ioc将DAO诸如到service中,所以要在service实现类中加入DAO作为属性。

PersonServiceImpl.java

package com.s2sh.service.impl;

import java.util.List;

import com.s2sh.bean.Person;

import com.s2sh.dao.PersonDAO;

import com.s2sh.service.PersonService;

publicclass PersonServiceImpl implements PersonService {

    private PersonDAO personDao;

    publicvoid delete(Person p) {

       personDao.removePerson(p);

    }

    public List<Person> findAll() {

       returnpersonDao.findAllPerson();

    }

    public Person findById(Integer id) {

       returnpersonDao.findPersonById(id);

    }

    publicvoid save(Person p) {

       personDao.savePerson(p);

    }

    publicvoid update(Person p) {

       personDao.updatePerson(p);

    }

    public PersonDAO getPersonDao() {

       returnpersonDao;

    }

    publicvoid setPersonDao(PersonDAO personDao) {

       this.personDao = personDao;

    }

}


(6)接下来开始对action层进行设置,实际项目中的action可能会有很多,所以需要对action进行分包,这里针对Person进行操作,创建com.s2sh.action.person.
这里先做保存操作

savePersonAction.java

package com.s2sh.action.person;

import com.opensymphony.xwork2.ActionSupport;

import com.s2sh.bean.Person;

import com.s2sh.service.PersonService;

publicclass savePersonAction extends ActionSupport {

    private Person p;

    private PersonService personService;

    public Person getP() {

       returnp;

    }

    publicvoid setP(Person p) {

       this.p = p;

    }

    public PersonService getPersonService() {

       returnpersonService;

    }

    publicvoid setPersonService(PersonService personService) {

       this.personService =personService;

    }

    public String execute() throws Exception{

       personService.save(p);

       returnSUCCESS;

    }

    publicvoid validate(){

       if(p.getName()==null || "".equals(p.getName())){

           this.addFieldError("p.name", "name is notnull!");

       }

    }

}

 

save.jsp

<%@ page language="java"import="java.util.*" pageEncoding="UTF-8"%>

<%

String path =request.getContextPath();

String basePath =request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

<%@ taglib prefix="s"uri="/struts-tags" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN">

<html>

  <head>

    <base href="<%=basePath%>">

    <title>Save Person</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">

  </head>

    <body>  

       <s:form action="savePerson">  

            <s:textfield name="p.name" label="name"></s:textfield>  

            <s:textfield name="p.age" label="age"></s:textfield>  

            <s:submit></s:submit>  

        </s:form>

    </body>

</html>

<%@page language="java" import="java.util.*"pageEncoding="utf-8"%>

<%@taglib prefix="s" uri="/struts-tags" %>

 

<!DOCTYPEHTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>

   

    <title>Save Person</title>

 

  </head>

 

  <body>

    <s:formaction="savePerson">

      <s:textfieldname="p.name" label="name"></s:textfield>

      <s:textfieldname="p.age" label="age"></s:textfield>

      <s:submit></s:submit>

    </s:form>

  </body>

</html>

 

操作成功页面

saveSuccess.jsp

<%@ page language="java"import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN">

<html>

  <head>

    <title>Save OK</title>

  </head>

    <body>  

       保存成功!<br>

    </body>

</html>

<%@page language="java" import="java.util.*"pageEncoding="utf-8"%>

 

<!DOCTYPEHTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>

    <title>Save OK</title>

  </head>

 

  <body>

    保存成功<br>

  </body>

</html>

配置struts.xml

<action name="savePerson"class="savePersonAction">

     <result>saveSuccess.jsp</result>

     <result name="input">save.jsp</result>

</action>

 

<actionname="savePerson" class="savePersonAction">

  <result name="success"type="redirect">/save-success.jsp</result>

  <resultname="input">/save.jsp</result>

</action>

 

 

 

由于现在的action的创建已经由spring所接管,所以这里class里面使用的是别名,该别名与applicationContext.xml中的id对应.

配置applicationContext的ioc

    <bean id="personDAO" class="com.s2sh.dao.impl.PersonDAOImpl"

       scope="singleton"> 

        <!-- 由于该类是继承于HibernateDaoSupport,所以需要将sessionFactory注入 -->

       <property name="sessionFactory">

           <ref bean="sessionFactory"/>

       </property>

    </bean>

    <bean id="personService" class="com.s2sh.service.impl.PersonServiceImpl">

       <property name="personDao"ref="personDAO"></property>

    </bean>

    <bean id="savePersonAction" class="com.s2sh.action.person.savePersonAction"

       scope="prototype">

       <property name="personService"ref="personService"></property>

    </bean>

 

<beanid="personDAO" class="test.s2sh.dao.impl.PersonDAOImpl"scope="singleton">

  <!-- 由于该类是继承于HibernateDaoSupport,所以需要将sessionFactory注入 -->

  <property name="sessionFactory">

   <ref bean="sessionFactory"/>

  </property>

</bean>

<beanid="personService" class="test.s2sh.service.impl.PersonServiceImpl">

  <property name="personDAO"ref="personDAO"></property>

</bean>

<beanid="savePersonAction"class="test.s2sh.action.person.SavePersonAction"scope="prototype">

  <property name="service"ref="personService"></property>

</bean>

 

 

这里说明一下spring中的单例与设计模式中的单例不同,设计模式的单例是在jvm中只产生一个实例,而spring中的单例
是针对每个ioc容器来言,如果存在两个ioc容器,那么每个ioc容器都会生成唯一的类实例
将sessionFactory注入Dao中,这里的Dao来说是无状态的,可以设置为单例singleton。这里的action是使用spring创建的。
struts2与struts1的action有所不同,因为struts2中的action中可能存在属性,这里是Person,所以struts2的action可能是有状态的。
如果是有状态的我们就需要将scope设置成原型模式,即每次请求都新建一个action。
不然可能会出现如果表单提交的第一次出错,之后就再也提交不过去了,值就是应为使用默认的singleton,
当第一次的时候就将FieldError中加入了错误,每次都是这个action,始终带着这个错误,所以就提交不过去了。

到目前为止这个整合已经完成了。

 

Java Web项目S2SH框架库文件集合 本文还有配套的精品资源,点击获取 简介:S2SH是一种企业级MVC应用程序开发的Java技术栈,包括Struts2、Hibernate3和Spring3框架。每个框架都负责不同的功能:Struts2用于控制层,Hibernate3处理数据库交互,Spring3提供全面的应用程序开发支持。S2SH的jar包集合是项目库文件的核心部分,对于确保Java项目的顺利运行至关重要。开... 阅读详情

相关推荐

S2SH框架整合与用户注册登录实践教程

本文还有配套的精品资源,点击获取 简介:S2SH整合是指将Struts2、Spring和Hibernate三个流行的Java框架结合在一起,以开发企业级Web应用。本教程详细介绍了S2SH框架在用户注册和登录功能中的实践应用,包括Struts2的MVC模式、Spring的依赖注入和事务管理,以及Hibernate的对象关系映射。通过实际项目演示,学习者将掌握如何配置和使用这...

weixin_33173126的博客 932

S2SH框架,整合struts2、spring、Hibernate三大框架

整合struts2、spring、Hibernate三大框架 本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和图片上传 LaTex数学公式 UML序列图和流程图 离线写博客 导入导出Markdown文件 丰富的快捷键 快捷键 加粗 Ctrl + B 斜体 ...

a602389093的博客 1537

S2SH框架整合必备包与配置解析

本文还有配套的精品资源,点击获取 简介:s2sh整合是Struts2、Spring和Hibernate框架集成的简称,用于构建企业级Web应用。s2sh分别处理展示逻辑、依赖注入与事务控制、对象关系映射。详细介绍了所需的核心包和关键配置,包括前端展示、业务逻辑与数据持久层的整合。 1. s2sh框架整合概述 概念提出 在IT行业中,s2sh框架整合概念...

weixin_33419305的博客 1245

S2SH智慧社区管理系统设计与实现

本文首先分析了智慧社区管理系统的需求,然后详细阐述了系统的架构设计、功能模块实现以及测试与部署过程,最后对系统的应用效果进行了总结,并对未来的发展方向进行了展望。此外,还可以加强与其他社区管理系统的互联互通,实现信息共享和资源整合,推动智慧社区建设的全面发展。(注:由于篇幅限制,本文仅对S2SH智慧社区管理系统的设计与实现进行了概述,并未包含详细的代码实现、界面截图或具体的测试数据。在实际撰写论文时,应进一步细化每个部分的内容,特别是系统的实现部分,应提供具体的代码示例、界面设计说明以及测试结果分析等。

qq_53797749的博客 864

S2SH整合 S2SH整合

S2SH整合S2SH整合S2SH整合S2SH整合S2SH整合S2SH整合S2SH整合

S2SH项目实例

NULL 博文链接:https://xgw123485.iteye.com/blog/1225339

S2SH框架整合开发版(十一)

爱一个人是一回事,拥有一个人是另外一回事,爱上并拥有一个人,更是另外一回事。 蝴蝶,是什么,是希望,是真正的希望。 上一章简单介绍了S2SH框架整合注解版(十),如果没有看过,请观看上一章。 一. 整合开发版 S2SH 框架已经搭建好了,但想要快速的开发,形成一个简单的规范,还需要继续努力,例如,简化一下Dao层, 分页查询一下, 简化一下分页等。 这里,进行一个整体性的操作。 二. 引入Jar ...

两个蝴蝶飞 1148

S2SH三大框架整合流程图

使用excel画了一个struts2、spring、hibernate整合的流程图,关键分析了struts2的流程,可以帮助更清晰的认识三大框架的流程

S2SH框架整合XML版(九)

爱一个人是一回事,拥有一个人是另外一回事,爱上并拥有一个人,更是另外一回事。 蝴蝶,是什么,是希望,是真正的希望。 上一章简单介绍了Spring的事务配置(八),如果没有看过,请观看上一章。 一. S2SH 框架整合 S2SH 指的是 Struts2, Spring,Hibernate三大框架,重要性什么的都不说了,都明白。 在学习本章之前,建议先将Struts2 与Hibernate 学习一下,...

两个蝴蝶飞 1065

Java s2sh框架商场项目(前台+后台)

功能描述:包括用户的登录注册,以及个人资料的修改.商品的分类展示,详情,加入购物车,生成订单,到银行支付等!另外还有收货地址的和我的收藏等常用操作.环境(JDK 1.7 ,mysql 5.5,Eclipse ).

(s2sh)三大框架的整合

struts2.2.1 和hibernate3.6.4 ,spring3.0.4之间整合所需要的jar包

java s2sh_s2sh整合(详细版)

创建项目s2sh添加Hibernate 3.2默认就可以,不要忘记将jar包加入到/WebRoot/WEB-INF/lib接着next实际上这里的hibernate.cfg.xml不起作用,因为该配置文件的内容由后面的spring配置文件进行管理,我们可以在创建之后将其删除默认next我们根本不用hibernate.cfg.xml,所以这里根本不需要进行数据库配置,当然默认也无所谓。继续nexts...

weixin_28730403的博客 297

基于Python的MGWR多尺度地理加权回归模型

多尺度地理加权回归(MGWR)变量之间的关系在地理空间上不是均一的,所有特征变量的影响都在不同的空间范围(带宽)内变化,某些变量可能表现出局部性影响(小带宽),某些变量可能表现出全局性影响(大带宽),通过优化每个特征变量的带宽,捕捉到空间关系的多尺度特性,得到更细致的模型解释。

weixin_61965078的博客 3851

S2SH框架整合注解版(十)

爱一个人是一回事,拥有一个人是另外一回事,爱上并拥有一个人,更是另外一回事。 蝴蝶,是什么,是希望,是真正的希望。 上一章简单介绍了S2SH框架整合XML版(九),如果没有看过,请观看上一章。 一. S2SH 注解版 将bean 的创建,与事务管理进行注解形式的开发。 与上一章有着非常紧密的联系,如果没有看过上一章,请观看上一章。 二. 开启注解扫描 <!-- 开启注解扫描 --> ...

两个蝴蝶飞 1041

一文吃透 BMS:动力电池与储能共用的电池管控全架构详解

BMS作为电池系统的核心控制器,其技术深度和系统复杂性不容小觑。动力电池与储能系统虽然应用场景不同,但在核心架构上共享大量基础技术。成功的BMS设计需要在精度、可靠性、成本、功耗之间找到最佳平衡点。未来,随着电池技术的进步和智能化需求的提升,BMS将向着更高集成度、更强智能化、更优经济性的方向发展。无论是汽车工程师还是储能系统设计师,深入理解BMS的全栈架构,掌握其核心技术原理,都将是应对未来能源存储挑战的关键能力。核心要点回顾BMS采用分层分布式架构,硬件是基础,算法是灵魂。

小帽子的博客 337

攻击时间控制的动态逆三维制导律(源代码)

%参考文献:《攻击时间控制的动态逆三维制导律》,哈尔滨工程大学学报,2010 %编程难点:视线坐标系与参考坐标系间的转换关系 一、采用本文方法结果 二、偏航通道采用增广比例导引律

算法小站 2393

关于jdk10.0版S2SH整合问题(小白篇)

一、笔者在做简单的SSH框架整合开发时,最原始搭配如下: jdk10.0.2 tomcat7 struts2.2.3 Spring3 Hibernate3 二、产生问题 整合后运行报出各种错误(主要是框架整合相关错误),根据报错网上查错,大部分说是包冲突或缺相应的jar包,根据所提进行修改,并未解决问题。此时已经开始考虑是否为tomcat版本或jdk版本是否为造成报错的主要原因,...

qq_39940390的博客 241

Star CCM+ 202206 (17.04) 详细安装步骤

StarCCM+ 17.04 安装包和详细安装步骤

薛定谔的alpha狗 3万+

s2sh整合配置

http://www.springframework.org/schema/beans"  xmlns:tx="http://www.springframework.org/schema/tx"  xmlns:aop="http://www.springframework.org/schema/aop"  xmlns:xsi="http://www.w3.org/2001/XMLSchema

github yx9o Apache RocketMQ & ShardingSphere Committer 1186

PID详解

1、什么是PID及其作用 设定一个输出目标,反馈系统传回输出值,如与目标不一致,则存在一个误差,PID 根据此误差调整输入值,直至输出达到设定值. 为什么需要PID呢,比如控制温度,我们需要设置一个要达到的目标温度值,当将温度稳定在目标温度值 例如,我们希望水的目标温度值为70°,其希望无非就是可以快速而且无抖动的达到70°,并稳定在70° 如果我们使用普通的方式加热,当温度到达70°后就以及停止加热,岂不是简单快速,当然用在要求不高的场合也可以,但是如果要求更高的场合呢,会出现温度到达70°后......

weixin_48435215的博客 5万+

步进电机驱动算法——梯形加减速算法

目录步进电机梯形加减速梯形加减速算法原理分析算法实现 步进电机梯形加减速 电机的控制方式一般分为开环控制与闭环控制两种控制方式,其中开环控制原理框图如下: 这种种控制方式的特点是:控制简单、实现容易、价格较低,这种开环控制方式,负载位置对控制电路没有反馈。 对于步进电机,控制脉冲的输入并不依赖于转子的位置,而是按一固定的规律发出控制脉冲,如果励磁变化太快,电机不能移动到新的位置,那么实际负载位置与理想位置就会产生一个偏差,就有可能出现失步或者过冲现象,所以需要使用加减速算法。 梯形加减速算法,S加减速算法等

aaa376070331的博客 3万+
上一篇: 如何使用多个Spring的xml配置文件
下一篇: WIN 7 系统垃圾清理.bat
JavaAlpha
博客等级 码龄18年 910粉丝 511原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值