新手接触SSH框架,把自己第一次整合框架的经验总结下来,算是一次笔记吧。
整合步骤:
- 下载jar包,使用maven构建的话按照官文文档分别导入三个框架的依赖
- 在Eclipse下新建web工程
- 编辑配置文件
这些就不在叙述了,相信有过编程的人都知道
1 首先配置struts2
导入jar包如下:
-配置web.xml文件
<display-name>Struts Blank</display-name>
<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>
struts2配置完成 ,测试一下
新建index.jsp如下:
<body>
<h1>Hello World!</h1>
</body>
login.jsp:
<body>
<div class="content">
<section class="loginBox">
<label><h3>管理员登录</h3></label>
<form class="form-horizontal" role="form" action="LoginAction" method="post">
<div class="form-group">
<label for="username" class="col-sm-3 control-label">账号</label>
<div class="col-sm-9">
<input type="text" class="form-control" id="username"
name="username" placeholder="username">
</div>
</div>
<div class="form-group">
<label for="password" class="col-sm-3 control-label">密码</label>
<div class="col-sm-9">
<input type="password" class="form-control" id="password"
name="password" placeholder="password">
</div>
</div>
<div>
<input type="submit" class="btn btn-primary col-sm-12" id="submit" value="登录">
</div>
</form>
</section>
</div>
</body>
新建类loginAction:
import javax.annotation.Resource;
import org.springframework.stereotype.Controller;
import com.opensymphony.xwork2.ActionSupport;
import com.scut.dao.ManagerDao;
import com.scut.dao.imol.ManagerDaoImpl;
import com.scut.pojo.Manager;
import com.scut.service.ManagerService;
public class LoginAction extends ActionSupport {
private String username;
private String password;
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;
}
public String execute() {
if(username="admin"&&password=="123") return SUCCESS;
return ERROR;
}
}
配置struts.xml文件:
<action name="LoginAction" class="com.scut.action.LoginAction" method="execute">
<result name="success">index.jsp</result>
</action>
在eclipse上启动tomcat,在login.jsp页面输入admin及123成功跳转index.jsp说明struts2配置成功。
struts2和spring整合 导入spring-framework下所有jar包,再导入struts2-spring-plugin.jar ,配置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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<context:component-scan base-package="com.scut"></context:component-scan>
</beans>
在web.xml中增加:
<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>
对LoginAction进行注解如下:
@Controller
public class LoginAction extends ActionSupport {
只增加@Controller就行
测试:
public class SpringTest {
private ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
@Test
public void strutstest() {
LoginAction la = (LoginAction) ac.getBean("loginAction");
System.out.println(la);
}
}
可以看见如下输出:
log4j:WARN No appenders could be found for logger (org.springframework.core.env.StandardEnvironment).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
com.scut.action.LoginAction@180e6ac4
在重新启动tomcat 重新struts2测试输入,成功跳转则说明成功了
接下来集成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>
<!-- Database connection settings -->
<!-- 为了避免重复 将这些配置属性注释 这些都将在spring中重新配置
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">*******</property>
<property name="connection.username">****</property>
<property name="connection.password">****</property>
-->
<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- Enable Hibernate's automatic session context management -->
<!-- <property name="current_session_context_class">thread</property> -->
<!-- C3p0 configure -->
<!-- c3p0 pool max connection size -->
<!--
<property name="hibernate.c3p0.max_size">20</property>-->
<!-- c3p0 pool min connection size -->
<!-- <property name="hibernate.c3p0.min_size">1</property>-->
<!-- c3p0 pool connection timeout -->
<!-- <property name="hibernate.c3p0.timeout">500</property>
<property name="hibernate.c3p0.max_statements">100</property>
<property name="hibernate.c3p0.validate">true</property> -->
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">update</property>
<mapping resource="com/scut/pojo/Manager.hbm.xml"/>
</session-factory>
</hibernate-configuration>
更改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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<context:component-scan base-package="com.scut"></context:component-scan>
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="com.mysql.jdbc.Driver" />
<!-- JDBC URL -->
<property name="jdbcUrl" value="******" />
<!-- 数据库用户名 -->
<property name="user" value="***" />
<!-- 数据库密码 -->
<property name="password" value="***" />
<!-- 其他配置 -->
<!--初始化时获取三个连接,取值应在minPoolSize与maxPoolSize之间。Default: 3 -->
<property value="3" name="initialPoolSize" />
<!--连接池中保留的最小连接数。Default: 3 -->
<property value="3" name="minPoolSize" />
<!--连接池中保留的最大连接数。Default: 15 -->
<property value="5" name="maxPoolSize" />
<!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
<property value="3" name="acquireIncrement" />
<!-- 控制数据源内加载的PreparedStatements数量。如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default:0 -->
<property value="8" name="maxStatements" />
<!-- maxStatementsPerConnection定义了连接池内单个连接所拥有的最大缓存statements数。Default: 0 -->
<property value="5" name="maxStatementsPerConnection" />
<!--最大空闲时间,1800秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
<property value="1800" name="maxIdleTime" />
</bean>
<!-- sessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="configLocation" value="classpath:hibernate.cfg.xml" />
<property name="dataSource" ref="dataSource" />
<!-- <property name="mappingResources">
<list>
<value>com/scut/pojo/Manager.hbm.xml</value>
</list>
</property>-->
</bean>
<!-- 配置声明式事务管理(采用注解的方式) -->
<bean id="txManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<tx:annotation-driven transaction-manager="txManager" />
</beans>
增加如下几个类:
package com.scut.dao;
import com.scut.pojo.Manager;
public interface ManagerDao {
public abstract Manager findOneManager(String username, String password);
}
package com.scut.dao.imol;
import javax.annotation.Resource;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import com.scut.dao.ManagerDao;
import com.scut.pojo.Manager;
@Repository
@Transactional
public class ManagerDaoImpl implements ManagerDao {
@Resource
private SessionFactory sf;
public Session getSession() {
return sf.getCurrentSession();
}
@Override
public Manager findOneManager(String username, String password) {
String hql = "from Manager m where m.username = ? "
+ "and m.password = ?" ;
Query query = getSession().createQuery(hql);
query.setParameter(0, username);
query.setParameter(1, password);
Manager manager = (Manager) query.uniqueResult();
return manager;
}
}
package com.scut.service;
import com.scut.pojo.Manager;
public interface ManagerService {
public Manager queryOne(String username,String password);
}
package com.scut.service.impl;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.scut.dao.ManagerDao;
import com.scut.pojo.Manager;
import com.scut.service.ManagerService;
@Service
@Transactional
public class ManagerServiceImpl implements ManagerService {
@Resource
private ManagerDao managerDao;
@Override
public Manager queryOne(String username, String password) {
return managerDao.findOneManager(username, password);
}
}
package com.scut.pojo;
import java.io.Serializable;
public class Manager implements Serializable {
private Integer admin_Id;
private String username;
private String password;
public Manager() {
super();
}
public Manager(Integer admin_Id, String username, String password) {
super();
this.admin_Id = admin_Id;
this.username = username;
this.password = password;
}
public Integer getAdmin_Id() {
return admin_Id;
}
public void setAdmin_Id(Integer admin_Id) {
this.admin_Id = admin_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;
}
@Override
public String toString() {
return "Manager [admin_Id=" + admin_Id + ", username=" + username
+ ", password=" + password + "]";
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.scut.pojo">
<class name="Manager" table="manager">
<id name="admin_Id" column="admin_Id"
type="integer">
<generator class="native"/>
</id>
<property name="username" column="username"
type="string" not-null="true">
</property>
<property name="password" column="password"
type="string" not-null="true">
</property>
</class>
</hibernate-mapping>
最后所有包如下:
最后测试,文笔不好 写到一半不想写了。
请自行看配置文件。
参考博客:
http://blog.csdn.net/chengfangjunmy/article/details/16919077