spring+hibernate3+struts2整合完整配置

来源:互联网 发布:淘宝可以卖otc药品吗 编辑:程序博客网 时间:2024/05/22 03:45

1.新建Web Project,取名为MapgisEgov.Test
2.Build Path-->Libraries中添加Jars、JRE System Library[jdk]、EAR libraries、Web App libraries、Apache Tomcat
3.Java EE Module Dependencies中勾选Jars,项目部署时会将Jars集成至WEB-INF/classes文件夹
4.在WebContent/下新建一个jsp文件NewTest.jsp
在Java Resources:src包下新建包com.mapgis.test包,在此包下面新建类NewTestAction.java,注意action和jsp命名方式。
5.在Java Resources:src包下新建配置文件:log4j.properties配置如下:
log4j.rootCategory=INFO, stdout , R
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[QC] %p [%t] %C.%M(%L) | %m%n
#
log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.File=${webApp.root}/WEB-INF/logs/mapgisegov.log
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d-[TS] %p %t %c - %m%n
log4j.appender.R.Encoding=UTF-8
#
log4j.logger.com.opensymphony=ERROR
log4j.logger.org.springframework=WARN
log4j.logger.org.apache.commons=ERROR
log4j.logger.org.apache.struts=WARN
log4j.logger.org.apache.velocity=FATAL
#
log4j.logger.org.hibernate=ERROR
log4j.logger.org.hibernate.SQL=DEBUG
log4j.logger.org.hibernate.tool.hbm2ddl=ERROR
log4j.logger.org.hibernate.type=info
log4j.logger.org.hibernate.hql=info
#
6.配置web.xml文件,详解如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4"
    xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    <!-- display-name元素提供GUI工具可能会用来标记这个特定的web应用的一个名称 -->
    <display-name>MapgisEgov.Test</display-name>
    <!-- 指定欢迎页面 -->
    <welcome-file-list>
        <welcome-file>NewTest.jsp</welcome-file>
    </welcome-file-list>

    <!--
        MVC框架需要 Web应用加载一个核心控制器,对于Struts2框架而言,需要加载FilterDispatcher
        只要Web应用负责加载FilterDispatcher,FilterDispatcher将会加载应用的Struts框架。 因为Struts2
        将核心控制器设计成Filter,而不是一个普通的Servlet。故为了让Web应用加载FIlterDispatcher,
        只需在Web.xml文件中配置FilterDispatcher即可。配置FilterDispatcher的代码如下:
    -->
    <!--
        过滤器元素将一个名字与一个实现javax.servlet.Filter接口的类相关联,
        一旦命名了一个过滤器,就要利用filter-mapping元素把它与一个或者多个servlet或JSP页面相关联
    -->
    <!-- 配置Struts2框架的核心Filter -->
    <filter>
        <!-- 配置Struts2核心Filter名字 -->
        <!-- 配置Struts2核心实现类 -->
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
        <!-- 配置Struts2框架默认加载的Action包结构 -->
        <!--
            <init-param> <param-name>actionPackages</param-name>
            <param-value>org.apache.struts2.showcase.person</param-value>
            </init-param>
        -->
        <!-- 配置Struts2框架配置提供者 -->
        <!--
            <init-param> <param-name>configProviders</param-name>
            <param-value></param-value> </init-param>
        -->

    </filter>
    <!--
        正如上面看到的,当配置Struts2的FilterDispatcher类时,可以指定一系列的初始化参数,为
        该Filter配置初始化参数时,其中有3个初始化参数有意义。
        1:config:该参数的值是一个以英文逗号(,)隔开的字符串,每个字符串都是一个XML配置文件的位置。Struts2框架将扫描这些包空间下的Action类
        2:actionPackages:该参数的值也是一个以英文逗号(,)隔开的字符串,每个字符串都是一个包空间,Struts2将扫描这些包空间下的Action类
        3:configProviders:如果用户需要实现自己的ConfigurationProvider类,用户可以提供一个或者多个实现了ConfigurationProvider接口类,
        然后将这些类的类名设置成该属性值,多个类名之间以英文(,)隔开。
        除此之外,还可以在此处配置Struts2常量,每个<init-param>元素配置一个Struts2常量,其中<param-name>元素指定常量name,而<param-value>子元素指定了常量value。
    -->
    <!--
        在web.xml文件中配置了该Filter,还需要配置该Filter拦截的URL。通常,我们让该FIlter拦截所有的用户请求,因此使用通配符来配置该Filter拦截器的URL,
        下面是该Filter拦截URL的配置
    -->

    <!-- 配置Filter拦截的URL -->
    <filter-mapping>
        <!-- 配置Struts2的核心FilterDispatcher拦截所有用户请求 -->
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <!-- 处理中文乱码的过滤器配置-->
    <filter>
        <!-- spring编辑过滤器 -->
        <filter-name>encodingFilter</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>
    <!--  过滤器的匹配 URL -->
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>


    <!-- 配置监听器 -->
    <!-- WebAppRootListener监听器配置 -->
    <!--
        说明:Spring在org.springframework.web.util 包中提供了几个特殊用途的 Servlet
        监听器,正确的使用它们可以完成一些特殊功能的需求。 比如某些第三方工具支持通过 ${key} 的方式引用系统参数(即可以通过
        System.getProperty() 获取的属性,WebAppRootListener可以将
        web应用根目录添加到系统参数中,对应的属性名可以通过名为“webAppRootKey”的Servlet上下文参数指定,默认为“webapp.root”。下面是具体配置
    -->

    <context-param>
        <param-name>webAppRootKey</param-name>
        <param-value>webApp.root</param-value>
    </context-param>

    <!-- 负责将Web应用根目录以WebAppRootKey上下文参数指定的属性名添加到系统参数中 -->

    <!--
        通过以上对webAppRootKey配置,就可以在程序中通过 System.getProperty("webapp.root") 获取
        Web 应用的根目录了。 过更常见的使用场景是在第三方工具的配置文件中通过${webapp.root} 引用 Web 应用的根目录。
    -->

    <!-- Log4jConfigListener监听器配置 -->
    <!--
        说明: 一般情况下,必须将Log4J日志配置文件以log4j.properties为文件名保存在类路径下。
        Log4jConfigListener允许通过log4jConfigLocation
        Servlet上下文显示的指定Log4J配置文件地址,如下所示:
    -->
    <context-param>
        <!--  指定 Log4J 配置文件的地址 -->
        <param-name>log4jConfigLocation</param-name>
        <param-value>classpath:log4j.properties</param-value>
    </context-param>
    <context-param>
        <!-- Log4J日志刷新时间间隔 -->
        <param-name>log4jRefreshInterval</param-name>
        <param-value>6000</param-value>
    </context-param>
    <!-- 使用该监听器初始化Log4J日志引擎 -->
    <listener>
        <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
    </listener>

    <!-- 这里集成Spring框架 -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/applicationContext.xml,classpath*:beanContext-*.xml,classpath*:springContext-*.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <!--
        如果某个会话在一定时间内未被访问,服务器可以抛出它以节省内存,可以通过使用HttpSession的setMaxInactiveInterval
        方法,明确设置单个会话对象的超时值,或者可以利用session-config元素制定缺省超时值,超时值的单位为(分)
    -->
    <!-- SESSION设置 -->
    <session-config>
        <session-timeout>10</session-timeout>
    </session-config>

    <!-- error-page元素使得在返回特定HTTP状态代码时,或者特定类型的异常被抛出时,能够制定将要显示的页面 -->
    <!-- 指定错误处理页面 -->
    <error-page>
        <!-- excpetion-type指出在出现某个给定的Java异常但未捕捉到此异常时使用的URL -->
        <exception-type>java.io.IOException</exception-type>
        <location>/common/system_ioerror.jsp</location>
        <!--
            error-code 指出在给定HTTP错误代码时使用的URL <error-code></error-code>
        -->
    </error-page>

</web-app>
7.配置struts.xml文件,将其保存在Java Resources:src包下,配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
    "http://struts.apache.org/dtds/struts-2.1.7.dtd">
    <!-- Struts框架核心配置文件就是struts.xml配置文件,该文件主要负责管理Struts2框架业务控制器Action -->
    <!--
        在默认情况下,Struts2框架将自动加载放在WEB-INF/class路径下的struts.xml文件。在大部分应用里,随着应用规模的增加,
        系统Action数量也大量增加,导致struts.xml配置文件很臃肿,为了避免struts.xml文件过于庞大臃肿,提高其可读性,
        我们可以将一个struts.xml配置文件分解成多个配置文件,然后再struts.xml包含其它配置文件
    -->

    <!-- 下面是struts2配置文件的根元素 -->
<struts>
    <!-- 通过include元素导入其它配置文件 -->
    <include file="struts-default.xml"></include>
    <!-- struts-test.xml文件在下面将会讲到-->
    <include file="struts-test.xml"></include>
    <!-- .... -->
   
    <!-- Struts配置文件还应该有一个Struts.properties文件,我们在此处通过配置constant元素,同样可以配置这些属性 -->
    <!-- 设置Struts2应用是否使用开发模式,设置为true则可以在应用出错时显示更多、更友好的错误提示 -->   
    <constant name="struts.devMode" value="true"></constant>
   
   
    <!--
        配置名为com.mapgis.egov.test.glob的包空间,继承struts-default包空间。
        struts-default包空间定义在struts-default.xml(Struts2框架默认配置文件,Struts2框架每次都会自动加载该文件)文件中。-->
    <package name="com.test" extends="struts-default" namespace="/…">
          <!-- 定义默认的拦截器 每个Action都会自动引用,如果Action中引用了其它的拦截器 默认的拦截器将无效 -->
        <default-interceptor-ref name="defaultStack"></default-interceptor-ref>
       
        <!-- 全局results配置 -->
        <global-results>
            <result name="input">/error.jsp</result>
        </global-results>
        <!--
    <action name="abc" class="NewTestAction">
            <result name="input">/NewTest.jsp</result>
            <result name="error">/NewTest.jsp</result>
            <result name="success" type="dispatcher">/NewTest.jsp</result>
    </action>
    -->
    </package>
   
</struts>
下面再看看struts-test.xml文件的配置:
<?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>
    <!-- package提供了将多个Action组织为一个模块的方式
        package的名字必须是唯一的 ,package可以扩展 ,当一个package扩展自另一个package时,
                    该package会在本身配置的基础上加入扩展的package的配置 ,
                   父package必须在子package前配置
        name:package名称
        extends:继承的父package名称
        abstract:设置package的属性为抽象的 抽象的package不能定义action 值true:false
        namespace:定义package命名空间 该命名空间影响到url的地址,例如此命名空间为/test那么访问是的地址为http://localhost:8080/struts2/test/XX.action
     -->
    <package name="test" extends="struts-default" namespace="/s">
        <action name="*" class="{1}Action">
            <result name="input">/{1}.jsp</result>
            <result name="error">/{1}.jsp</result>
            <result name="success" type="dispatcher">/{1}.jsp</result>
        </action>
    </package>
</struts>
使用匹配符可以匹配时,要注意action的起名形式,应为:XXXAction.java,对应jsp页面也应匹配成XXX.jsp形式。

最后再配置由spring初始化bean的文件配置springContext-test.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- 指定Spring配置文件的DTD信息 -->
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"
    "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<!-- Spring配置文件的根元素 -->
<beans>   
    <!--以下是逻辑接口的bean配置 -->
    <bean id="NewTestAction" class="com.action.test.NewTestAction" >
    </bean>
</beans>
ok了,可以运行试试了。

原创粉丝点击