SSH全注解

本文介绍SSH(Struts2+Spring+Hibernate)框架的整合过程,包括Maven项目搭建、配置文件详解及依赖注入等关键技术点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SSH全注解

#编写和配置ssh

首先创建一个maven项目进行项目的整理

ssh中各个框架的作用

strust:
整个应用架构的骨架,负责应用中mvc模型的实现,向下层传递前端请求,向上层传递服务响应,主要作用于action层;

spring:
主要作用是依赖注入和控制反转以达到解耦的目的,用于对整个应用中的bean实例进行管理,作用于ssh各个层;

hibernate:
主要用于数据库操作,提供了便捷的数据库操作框架,主要作用于dao层;

需要注入的依赖也就是pom.xml


4.0.0
com.xingyu
StarCosmos
0.0.1-SNAPSHOT
war



<spring.version>4.3.4.RELEASE</spring.version>

<build>
	<plugins>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-compiler-plugin</artifactId>
			<version>2.3.2</version>
			<configuration>
				<source>1.7</source>
				<target>1.7</target>
			</configuration>
		</plugin>

		<plugin>
			<groupId>org.codehaus.mojo</groupId>
			<artifactId>tomcat-maven-plugin</artifactId>
			<version>1.1</version>
		</plugin>
	</plugins>
</build>
<dependencies>
	<dependency>
		<groupId>javax.servlet</groupId>
		<artifactId>servlet-api</artifactId>
		<version>2.5</version>
		<!-- 编译但不打包 由于 服务器也有 会发生冲突 会报错 -->
		<scope>provided</scope>
	</dependency>
	<!-- 解决了jsp错误问题 -->
	<dependency>
		<groupId>javax.servlet</groupId>
		<artifactId>jsp-api</artifactId>
		<version>2.0</version>
		<scope>provided</scope>
	</dependency>

	<!-- 日志文件管理依赖 -->
	<!-- java日志:slf4j,log4j,logback,common-logging; slf4j 是规范/接口 ;日志实现:log4j,logback,common-logging -->
	<!-- log start -->
	<dependency>
		<groupId>org.slf4j</groupId>
		<artifactId>slf4j-api</artifactId>
		<version>1.7.12</version>
	</dependency>
	<dependency>
		<groupId>ch.qos.logback</groupId>
		<artifactId>logback-core</artifactId>
		<version>1.1.1</version>
	</dependency>
	<dependency>
		<groupId>ch.qos.logback</groupId>
		<artifactId>logback-classic</artifactId>
		<version>1.1.1</version>
	</dependency>
	<dependency>
		<groupId>log4j</groupId>
		<artifactId>log4j</artifactId>
		<version>1.2.16</version>
	</dependency>

	<!-- 数据库相关依赖 -->
	<!-- mysql数据库驱动 -->
	<dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
		<version>5.1.35</version>
	</dependency>
	<!-- c3p0数据库连接池 -->
	<dependency>
		<groupId>c3p0</groupId>
		<artifactId>c3p0</artifactId>
		<version>0.9.1.2</version>
	</dependency>
	<!-- Struts2 start -->
	<!-- Struts2 核心包 -->
	<dependency>
		<groupId>org.apache.struts</groupId>
		<artifactId>struts2-core</artifactId>
		<version>2.3.14</version>
		<!-- 这里的 exclusions 是排除包,因为 Struts2中有javassist,Hibernate中也有javassist, 
			所以如果要整合Hibernate,一定要排除掉Struts2中的javassist,否则就冲突了。 -->
		<exclusions>
			<exclusion>
				<groupId>javassist</groupId>
				<artifactId>javassist</artifactId>
			</exclusion>
		</exclusions>
	</dependency>
	<!-- strus2整合spring的插件包 -->
	<dependency>
		<groupId>org.apache.struts</groupId>
		<artifactId>struts2-spring-plugin</artifactId>
		<version>2.3.14</version>
	</dependency>
	<!--使用了这个插件之后,就可以很方便的浏览项目中的所有action及其与 jsp view的映射 -->
	<dependency>
		<groupId>org.apache.struts</groupId>
		<artifactId>struts2-config-browser-plugin</artifactId>
		<version>2.3.14</version>
	</dependency>
	<!-- strus2的支持注解的包 -->
	<dependency>
		<groupId>org.apache.struts</groupId>
		<artifactId>struts2-convention-plugin</artifactId>
		<version>2.3.14</version>
	</dependency>

	<!--json -->
	<dependency>
		<groupId>org.apache.struts</groupId>
		<artifactId>struts2-json-plugin</artifactId>
		<version>2.3.16.3</version>
	</dependency>
	<!-- 引入json依赖  -->
	<dependency>
		<groupId>net.sf.json-lib</groupId>
		<artifactId>json-lib</artifactId>
		<version>2.4</version>
		<classifier>jdk15</classifier>
	</dependency>
	<!-- Struts2 end -->

	<!-- Spring start -->
	<!-- Spring 核心依赖 -->
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-core</artifactId>
		<version>${spring.version}</version>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-beans</artifactId>
		<version>${spring.version}</version>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-context</artifactId>
		<version>${spring.version}</version>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-context-support</artifactId>
		<version>${spring.version}</version>
	</dependency>
	<!-- Spring DAO层依赖 -->
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-jdbc</artifactId>
		<version>${spring.version}</version>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-tx</artifactId>
		<version>${spring.version}</version>
	</dependency>
	<!-- Spring web相关依赖 -->
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-web</artifactId>
		<version>${spring.version}</version>
	</dependency>
	<!-- Spring 单元测试依赖 -->
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-test</artifactId>
		<version>${spring.version}</version>
		<scope>test</scope>
	</dependency>
	<!-- Spring 表达式语言依赖 -->
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-expression</artifactId>
		<version>${spring.version}</version>
	</dependency>
	<!-- Spring aop依赖 -->
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-aop</artifactId>
		<version>${spring.version}</version>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-aspects</artifactId>
		<version>${spring.version}</version>
	</dependency>
	<!-- Spring 整合Hibernate依赖 -->
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-orm</artifactId>
		<version>${spring.version}</version>
	</dependency>
	<!-- Spring end -->

	<!-- 添加Hibernate依赖 -->
	<dependency>
		<groupId>org.hibernate</groupId>
		<artifactId>hibernate-core</artifactId>
		<version>5.0.7.Final</version>
	</dependency>

	<!-- Servlet Web相关依赖 -->
	<dependency>
		<groupId>taglibs</groupId>
		<artifactId>standard</artifactId>
		<version>1.1.2</version>
	</dependency>
	<!-- JSTL标签类 -->
	<dependency>
		<groupId>jstl</groupId>
		<artifactId>jstl</artifactId>
		<version>1.2</version>
	</dependency>
	<!-- JSON依赖 -->
	<dependency>
		<groupId>com.fasterxml.jackson.core</groupId>
		<artifactId>jackson-databind</artifactId>
		<version>2.5.4</version>
	</dependency>
	<dependency>
		<groupId>org.codehaus.jackson</groupId>
		<artifactId>jackson-mapper-asl</artifactId>
		<version>1.9.13</version>
	</dependency>
