OA的学习--第一天的内容--环境搭建

    这是我的第一篇OA总结博客,介绍了的是第一天的学习,1集到第10.学习的内容,就是了解什么是OA,以及开始做OA的项目,首先是搭环境,用的开发环境是MyEclipse,数据库是MySQL,框架采用的SSH.搭环境主要做的就是,建立数据库,并将SSH搭建起来,做法是先将struts2,hibernatespringjar包和配置文件都准备好,然后先分别测试这struts2spring单独都是可用的;然后整合,测试也是可用的,并且说明与spring整合的好处.最后,就是将hibernate给整合进来,这样整个SSH就搭起来了.

    其中,OA的了解,什么是OAOA就是办公自动化OfficeAutomation的缩写,利用电脑进行全自动办公,使用这个,可以提高办公的效率.

    然后就是写OA项目,先是搭OA环境,过程就和上面描述的差不多。

建立数据库

    首先,mysql中创建数据库,名为itcast0720.创建的数据库的语句为,并默认设置为utf-8编码,但是数据库中是写utf8,不带"-".

create database itcast0720 default character set utf8;

    查看创建的数据库的是:

show create databaseitcast0720;

    效果就是这样的.


OA项目

    然后是建立MyEclipse项目.MyEclipse中创建web项目,ItcastOA,并且设置编码为utf-8,之后建立的jsp页面也要改为utf-8,用于防止乱码.

JUnit

    然后第一步是将struts2搭起来,而由于由于最开始需要进行单元测试来测试struts是否真的可以用.所以需要添加JUnit,MyEclipse只需要在项目右击BuildPath(构建路径)-->Add Libraries..(添加库)-->JUnit-->JUnit4(因为JUnit4是支持注解的),这样就能使用JUnit.

