当Struts遇到Spring

<load-on-startup>1</load-on-startup>这个在web.xml里,平时很少注意的,今天发现还是得关注下他的

前段时间练习SSH的组合,结果以前写的代码运行很好的,就从Tomcat5 换到了Tomcat6就出问题 了,老是说找不到某 个bean,最终的就是修改了下上面的那个参数就OK 了

Tomcat加载一个web应用的时候,我们 在WEB-INF/目录里有可能放了很多是应用文件,但是web.xml才是javaee规范 了的标准配置文件,因此,很多 框架都是把自己的配置文件放在web.xml里的

<servlet>
  <servlet-name>action</servlet-name>
  <servlet-class>
   org.apache.struts.action.ActionServlet
  </servlet-class>
  <init-param>
   <param-name>config</param-name>
   <param-value>/WEB-INF/struts-config.xml</param-value>
  </init-param>
  <init-param>
   <param-name>debug</param-name>
   <param-value>3</param-value>
  </init-param>
  <init-param>
   <param-name>detail</param-name>
   <param-value>3</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
 </servlet>

 Struts把中心控制器放这了,<load-on-startup>1</load-on-startup>参数让这个先加载,eclipse默认生成的好象这个参数是0,结果当我把Spring集成进去的时候,由于我的struts-config.xml文件里配置是这样的

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

<struts-config>
  <data-sources />
  <form-beans >
    <form-bean name="addRoleForm" type="cn.edu.ctgu.ghl.struts.form.AddRoleForm" />
    <form-bean name="departmentForm" type="cn.edu.ctgu.ghl.struts.form.DepartmentForm" />
    <form-bean name="employeeForm" type="cn.edu.ctgu.ghl.struts.form.EmployeeForm" />
    <form-bean name="consumerForm" type="cn.edu.ctgu.ghl.struts.form.ConsumerForm" />
    <form-bean name="wageForm" type="cn.edu.ctgu.ghl.struts.form.WageForm" />

  </form-beans>

  <global-exceptions />
  <global-forwards >
    <forward name="login" path="/login.jsp" />
    <forward name="failure" path="/admin/failure.jsp" />

  </global-forwards>

  <action-mappings >
    <action
      attribute="addRoleForm"
      input="/admin/addRole.jsp"
      name="addRoleForm"
      path="/admin/addRole"
      scope="request"
     >
      <forward name="failure" path="/admin/failure.jsp" />
      <forward name="success" path="/admin/listRole.jsp" />
    </action>
   
   
    <action
      attribute="departmentForm"
      input="/admin/deparment.jsp"
      name="departmentForm"
      parameter="action"
      path="/admin/department"
      scope="request"
      type="cn.edu.ctgu.ghl.struts.action.DepartmentAction">
      <forward name="failure" path="/admin/failure.jsp" />
      <forward name="addDepartment" path="/admin/department.jsp" />
     
     
     
      <forward name="updateDepartment" path="/admin/department.jsp" />
      <forward name="updateSuccess" path="/admin/listDepartment.jsp" />
     
     
      <forward name="listDepartment" path="/admin/listDepartment.jsp" />
      <forward name="removeSuccess" path="/admin/listDepartment.jsp" />
      <forward name="addSuccess" path="/admin/listDepartment.jsp" />
     
      <forward name="noRight" path="/admin/failure.jsp" />
     
     
     
     
     
     
    </action>
    <action
      attribute="employeeForm"
      input="/admin/employee.jsp"
      name="employeeForm"
      parameter="action"
      path="/admin/employee"
      scope="request"
      type="cn.edu.ctgu.ghl.struts.action.EmployeeAction" >
      <forward name="addEmployee" path="/admin/employee.jsp" />
      <forward name="listEmployee" path="/admin/listEmployee.jsp" />
      <forward name="addEmployeeSuccess" path="/admin/success.jsp" />
      <forward name="employeeInfo" path="/admin/employeeInfo.jsp" />
      <forward name="updateEmployee" path="/admin/employee.jsp" />
      <forward name="updateEmployeeSuccess" path="/admin/success.jsp" />
      <forward name="noRight" path="/admin/failure.jsp" />
      <forward name="searchEmployee" path="/admin/searchEmployee.jsp" />
      <forward name="redeploy" path="/admin/redeploy.jsp" />
      <forward name="attendance" path="/admin/attendance.jsp" />
    </action>
    <action
      attribute="consumerForm"
      input="/login.jsp"
      name="consumerForm"
      parameter="action"
      path="/consumer"
      scope="request"
      type="cn.edu.ctgu.ghl.struts.action.ConsumerAction" >
      <forward name="loginSucess" path="/index.jsp" />
      <forward name="updatePassword" path="/updatePassword.jsp" />
    </action>
    <action
      attribute="wageForm"
      input="/admin/wage.jsp"
      name="wageForm"
      parameter="action"
      path="/admin/wage"
      scope="request"
      type="cn.edu.ctgu.ghl.struts.action.WageAction" >
      <forward name="addWage" path="/admin/wage.jsp" />
      <forward name="listWage" path="/admin/listWage.jsp" />
      <forward name="success" path="/admin/success.jsp" />
    </action>

 


  </action-mappings>

  <!-- 这里的controller的作用是请求处理器,配置了controller就不必在每个action里设置type属性了 -->
 
 <controller>
  <set-property property="processorClass"
   value="org.springframework.web.struts.DelegatingRequestProcessor" />
 </controller>
  <message-resources parameter="cn.edu.ctgu.ghl.struts.ApplicationResources" />
 
  <!-- =======在这的配置也初始化一个Spring的bean容器,而且这个容器是以在ContextLoaderServlet里初始化的为父的,
   所以这个容器里的bean可以访问ContextLoaderServlet里初始化容器里的bean======== -->
  <plug-in
  className="org.springframework.web.struts.ContextLoaderPlugIn">
  <set-property property="contextConfigLocation"
   value="/WEB-INF/action-servlet.xml" />
 </plug-in>
