SSI框架的搭建

1struts2框架配置文件

struts2的配置以struts.xml为主要配置文件,该文件配置了URLjava类之间的对应关系,struts支持多个配置文件并存,所以某个模块的配置文件可以新建一个struts-模块名.xml,并在此文件中进行配置。

1.1.png

  1.1

1.1 action的配置

如图1.1所示,该包下继承来自struts的默认配置文件。action节点的nameURL前缀名是相对应的。例如:

index.jsp中的index对应于

请注意:这里是严格区分大小写的

class是指定由哪个类来进行处理;method是指调用了该类的哪个方法,如果不写,则自动调用execute()方法;result则配置了执行方法后如何跳转,struts2已经内置了5种跳转方式:SUCCESSERRORINPUTNONELOGIN分别对应resultname属性为successerrorinputnonelogin的情况  如果想自定义返回名,只需要返回的字符串和这里的name属性相对应就可以了,如果不配置name属性默认为successresulttype属性规定了跳转方式,一般项目使用两种dipatcherchaindispatcher主要负责跳转jspchain主要负责跳转action

1.2验证框架

在需要验证的action类的同一级目录增加校验文件,命名规范:类名-请求名-validation.xml,如图1.2所示:

 

1.2

图中演示了如何通过配置来增加表单的非空校验。

1.3 struts2国际化

国际化配置文件在 src/main/resource/messageResource*.properties

命名规范:baseName_语言代码_国家代码.properties

Struts.xml中配置了baseNamemessageResource

中文配置文件为messageResource_zh_CN.properties

英文配置文件为messageResource_en_US.properties

默认配置文件为messageResource.properties(当找不到对应语言配置文件或者在配置文件中找不到对应的key时,到此文件中找)

1、页面中使用国际化

<s:text name="loginPage"/>

2action中使用国际化

getText(loginPage);

3、国际化的动态传参

getText(loginPage,new String[]{“烽火星空”}); 

动态传参需要先创建一个string数组,把这个数组作为参数传给getText方法,国际化配置文件中

loginPage = {0},您好!

程序会把{0}替换成数组中下标为0的字符串,{1}会获取数组中下标为1的字符串,以此类推。

 

2struts2+spring框架配置文件

2.1spring框架的配置

       web.xml中配置以下代码,在项目启动时,就可将src目录下以applicationContext开头的spring配置文件加载进来。

<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>

applicationContext.xml负责系统级配置

applicationContext-aciton.xml负责struts2中的action层配置

applicationContext-service.xml负责具体逻辑层配置

applicationContext-dao.xml负责数据库连接层配置

如图2.1所示

2.1

applicationContext-action.xml配置文件中配置action层,同时引用service层,一个bean包含一个action文件,其id将在struts.xml文件中被引用。

在单独struts2框架里面我们的action文件代码如下:

    <action name="login" class="com.fh.test.pojo.LoginAction" method="checkUser">

        <result name="success">/welcome.jsp</result>

        <result name="input">/index.jsp</result>

    </action>

login所对应的classAction

而在struts2spring整合里面,代码如下:

<action name="login" class="loginAction">

    <result name="success">/welcome.jsp</result>

    <result name="input">/index.jsp</result>

</action>

这里面的class代码的loginActionapplicationContext-action.xml中的同名bean,如下所示:

<bean name="loginAction" class="com.fh.test.action.LoginAction" scope="prototype">

    <property name="loginService" ref="loginService"/>

</bean>

在上面这段代码中将loginActioncom.fh.test.action.LoginAction类对应了起来,其中的子property元素自动填充名为loginService的属性,即构造逻辑层的实例。

注意:springIOCInversion of Control)特性,是调用了属性的set方法

ref="loginService"这里调用了名为loginServicebean,该bean是属于逻辑层代码,所以配置在applicationContext-service.xml中,如下:

<bean id="loginService" class="com.fh.test.service.impl.LoginService">

    <property name="loginDAO" ref="loginDAOImpl"/>

</bean>

同样该逻辑层的bean自动填充dao层的实例,引入名为loginDAOImplbean,该bean配置在applicationContext-dao.xml中,如下:

<bean id="loginDAOImpl" class="com.fh.test.dao.impl.LoginDAO"/>

经过这一系列的配置,便完成了action类的调用。

3spring+iBATIS框架配置文件

3.1数据源的配置

配置iBATIS数据源和第三方proxool连接池

