SSH项目搭建总结,各层作用

得过段时间巩固巩固java啦。都是技术哈不能忘
1项目框架搭建总结:
    1、建立Web工程
       * 导入需要的jar的包
         db:连接数据库的驱动包
         hibernate:使用hibernate的jar包
         jstl:java的标准标签库
         junit:测试用到的jar包
         spring:使用spring的jar包
         struts2:使用struts2的jar包
       * 项目体系分层:
         cn.itcast.elec.containner:自定义的spring容器,用于在控制层调用操作业务层
         cn.itcast.elec.dao:项目的dao层,负责连接数据库的操作
         cn.itcast.elec.daomain:封装实体对象(PO对象),对应连接数据库表的映射文件
         cn.itcast.elec.service:项目service层,负责操作各个功能模块的业务逻辑
         cn.itcast.elec.util:封装系统使用到的公用类的方法和属性
         cn.itcast.elec.web.action:系统控制层,负责页面和项目后台的跳转
         cn.itcast.elec.web.form:封装值对象(VO对象),对应页面传递的表单值的属性
         junit:测试类
         
       * 配置文件
          放置到src的目录下:
         beans.xml:spring的配置文件
         hibernate.cfg.xml:hibernate的配置文件
         struts.xml:struts2的配置文件  
    2、建立持久层
       * 在cn.itcast.elec.domain中创建持久层的对象ElecText.java
        public class ElecText implements java.io.Serializable {
private String textID;
private String textName;
private Date textDate;
private String textRemark;
}
  * 对应javabean的PO对象,创建于表的映射文件ElecText.hbm.xml文件
       <hibernate-mapping>
<class name="cn.itcast.elec.domain.ElecText" table="Elec_Text">
<id name="textID" type="string">
<column name="textID" sql-type="varchar(50)" not-null="true"/>
<generator class="uuid"/>
</id>
<property name="textName" type="string">
<column name="textName" sql-type="varchar(50)"/>
</property>
<property name="textDate" type="date">
<column name="textDate" length="50"/>
</property>
<property name="textRemark" type="string">
<column name="textRemark" sql-type="varchar(500)"/>
</property>
</class>
</hibernate-mapping>
  * 创建连接数据库的hibernate配置文件,hibernate.cfg.xml文件,放置到src目录下
       <hibernate-configuration>
<session-factory>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/itcast1222elec</property>
<property name="hibernate.connection.autocommit">true</property>

<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<property name="hibernate.show_sql">true</property>

<mapping resource="cn/itcast/elec/domain/ElecText.hbm.xml"/>
</session-factory>
</hibernate-configuration>
3、DAO层的搭建
  * 在cn.itcast.elec.dao目录下,创建ICommonDao的接口
       public interface ICommonDao<T> {
public void save(T entity);
}
  * 在cn.itcast.elec.dao目录下,创建对ICommonDao的接口的实现类CommonDaoImpl
       public class CommonDaoImpl<T> extends HibernateDaoSupport implements ICommonDao<T> {
                public void save(T entity) {
this.getHibernateTemplate().save(entity);
}
@Resource(name="sessionFactory")
public final void setSessionFactoryDi(SessionFactory sessionFactory) {
super.setSessionFactory(sessionFactory);
}
}
  * 在cn.itcast.elec.dao.impl目录下,创建IelecTextDao的接口
       public interface IElecTextDao extends ICommonDao<ElecText> {
public final static String SERVICE_NAME = "cn.itcast.elec.dao.impl.ElecTextDaoImpl";
}
  * 在cn.itcast.elec.dao.impl目录下,创建IelecTextDao接口的实现类ElecTextDaoImpl
       @Repository(IElecTextDao.SERVICE_NAME)
public class ElecTextDaoImpl extends CommonDaoImpl<ElecText> implements IElecTextDao {

}
  * 配置spring的配置文件beans.xml文件
       <!-- 1:配置注解的自动扫描的范围 -->
<context:component-scan base-package="cn.itcast.elec"></context:component-scan>
<!-- 2:配置数据源 -->

<!-- 3:创建sessionFactory,这是spring整合hibernate的入口 -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation">
<value>
classpath:hibernate.cfg.xml
</value>
</property>
</bean>
<!-- 4:创建事务管理器 -->
<bean id="txManage" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!-- 5:以注解的形式管理事务 -->
<tx:annotation-driven transaction-manager="txManage"/>