添加Struts2

    然后添加struts2(struts2的版本是struts-2.1.8.1)需要引入jar包和struts.xmlweb.xml文件.

    jar包的话,可以通过找struts2提供的任意一个示例war,里面的jar就可以符合要求.

    jar包包含:commons-fileupload文件上传下载,commons-io,文件输入输出;freemarker,模板引擎,ognl:struts2默认使用的表达式语言,还有就是必不可以少的核心包:struts2-core,以及xwork-core,struts2是在xwork的基础上开发的.这篇文章说明了struts2】五大核心jar作用,和这个引用的jar略有不同.


    然后在示例的中可以找到web.xml文件,以及src下找到struts.xml.struts.xml拷贝到ItcastOAsrc,web.xml则放在WEB-INF.

    对于web.xml,最开始的时候的配置是这些,这个不用记,只要会拷贝就行.

    其中需要配置了struts2的过滤器,这样/*的配置,表示所有的请求过来,都需要被StrutsPrepareAndExecuteFilter过滤器处理.

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
          http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

	<!-- 配置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>
	
	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
	</welcome-file-list>
	
</web-app>

 

    struts.xml则需要将devMode配置为开发模式,还有将扩展名配置为action,以及将主题配置为simple.而这些配置在struts2-core包的default.properties资源文件中都能找到.然后是一个空的package,可以配置action

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

    <!-- 配置为开发模式 -->
    <constant name="struts.devMode" value="true" />
    <!-- 把扩展名配置为action -->
    <constant name="struts.action.extension" value="action" />
    <!-- 把主题配置为simple -->
     <constant name="struts.ui.theme" value="simple" />
      
    <package name="default" namespace="/" extends="struts-default">
         
     </package>

    <!-- Add packages here -->

</struts>

添加Hibernate

    添加完了struts2,接下来添加Hibernate,过程也是一样,先添加jar,然后添加配置文件hibernate.cfg.xml,以及映射文件*.hbm.xml(若用注解,则不用),顺便拷贝了log4j.properties的资源文件.

   其中Hibernate需要的jar包为:Hibernate的核心包,hibernate3.jar,以及在hibernatelib下的required下的所有jar,包括antlr,commons-collections,dom4j,javassist,jtaslf4j,还有lib下的jpa下的hibernate-jpa,以及lib下的optional下的c3p0数据库连接池,以及mysql的驱动,mysql-connector-java.一共10jar.


    拷完jar之后,拷配置文件,找到将log4j.properties,hibernate.cfg.xml,以及User.hbm.xml(映射文件找到任意一个就可以了)放到src.

    然后开始配置hibernate.cfg.xml文件,hibernate中配置方言为mysql,数据库连接itcastoa0720,用户名和密码为对应的,以及配置显示sql语句,和配置为自动更新表.

<!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="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
	<property name="connection.url">jdbc:mysql://localhost:3306/itcastoa0720</property>
	<property name="connection.driver_class">com.jdbc.mysql.Driver</property>
	<property name="connection.username">root</property>
	<property name="connection.password">123456</property>
	 
	<!-- 其他配置 -->
	<property name="show_sql">true</property>
	<property name="hbm2ddl.auto">update</property>

	<!-- 导入映射文件 -->
	<mapping resource="cn/itcast/oa/domain/User.hbm.xml" />

</session-factory>

</hibernate-configuration>

    hibernate.cfg.xml配置好了,User.hbm.xml先不管,log4j.properties也先不配置.

添加Spring

    最后就是添加spring,还是jar包和配置文件applicationContext.xml

    先是jar包:spring核心包,spring.jar,以及springlib下的aspectj的切面jar,aspectjrtaspectjweaver,以及lib下的动态代理cglib,cglib-nodep,lib下的jakarta-commons的日志commons-logging.一共5jar.


    而配置文件applicationContext.xml,最开始只需要配置一下自动扫描的包,包含他的子包,所以该包以及其子包下的类都会被扫描到,只要在类上写了交由容器管理的注解,就能自动装配成bean.

<?xml version="1.0" encoding="UTF-8"?>
<!--
  - Middle tier application context definition for the image database.
  -->
<beans xmlns="http://www.springframework.org/schema/beans"
		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		xmlns:context="http://www.springframework.org/schema/context"
		xmlns:tx="http://www.springframework.org/schema/tx"
		xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
				http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
				http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
	  
	  <!-- 自动扫描与装配bean -->
	   <context:component-scan base-package="cn.itcast.oa"></context:component-scan>
   
   </beans>

测试struts2可用

    测试struts2可用,因为测试struts2,需要启动tomcat,让请求经过过滤器的过滤.所以建立Action,TestAction,继承ActionSupport,写上执行方法,返回"success"字符串.

package cn.itcast.oa.test;

import com.opensymphony.xwork2.ActionSupport;

public class TestAction extends  ActionSupport {
	
	@Override
	public String execute() throws Exception {
		System.out.println("-->TestAction:execute()");
		return "success";
	}
}

    然后建立一个test.jsp页面,在里面写上一句"struts2添加成功!".

    然后,配置struts.xml文件,添加一个action,写上nametest,写全类名,因为没有整合spring.然后接收到resultsuccess,会跳转到test.jsp页面上.就可以看到"struts2添加成功!".

 <package name="default" namespace="/" extends="struts-default">
               
       	<!-- 配置测试用的Action(未与spring整合,class属性写类的全名) -->
       	<action name="test" class="cn.itcast.oa.test.TestAction" > 
       		<result name="success">/test.jsp</result>
       	</action>	
          	
    </package>

    最后,配置好Tomcat,启动测试.效果如下图.路径写的test.action,经过了容器的过滤器,struts.xmlaction配置中找到了TestAction,执行了方法,返回了"success",action又接收了result,跳转到了test.jsp页面.所以测试struts2是可用的.


测试Spring可用

    测试Spring的效果就不用启动tomcat.可以写一个测试类SpringTest,测试spring是否可用.spring需要读取他自己的配置文件applicationContext.xml,扫描包.将他们声明为bean,然后可以使用.

public class SpringTest {

	private ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
	@Test
	public void testBean() throws Exception {
		TestAction testAction =(TestAction) ac.getBean("testAction");
		System.out.println(testAction);
	}
}

    在这段代码中将刚刚的testAction,放到容器中,然后就可以拿到,但是需要将TestAction写上注解,表示要把他放到容器中,交由容器管理,然后才可以拿到.

@Controller
public class TestAction extends  ActionSupport {
}

    其中,4个注解的作用都是声明一个bean.@Controller,@Component,@Service@Repository.他们可以写成@Controller("testAction")这种,不写默认也是这种类名首字母小写的.

    最后效果是这样的.打印了该类出来,说明通过ac拿到了该对象,Spring也是可用的.


整合Struts2Spring

    现在证明这两个都是可用的了,可以将他们整合了.整合的步骤为2,在(struts的)web.xml中配置Spring的监听器,这样在web容器启动的时候,就会自动装配ApplicationContext的配置信息,就可以将bean放到spring容器中了.以及要加一个springstruts整合的插件jar.

    web.xml文件中,加上这一段.需要配置listener-class,以及在配置context-param,这种参数是存放在servletcontext,范围是application.样配置完了,就会加载根目录下的applicationContext*.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>

    jar包是在strutslib,struts2-spring-plugin,这个插件包就是将springstruts2整合的.


    然后测试效果,不要忘了,testclass改为testAction,这个就是在spring容器中的TestActionbeanName.

<!-- 配置测试用的Action(未与spring整合,class属性写类的全名) -->
<!--  <action name="test" class="cn.itcast.oa.test.TestAction" > -->
<!-- 当struts和spring整合后,class属性可以写bean的名称 -->
<action name="test" class="testAction" >
	<result name="success">/test.jsp</result>
</action>

    这样Springstruts就整合完毕了.test.jsp,再添加一句"struts2spring整合成功!".

    启动tomcat之后,效果为下图,说明整合成功了.因为通过testAction,找到TestAction,就能说明Spring成功了.


    为什么要整合SpringStruts.因为Spring提供IoC,依赖注入可以用来管理对象,就不用自己new,Spring就可以注入了.还有AOP,面向切面编程,可以管理事务和日志.这样,结合之后,struts就能更好的做自己的事情.

    HibernateSpring整合,就可以让容器管理单例的SessionFactory,并且让Spring来管理事务,就不用管事务的开关和commit和回滚了.

SpringHibernate整合

    Springhibernate整合,就需要配置比较多的东西了。需要在spring的配置文件applicationContext.xml中配置sessionFactory.并且在sessionFactory中配置了数据源,而原本配置Hibernate中的数据源,则注释掉.

    applicationContext.xml添加如下配置.其中因为数据源配置,导入了外部的properties资源文件.并且配置了configLocation会去找hiberante.cfg.xml.而数据源的配置,加了很多优化性能的配置(这个我还不会,只会拷贝).

<!--  导入外部的properties文件  -->
<context:property-placeholder location="classpath:jdbc.properties" />

<!-- 配置SessionFactory -->
<bean id="sessionFactory"
	class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
	<!-- 指定hibernate的配置文件位置 -->
	<property name="configLocation"
		value="classpath:hibernate.cfg.xml">
	</property>
	<!-- 配置c3p0数据库连接池 -->
	<property name="dataSource">
		<bean class="com.mchange.v2.c3p0.ComboPooledDataSource">
			<!-- 数据库连接信息 -->
			<property name="jdbcUrl" value="${jdbcUrl}"></property>
			<property name="driverClass" value="${driverClass}"></property>
			<property name="user" value="${user}"></property>
			<property name="password" value="${password}"></property>

			<!-- 其他配置 -->
			<!-- 初始化时获取三个连接,取值应在minPoolSize和maxPollSze之间.Default:3 -->
			<property name="initialPoolSize" value="3"></property>
			<!-- 连接池中保留的最小的连接数.Default:3 -->
			<property name="minPoolSize" value="3"></property>
			<!-- 连接池中保留的最小的连接数.Default:15 -->
			<property name="maxPoolSize" value="15"></property>
			<!-- 当l连接池中的连接耗尽的时候c3p0一次同时获取的连接数.Default:3  -->
			<property name="acquireIncrement" value="3"></property>
			<!-- 控制数据源内加载的PreparedStatements数量.如果maxStatements与maxStatementPerConnection均为0.则缓存被关闭.Default:0 -->
			<property name="maxStatements" value="8"></property>
			<!-- maxStatementsPerConnection定义了连接池内单个连接所拥有的最大缓存statements数.Default:0 -->
			<property name="maxStatementsPerConnection" value="5"></property>
			<!-- 最大空闲时间,1800秒内未使用则连接被丢弃.若为0,则永不丢弃.Default:0 -->
			<property name="maxIdleTime" value="1800"></property>

		</bean>
	</property>
</bean>

    而且为了数据源为了更好配置,采用了资源文件配置.建立了数据库配置的资源文件,jdbc.properties.


    这样就配置好了SessionFactory,测试是否可用.SpringTest的测试类中,再加一个方法,只要注入了sessionFactory,就是配置好了sessionFactory.

@Test
public void testSessionFactory() throws Exception {
	SessionFactory sessionFactory = (SessionFactory) ac.getBean("sessionFactory");
	System.out.println(sessionFactory);
}        
    然后继续配置事务 , applicationContext .xml 添加最后一段代码 , 配置声明式事务管理 , 并且是采用注解的 .

<!--  配置声明式事务管理(采用注解的方式) -->
<bean id="txManager"
	class="org.springframework.orm.hibernate3.HibernateTransactionManager">
	<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<tx:annotation-driven transaction-manager="txManager" />

    最后测试事务,如何测试.就是往数据库中写入2条记录,若是一条有效一条无效时,因为事务,回滚,不写入记录;若是2条有效时,才写入2条记录.所以要写入数据库中,要建立实体.并且要写一个Service方法,在里面写上保存2条记录的方法.

    先建立最简单的实体User和写他的映射文件.

public class User {
	
	private Long id;
	private String name;
	 
            public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
    }

    User.hbm.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 package="cn.itcast.oa.domain">
 	<class name="User" table="itcast_user">
 		<id name="id">
 			<generator class="native"></generator>
 		</id>
 		
 		<property name="name"></property>
 	</class>	
 </hibernate-mapping>

    最后在hibernate.cfg.xml将映射文件,添加进去,其实我在上面已经写好了.

<mappingresource="cn/itcast/oa/domain/User.hbm.xml" />

    接着是写TestService,@Service表示放到容器中,并且注入sessionFactory,获取到当前的session,session来保存对象,其中添加一句int a=1/0,0的会抛异常的代码,开了事务之后,抛异常就会回滚,不能写入数据库中.

@Service
public class TestService {

	@Resource
	private SessionFactory sessionFactory;
	
	@Transactional
	public void saveTwoUsers() {
		Session session = sessionFactory.getCurrentSession();
		session.save(new User());
		
                      //int a= 1/0;
		session.save(new User());
	}
}

    最后SpringTest的测试事务的方法,从容器中获取TestService对象,并执行他的saveTwoUsers的方法.(若不明白为什么做上面的操作,从这往上看可能更好懂)

@Test
public void testTransaction() throws Exception {
	TestService testService = (TestService) ac.getBean("testService");
	testService.saveTwoUsers();
}

    最后效果,表明事务成功.其中1不在就是因为保存1的时候是成功了的,但是因为异常导致回滚,没有写入数据库中.所以1被占掉了,下次成功的2,3就进入了数据库中了.


SSH整合

    其实上面已经说明整合好了,因为Spring和Hibernate已经整合的,可以写入数据库中了.但是还是在进行一次大整合.TestAction,调用testService的saveTwoUsers方法,若能写入数据,就表示SSH整合完成了

@Controller
public class TestAction extends  ActionSupport {

	@Resource
	private TestService testService;
	
	@Override
	public String execute() throws Exception {
		System.out.println("-->TestAction:execute()");
		testService.saveTwoUsers();
		return "success";
	}
}
     test .jsp 写上 , " struts2 spring hibernate 整合成功! ".

    最后效果,显示SSH整合成功,并且数据插入数据库了.


将资源文件进行分类

    建立源文件test,将所有的测试类放入;建立源文件config,将所有的配置文件放入;将实体和映射文件放到domain包中;Service的接口放到service包中,Service的实现放到serviceimpl;action放到view;还有daodaoimpl以及util的工具类.


    还有在WebRoot中建立script,style文件夹,并且将images也放到style文件中,图片也是一种样式,将所有的js脚本文件放到script,将所有样式css和图片都放到style文件中.jsp放在WEB-INF下的jsp文件夹中,这样外面不通过Action转发就无法直接访问jsp.jsp文件夹中每个Action就建立一个文件夹.


    这样就可以将文件更有条理的管理好了.

    以上就是OA第一集到第10集的内容.不整理不知道,一整理吓一跳,这也太多了,我是不是应该删减点.不过相信有了这篇文章,我以后建立SSH框架,应该是分分钟的事吧.缺点就是太多,太啰嗦了.

    所以总结一下:里面的知识点就是,搭建SSH框架,需要导入struts2,spring,hibernate各自的jar,以及他们的配置文件.


    以及他们的测试:测试stuts需要启动tomcat(服务器);测试spring用可以applicationContext中根据beanName获取到bean,所以不用启动tomcat;测试hibernate需要将数据写入数据库中;测试事务,需要写入数据库中,做2次,有问题就回滚,没问题就都写入数据库中。

    以上是我第一天的学习总结,内容有些长,不过,相信之后的总结,会短些的。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
校企工作室OA源码 源码描述: 主要模块及系统管理功能说明: 一、考勤功能模块: 考勤分成三个功能,显示签到功能,查询功能,管理功能。 1.签到功能分析:在签到功能中,我们分4个时间段进行设计,上午上课时间签到,上午下课时间签到,下午上课时间签到,下午下课时间签到(四个时间段时间由管理员自己设置,签到的时间只能在设置时间的前后一个小时,这样设计更加的人性化,防止别人没来的及签到,和早到想签到的情况)而且在签到功能签到后,在功能的下方会显示你的签到情况,和你最近一个星期的签到详细记录。 2.查询功能分析:在查询功能中,我们设置了一些查询的时间段,组名,姓名 还有是否缺勤等功能功能,教师可以在查询人员信息的时候,根据时间段,组名,姓名是否缺勤等来查询自己想要的结果,点击进入查询功能默认是查询全部 3.管理功能分析:在管理功能中,我们根据登陆角色的不同,给予不同的权限,就是不同的管理功能,在功能设计中,我们设置了组名框、姓名框。选择相应的组名,姓名框中都会显示该组的人员姓名,当用户点击查询时,管理功能的下面的详细页面会显示查询的姓名\ 账户\ 签到情况 \ 备注情况 \ 编辑 \ 是否缺勤。 二、项目管理功能模块: 项目管理分析功能分为、新增项目功能、 我的项目功能、 项目查询功能、项目修改功能 1. 新增项目功能分析: 该功能仅限老师可以使用,老师可以在其中添加项目名称,规定项目的开发开始时间,项目开发结束时间,项目的负责人,项目的成员,项目的测评人,项目简介,附件,测评报告,是否完成状态 2. 我的项目功能分析: 在该功能中显示的是已完成的项目,和正在进行的项目。 3. 已完成功能介绍: 在这其中查询为默认查询,还有时间段的查询来,查看相关的项目 ,还有项目的闲情和这个项目进行时相关人员的日志。 4. 正在进行的项目功能介绍: 该功能默认进去时显示所有的进行中的所有项目,然后后面有项目的闲情,点击进去会显示详细的项目所有信息,下面附属这组员开发期间提交的日志信息,还有筛选功能,可以筛选自己的想要的看的日志(最新上传的日志在最上面),最下面是一个提交日志的按钮! 5. 项目查询功能分析: 在查询功能中,可以根据项目的时间,名称 ,已完成,未完成的情况来查询项目修改功能分析:该功能仅限老师,但是就算是老师,项目的名称也是不能修改的,其他的功能都是可以修改的,在这个功能的下端,有一个提交项目测评报告的按钮! 6. 项目归档功能分析 该功能可以上传完成项目文件和查询管理所有归档项目 三、站内线功能模块: 1. 建立内部的通信平台 建立单位内部的消息中心,使单位内部的通信和信息交流快捷通畅。 2. 信息发布功能分析: 该功能具备群发功能。可以实现对多人或者个人进行发送信息,当学员登陆该系统的时候,就能在第一时间收到老师对其发送的任务信息! 3. 信息收件箱功能分析: 该功能里面可以看到所有收到的信息 ,并且对其进行删除和修改。 4. 信息已发送功能分析: 该功能可以看到所有已发送的信息功能,并且可以对其进行删除 5. 信息回收站功能分析 该功能里面看到的是所有已删除的信息,在此功能删除信息就等于真正删除了所选的信息,这样设置防止了人员的失误操作,使系统更加的人性化,高效率的操作。 四、系统公告管理模块: 1.公告发布功能分析:在这个功能中可以填写发布的公告,然后造系统的前台就可以看到发布的内容 2. 公告管理功能分析:在这个功能中可以对发布的公告进行增、删、改、查。 五、系统管理模块: 在系统管理模块中分为角色管理、用户管理、考勤设置。 1. 角色管理功能分析:角色管理功能可以给不同的用户分配不同的角色这样,可以让不同的用户拥有不同的权限功能。 2. 用户管理功能分析:用户管理模块,可以对不同的用户进行管理。 3. 考勤管理功能分析:考勤设置功能可以对考勤的时间进行设置管理 六、个人管理模块: 该功能里面分为密码修改和个人信息管理功能,可以实现用户对自己密码和个信息的修改。 默认登录名密码均为51aspx

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值