利用spring读取配置文件,并利用配置文件的信息初始化连接池

如下:

<bean id="propertyConfigurer"

    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

    <property name="location">

        <value>classpath:jdbc.properties</value>

    </property>

</bean>

value元素中所指是读取src下的jdbc.properties配置文件。

<bean id="dataSource"

        class="org.logicalcobwebs.proxool.ProxoolDataSource"

        destroy-method="close">

        <property name="driver">

            <value>${jdbc.driver}</value>

        </property>

        <!-- sqlServer需要添加的字段 -->

        <property name="delegateProperties">

            <value>user=${jdbc.username},password=${jdbc.password}</value>

        </property>

        <property name="driverUrl">

            <value>${jdbc.url}</value>

        </property>

        <property name="user">

            <value>${jdbc.username}</value>

        </property>

        <property name="password">

            <value>${jdbc.password}</value>

        </property>

        <property name="alias">

            <value>${jdbc.alias}</value>

        </property>

        <property name="houseKeepingSleepTime">

            <value>${jdbc.houseKeepingSleepTime}</value>

        </property>

        <property name="prototypeCount">

            <value>${jdbc.prototypeCount}</value>

        </property>

        <property name="maximumConnectionCount">

            <value>${jdbc.maximumConnectionCount}</value>

        </property>

        <property name="minimumConnectionCount">

            <value>${jdbc.minimumConnectionCount}</value>

        </property>

    </bean>

如上即是利用${}来读取配置文件中的配置项,从而对proxool连接池进行初始化。

<bean id="client" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">

        <property name="configLocation">

            <value>classpath:SqlMapConfig.xml</value>

        </property>

        <property name="mappingLocations">

            <value>classpath:sqlmap/sqlserver/*.xml</value>

        </property>

        <property name="dataSource">

            <ref bean="dataSource" />

        </property>

    </bean>

如上所示,利用spring自带的iBATIS工厂类进行实例化,构造名为clientbean,该构造中指定了SqlMapConfig.xmliBATIS配置文件,sqlmap/sqlserver下所有的xml文件为sql配置文件。数据源即是之前配置的proxool连接池。

3.2别名的使用

sqlMapConfig.xml中配置了<sqlMap resource="common.xml"/>,即引用了common.xml文件,,在这个文件中定义别名和类的全限定名之间的映射关系,如下:

<typeAlias alias="User" type="com.fh.test.pojo.User" />

    使用这个配置后,在sql配置文件中传参和出参就只需要写别名就行了,简化了开发

3.3sql配置文件

3.1

src /sqlmap目录下对应了各数据库的文件夹,每个文件夹下都是按模块划分的配置文件,新增一个模块时只需要在对应数据库的文件夹下新建一个配置文件,以模块名命名。

<sqlMap namespace="login">

    <select id="getUser" parameterClass="java.lang.String"

        resultClass="User">

        SELECT PerAdd AS perAdd,

        Posi_Name AS posiName,

        Emp_Field AS empField,

        PerName AS perName,

        Telphone AS telephone,

        IMSI,

        Password AS password,

        User_Group AS userGroup

        FROM   Login_Check

        WHERE  PerAdd = #userID#

    </select>

</sqlMap>

id定义了这条语句的唯一标示符,parameterClass定义了传入的类型,这里使用的是java的基本类-字符串类。resultClass定义了返回类型,这里使用了别名,具体对应的类在common.xml中查询。这里有一个动态参数#userID#,即是传入的字符串对象,方法会把查询出的结果封装成对象返回,在方法调用处接收即可。

3.4使用iBATIS进行对象的持久化

spring中的applicationContext-dao.xml配置如下图:

<bean id="baseDAO" abstract="true" class="com.fh.test.dao.impl.BaseDAO">

     <property name="client" ref="client"/>

</bean>

<bean id="loginDAOImpl" class="com.fh.test.dao.impl.LoginDAO" parent="baseDAO"/>

使用名为baseDAObeanapplicationContext.xml中配置的client填充进去,并加上abstract="true"使其不能直接实例化,而是作为所有dao的父类,在其它daobean上加上parent="baseDAO"

在原有dao的类中要继承baseDAO,利用client实例调用相应的sql语句,并将结果自动构造成User类的对象

user = (User)this.getClient().queryForObject("login.getUser",username);

login.getUser是指命名空间为loginidgetUser的配置信息。

你可能感兴趣的:(spring,ibatis,sturts)