</beans>
4、建立Service层
  * 在cn.itcast.elec.service目录下,创建IElecTextService的接口
       public interface IElecTextService {
public final static String SERVICE_NAME = "cn.itcast.elec.service.impl.ElecTextServiceImpl";
public void saveElecText(ElecText elecText);
}
  * 在cn.itcast.elec.service.impl目录下,创建IElecTextService接口的实现类ElecTextServiceImpl
       @Transactional(readOnly=true)
@Service(IElecTextService.SERVICE_NAME)
public class ElecTextServiceImpl implements IElecTextService {

@Resource(name=IElecTextDao.SERVICE_NAME)
private IElecTextDao elecTextDao;

@Transactional(isolation=Isolation.DEFAULT,propagation=Propagation.REQUIRED,readOnly=false)
public void saveElecText(ElecText elecText){
elecTextDao.save(elecText);
}
}
5、建立控制(Action)层
  * 导入系统需要的css、script、images的包
     以及需要的jsp的包menu(系统登录、首页显示的jsp页面)、system(系统管理中的功能页面)
  * 在cn.itcast.elec.web.action创建ElecTextAction
       @SuppressWarnings("serial")
public class ElecTextAction extends BaseAction implements ModelDriven<ElecTextForm>{

private IElecTextService elecTextService = (IElecTextService)ServiceProvider.getService(IElecTextService.SERVICE_NAME);

private ElecTextForm elecTextForm = new ElecTextForm();

public ElecTextForm getModel() {
return elecTextForm;
}

public String save(){
ElecText elecText = new ElecText();
elecText.setTextName(elecTextForm.getTextName());//测试名称
elecText.setTextDate(StringHelper.stringConvertDate(elecTextForm.getTextDate()));//测试日期
elecText.setTextRemark(elecTextForm.getTextRemark());//测试备注
elecTextService.saveElecText(elecText);
return "save";
}
}
  * 在cn.itcast.elec.web.form创建ElecTextForm(值对象)
       public class ElecTextForm implements java.io.Serializable {
private String textID;
private String textName;
private String textDate;
private String textRemark;
}
  * 在cn.itcast.elec.web.action创建BaseAction类
       @SuppressWarnings("serial")
public class BaseAction extends ActionSupport implements ServletRequestAware,ServletResponseAware {
   @SuppressWarnings("unused")
protected HttpServletRequest request = null;
@SuppressWarnings("unused")
protected HttpServletResponse response = null;
   public void setServletRequest(HttpServletRequest request) {
this.request = request;
}
public void setServletResponse(HttpServletResponse response) {
this.response = response;
}
}
  * 自定义spring的容器
       * 在cn.itcast.elec.container包下,建立ServiceProviderCord类
           public class ServiceProviderCord {
protected static ApplicationContext ac;
public static void load(String filename){
ac = new ClassPathXmlApplicationContext(filename);
}
}
* 在cn.itcast.elec.container包下,建立ServiceProvider类
   public class ServiceProvider {
public static ServiceProviderCord spc;
static{
spc = new ServiceProviderCord();
spc.load("beans.xml");
}
public static Object getService(String serviceName){
if(StringUtils.isBlank(serviceName)){
throw new RuntimeException("当前服务名称不存在");
}
Object object = null;
if(spc.ac.containsBean(serviceName)){
object = spc.ac.getBean(serviceName);
}
if(object==null){
throw new RuntimeException("当前服务名称【"+serviceName+"】下的服务节点不存在");
}
return object;
}
}
* 建立struts的配置,放置到src的目录下
  <struts>
<!-- 配置action的访问路径为.do的形式 -->
<constant name="struts.action.extension" value="do"></constant>
<!-- 配置struts的开发模式 -->
<constant name="struts.devMode" value="true"></constant>
<!-- 配置struts的简单模式 -->
<constant name="struts.ui.theme" value="simple"></constant>
<package name="system" namespace="/system" extends="struts-default">
<action name="elecTextAction_*" class="cn.itcast.elec.web.action.ElecTextAction" method="{1}">
<result name="save">
/system/textAdd.jsp
</result>
</action>
</package>
</struts>
同时在web.xml中添加struts的过滤器
 <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>

         
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值