</dependencies>
## 配置spring的applicationContext.xml文件 <?xml version="1.0" encoding="UTF-8"?>
<!-- 开启注解扫描 -->
<context:component-scan base-package="org.star"/>

<!-- 配置外部属性持有对象 -->
<context:property-placeholder location="classpath:db.properties"/>

<!-- 配置c3p0数据源-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <property name="driverClass" value="${jdbc.driverClass}"/>
    <property name="jdbcUrl" value="${jdbc.url}"/>
    <property name="user" value="${jdbc.user}"/>
    <property name="password" value="${jdbc.password}"/>
</bean>

<!-- 配置Hibernate的SessionFactory,无hibernate配置文件 -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
    <!-- 配置数据源 -->
    <property name="dataSource" ref="dataSource"/>

    <!-- 配置hibernate属性-->
    <property name="hibernateProperties">
        <props>
            <!-- 数据库的方言 -->
            <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
            <!-- 是否显示SQL语句 -->
            <prop key="hibernate.show_sql">true</prop>
            <!-- 是否格式化显示SQL语句 -->
            <prop key="hibernate.format_sql">true</prop>
            <!-- 采用何种策略来创建表结构: -->
            <prop key="hibernate.hbm2ddl.auto">update</prop>
        </props>
    </property>

    <!-- 配置实体注解扫描 -->
    <property name="packagesToScan">
        <list>
            <value>org.star.entity</value>
        </list>
    </property>
</bean>

<!-- 配置hibernate模板 -->
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate5.HibernateTemplate">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>

<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>

<!-- 配置事务注解扫描 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
## 连接数据库的配置file文件db.properties

jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test
jdbc.user=root //数据库的用户名
jdbc.password=root //数据库的密码

日志的配置file文件log4j.properties

direct log messages to stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.err
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

direct messages to file mylog.log

log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=c:mylog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

set log levels - for more verbose logging change ‘info’ to ‘debug’

log4j.rootLogger=info, stdout

配置前端web.xml文件

<?xml version="1.0" encoding="UTF-8"?> StarCosmos index.html index.htm index.jsp default.html default.htm default.jsp
<!-- 配置OpenSessionInview过滤器 -->
<filter>
    <filter-name>OpenSessionInViewFilter</filter-name>
    <filter-class>org.springframework.orm.hibernate5.support.OpenSessionInViewFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>OpenSessionInViewFilter</filter-name>
    <url-pattern>*.action</url-pattern>