</struts-config>

而在action-servlet.xml里的配置的bean要访问在web.xml里配置的bean ,web.xml里有contextConfigLocation,确定了Spring配置文件路径,/WEB-INF/webApplicationContext.xml,/WEB-INF/dataAccessContext.xml
这两个文件里的bean 应该可以认为是在同一个容器中的,而在struts-config.xml里配置的action-servlet.xml则是以这个容器为父容器的,也正是这样,所以在action-servlet.xml里配置的bean 才能够访问WEB-INF/webApplicationContext.xml,/WEB-INF/dataAccessContext.xml里配置的bean 的,如此说来要让action-servlet.xml里的bean 能访问到父容器里的bean ,那么WEB-INF/webApplicationContext.xml,/WEB-INF/dataAccessContext.xml这个里的bean就应该在action-servlet.xml里的bean 前加载。所以这里对较低版本的tomcat来说就得用<load-on-startup>0</load-on-startup>参数来控制加载顺序了,高版本的可以直接用

<listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener> 
这也是推荐的方法

<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>
   /WEB-INF/webApplicationContext.xml,/WEB-INF/dataAccessContext.xml
  </param-value>
 </context-param>
 <!-- 注意,这个地方如果用 listener org.springframework.web.context.ContextLoaderListener老是出错,网上说好像和tomcat版本有关-->

 <!-- tomcat5.523用listener org.springframework.web.context.ContextLoaderListener-->
 <!--
  <listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener> 
 -->
 <!-- tomcat5.520用org.springframework.web.context.ContextLoaderServlet-->

 <servlet>
  <servlet-name>SpringContextServlet</servlet-name>
  <servlet-class>
   org.springframework.web.context.ContextLoaderServlet
  </servlet-class>
  <load-on-startup>0</load-on-startup>
 </servlet>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值