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方法(https://avbieatar.youkuaiyun.com/7/7/B/1_ralf_hx163com.jpg)
带尺寸的图片:
居中的图片:
居中并且带尺寸的图片:
当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。
常用的注解
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 :用于指定拦截器或者拦截器栈