</filter-mapping>

<!-- 配置Spring的字符编码过滤器 -->
<filter>
    <filter-name>CharacterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

<!-- 配置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核心监听器 -->
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
</context-param>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

配置好以上的文件,从实体类开始,这里就创建一个user的实体类举个例子hibernate、struts2、spring的一些注解

链接: link.

图片:
别忘了getter  setter 方法别忘了getter setter方法(https://avbieatar.youkuaiyun.com/7/7/B/1_ralf_hx163com.jpg)

带尺寸的图片: 在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述action层的具体实现这样大概就是一个完整的一个项目了,Alt

居中的图片: Alt

居中并且带尺寸的图片: Alt

当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。

常用的注解

spring:
@Controllor 作用:一般用于表现层对象Action
@Service 作用:一般用于业务层对象service
@Repository 作用:一般用于持久对象 dao
@Scope 作用:设置bean的作用范围 属性:value
属性取值:singleton:单例,默认值 prototype:多例 //action是多例
request:web项目中的一次请求范围
session:web项目中的会话范围
globalsession:web项目中全局会话范围(portlet)
@Resource 作用:按照bean的id注入数据。
属性:name:指定注入bean的id
type:指定注入bean的类型
细节:默认情况下(不指定属性),它会先根据变量名称注入,注入不成功;再根据类型注入
@Value 作用:给基本类型和String类型注入数据。
属性:value:注入的数据值

hibernate:

@Entity
作用:声明该类是一个JPA标准的实体类

@Table
作用:指定实体类关联的表,注意如果不写表名,默认使用类名对应表名。
属性:name 指明数据库的表

@Column (英 ['kɒləm] ka lou)
作用:指定实体类属性对应的表字段,如果属性和字段一致,可以不写
属性:name 指明数据库对应的字段名

@Id
作用:声明属性是一个OID,对应的一定是数据库的主键字段

@GenerateValue ( 狙勒瑞特 Value)

作用:声明OID的主键策略

@SequenceGenerate(stategy=GenerationType.IDENTITY)( C可蕊斯 狙勒瑞特)
作用:使用SEQUENCE策略时,用于设置策略的参数

@TableGenerate
作用:使用TABLE主键策略时,用于设置策略的参数

@JoinTable
作用:关联查询时,表与表是多对多的关系时,指定多对多关联表中间表的参数

@JoinColumn
作用:关联查询时,表与表是一对一、一对多、多对一以及多对多的关系时,声明表关联的外键字段作为连接表的条件。必须配合关联表的注解一起使用

@OneToMany
作用:关联表注解,表示对应的实体和本类是一对多的关系

@ManyToOne
作用:关联表注解,表示对应的实体和本类是多对一的关系

@ManyToMany
作用:关联表注解,表示对应的实体和本类是多对多的关系

Struts:

@NameSpace
出现的位置:它只能出现在 package 上或者 Action 类上。一般情况下都是写在 Action 类上。

作用:指定当前 Action 中所有动作方法的名称空间。

属性:value :指定名称空间的名称。写法和 xml 配置时一致。不指定的话,默认名称空间是""。

@ParentPackage
出现的位置:它只能出现在 package 上或者 Action 类上。一般情况下都是写在 Action 类上。

作用:指定当前动作类所在包的父包。(eg:“struts-default”)
value :指定父包的名称

@Action
出现的位置:它只能出现在 Action 类上或者动作方法上。一般情况下都是写在动作方法上。

作用:指定当前动作方法的动作名称。也就是 xml 配置时 action 标签的 name 属性。
属性:
value :指定动作名称。
results[]: :它是一个数组,数据类型是注解。用于指定结果视图。此属性可以没有,当没有
该属性时,表示不返回任何结果视图。即使用 response 输出响应正文。
interceptorRefs[] :它是一个数组,数据类型是注解。用于指定引用的拦截器。

@Result
出现的位置:它可以出现在动作类上,也可以出现在 Action 注解中。

作用:出现在类上,表示当前动作类中的所有动作方法都可以用此视图。
出现在 Action 注解中,表示当前 Action 可用此视图。

属性:
name :指定逻辑结果视图名称。

type :指定前往视图的方式。例如:请求转发,重定向,重定向到另外的动作。

location :指定前往的地址。可以是一个页面,也可以是一个动作。

@Results
出现的位置:它可以出现在动作类上,也可以出现在 Action 注解中。

作用:用于配置多个结果视图。

属性:
value :它是一个数组,数据类型是 result 注解。

@InterceptorRef
出现的位置:它可以出现在动作类上或者 Action 注解中。

作用:用于配置要引用的拦截器或者拦截器栈

属性:
value :用于指定拦截器或者拦截器栈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值