idea环境下使用maven创建ssh项目
idea环境下使用maven创建ssh项目
新建项目
-
点击create from archetype(使用模板进行创建),由于要构建javaweb项目,所以选择webapp,点击next。
-
填写相关信息groupId,ArtifactId,点击next.
-
所谓GroupID是项目组织唯一的标识符,实际对应JAVA的包的结构,是main目录里java的目录结构;
-
所谓ArtifactID就是项目的唯一的标识符,实际对应项目的名称,就是项目根目录的名称。
-
-
选择终端上的maven版本(idea自带,也可使用自己配置的),这里选择自己配置的版本,点击next。
-
选择项目的存储位置,点击finish。
-
创建项目完成
整合ssh框架
-
在pom文件里引入jar包
<!-- 属性 --> <properties> <spring.version>4.2.4.RELEASE</spring.version> <hibernate.version>5.0.7.Final</hibernate.version> <struts.version>2.3.24</struts.version> </properties> <!-- 锁定版本,struts2-2.3.24、spring4.2.4、hibernate5.0.7 --> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>${hibernate.version}</version> </dependency> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>${struts.version}</version> </dependency> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-spring-plugin</artifactId> <version>${struts.version}</version> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <!-- spring --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> </dependency> <!-- hibernate --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> </dependency> <!-- 数据库驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.6</version> <scope>runtime</scope> </dependency> <!-- c3p0 --> <dependency> <groupId>c3p0</groupId> <artifactId>c3p0</artifactId> <version>0.9.1.2</version> </dependency> <!-- 导入 struts2 --> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> </dependency> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-spring-plugin</artifactId> </dependency> <!-- servlet jsp --> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jsp-api</artifactId> <version>2.0</version> <scope>provided</scope> </dependency> <!-- 日志 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.2</version> </dependency> <!-- junit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.9</version> <scope>test</scope> </dependency> <!-- jstl --> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.1.15</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.4</version> </dependency> </dependencies>
-
点击更新项目,将jar包从*仓库引入到项目中。
-
配置struts2环境。创建struts.xml配置文件
-
文件结构
-
在web.xml中配置strut2的核心过滤器
<!--配置struts2过滤器--> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
-
配置spring环境。创建spring配置文件applicationContext.xml
-
在web.xml中配置监听器:ContextLoaderListener
<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param>
-
搭建hibernate环境。创建Hibernate核心配置文件
-
文件结构
-
配置代码
<?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <!-- 会话工厂 --> <session-factory> <!-- 数据库方言,根据数据库选择 --> <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property> <!--为了方便调试是否在运行hibernate时在日志中输出sql语句 --> <property name="hibernate.show_sql">true</property> <!-- 是否对日志中输出的sql语句进行格式化 --> <property name="hibernate.format_sql">true</property> <property name="hibernate.hbm2ddl.auto">update</property> </session-factory> </hibernate-configuration>
-
-
struts2与spring进行整合
整合关键点:action对象创建,交给spring创建$]jkt
-
创建action类
<bean id="action" class="com.timmy.action.MyAction" scope="prototype"> </bean>
将action对象配置到spring配置文件中。注:scope一定要填prototype。因为spring 默认scope 是单例模式这样只会创建一个Action对象每次访问都是同一个Action对象,数据不安全。struts2 是要求每次次访问都对应不同的Action scope=“prototype” 可以保证当有请求的时候都创建一个Action对象。
-
在struts.xml中在action节点中class属性配置为spring工厂中action对象bean的id
-
-
Spring与Hibernate框架进行整合(在spring配置文件里进行配置)。
-
数据源dataSource交给spring
<!--配置数据源--> <context:property-placeholder location="classpath:db.properties"/> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="${jdbc.driverClass}"></property> <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property> <property name="user" value="${jdbc.user}"></property> <property name="password" value="${jdbc.password}"></property> </bean>
-
SessionFactory对象创建交给spring创建
<!--配置sessionFactory--> <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource"></property> <property name="configLocations" value="classpath:hibernate.cfg.xml"></property> </bean>
-
事务管理
<!-- 配置事务管理器 --> <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> <!-- xml方式管理事务 --> <!-- 配置通知:具体增强逻辑 --> <tx:advice id="txAdvice"> <tx:attributes> <!-- 匹配业务类中方法名称 --> <tx:method name="save*" /> <tx:method name="update*" /> <tx:method name="delete*" /> <tx:method name="find*" read-only="true"/> <tx:method name="*"/> </tx:attributes> </tx:advice> <!-- 配置aop --> <aop:config> <!-- 配置切点:具体哪些方法要增强(真正被增强的方法)--> <aop:pointcut expression="execution(* com.timmy.service.*.*(..))" id="cut"/> <!-- 配置切面:将增强逻辑作用到切点 (通知+切入点) --> <aop:advisor advice-ref="txAdvice" pointcut-ref="cut"/> </aop:config> <!-- 注解方式管理事务 --> <!-- 1、开启注解驱动 2、在service类上或者方法上使用注解@Transactional--> <!-- <tx:annotation-driven transaction-manager="transactionManager"/> --> <!-- 注解方式管理事务 -->
-
-
-
创建客户实体类、映射文件、将映射文件引入Hibernate核心配置文件中
-
实体类
public class User { private int uid; private String username; private String password; public int getUid() { return uid; } public void setUid(int uid) { this.uid = uid; } 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; } }
-
xml文件
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="com.timmy.domain.User" table="maven_user"> <id name="uid" column="uid" > <generator class="assigned" ></generator> </id> <property name="username" column="username"></property> <property name="password" column="password"></property> </class> </hibernate-mapping> <hibernate-configuration> <!-- 会话工厂 --> <session-factory> <!-- 数据库方言,根据数据库选择 --> <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property> <!--为了方便调试是否在运行hibernate时在日志中输出sql语句 --> <property name="hibernate.show_sql">true</property> <!-- 是否对日志中输出的sql语句进行格式化 --> <property name="hibernate.format_sql">true</property> <property name="hibernate.hbm2ddl.auto">update</property> <!-- 加载映射文件 --> <mapping resource="com/timmy/domain/User.hbm.xml"/> </session-factory> </hibernate-configuration>
-
创建service层类(业务层)和Dao层类(数据库层),完成注入;
public class MyDao { private HibernateTemplate hibernateTemplate; public HibernateTemplate getHibernateTemplate() { return hibernateTemplate; } public void setHibernateTemplate(HibernateTemplate hibernateTemplate) { this.hibernateTemplate = hibernateTemplate; } public void save(User user) { hibernateTemplate.save(user); } } public class MyService { private MyDao myDao; public MyDao getMyDao() { return myDao; } public void setMyDao(MyDao myDao) { this.myDao = myDao; } public void save(User user) { myDao.save(user); } }
-
启动项目
-
访问:代码包含一个测试实例:访问hello_save.action,讲一个用户写入到数据库。
访问流程
-
-
页面提交参数,在服务端action接收参数 参
-
调用业务层方法—>dao的方法—>DB 调
-
将返回的数据存值栈 存
-
配置结果视图,跳转页面 转