用struts1时,有个疑惑,在加载自己定义的配置文件,如:test.properties,从中读取某条信息(如xx.xxx = Y),如果是Y则继续,是N则跳转,有没有像servlet中的init()方法那样,只初始加载1次,以后再请求就不进行加载了?有的话在action中怎么写?谢谢了。 
action继承自servlet应该有接口吧?
问题补充:
就像用servlet的时候,会常常写意一个xxx.properties来初始化时加载信息,在init()中定义,只加载一次,我的意思是能不能在struts1中某个地方在初始化actionservlet的时候,也加载一个自己定义的xxx.properties,然后根据这个xxx.properties的内容作一些相应的判断?谢谢!

解决方案 »

  1.   

    - <servlet>
      <description>init</description> 
      <display-name>MyConnection</display-name> 
      <servlet-name>MyConnection</servlet-name> 
      <servlet-class>util.MyConnection</servlet-class> 
    - <!--  init parameter
    notice:
    connecttype
    0 direct connect
    1 pool   connect

      --> 
    - <init-param>
      <param-name>connecttype</param-name> 
      <param-value>0</param-value> 
      </init-param>
    - <init-param>
      <param-name>jdbcDriver</param-name> 
      <param-value>oracle.jdbc.driver.OracleDriver</param-value> 
      </init-param>
    - <init-param>
      <param-name>dbURL</param-name> 
      <param-value>jdbc:oracle:thin:@//10.224.3.70:1521/ora9i</param-value> 
      </init-param>
    - <init-param>
      <param-name>dbUser</param-name> 
      <param-value>SMIS</param-value> 
      </init-param>
    - <init-param>
      <param-name>dbPassword</param-name> 
      <param-value>SMIS</param-value> 
      </init-param>
      <load-on-startup>1</load-on-startup> 
      </servlet>
    - <!--  DB ConnectionPool Config  
      --> 
    - <resource-ref>
      <description>Oracle DB Connection Pool</description> 
      <res-ref-name>jdbc/oracle</res-ref-name> 
      <res-type>javax.sql.DataSource</res-type> 
      <res-auth>Container</res-auth> 
      <res-sharing-scope>Shareable</res-sharing-scope> 
      </resource-ref>
      

  2.   

    /**
     * @author zy
     * 直连数据库
     *  
     * date:2008-12-2
     * update 2008-12-4 zy
     */import java.sql.Connection;
    import java.sql.SQLException;
    /**
     * @author zhangyun
     * 
     */
    public class DirectConnection {
    private Connection conn = null; private static String jdbcDriver = null; private static String dbURL = null; private static String dbUser = null; private static String dbPassword = null; /**
     * @return Connection
     */
    public Connection getConnection(String newjdbcDriver, String newdbURL,
    String newdbUser, String newdbPassword) {
    // 初始化
    jdbcDriver = newjdbcDriver;
    dbURL = newdbURL;
    dbUser = newdbUser;
    dbPassword = newdbPassword;// System.out.println("************  init DirectConnection : Get paramenters ! "); if (conn == null) {
    connectOra9();
    }
    if (conn == null) {
    System.out.println("Oracle的连接没有真正获得,连接为空!");
    }
    return conn;
    } public void close() {
    try {
    if (!(conn == null)) {
    conn.close();
    }
    conn = null;
    } catch (SQLException e) {
    System.out.println("关闭连接时出错,原因是:" + e.toString());
    }
    } private void connectOra9() { try {
    System.out.println(jdbcDriver);
    System.out.println(dbURL);
    System.out.println(dbUser);
    System.out.println(dbPassword); Class.forName(jdbcDriver);
    java.util.Properties p = new java.util.Properties();
    p.put("user", dbUser);
    p.put("password", dbPassword);
    conn = java.sql.DriverManager.getConnection(dbURL, p);
    } catch (Exception e) {
    System.out.println(e.toString());
    e.printStackTrace();
    conn = null;
    } }
    }
      

  3.   

    你没明白我说的含义,在web project中,有多个action,自己定义一个配置文件xx.properties,我想在actionservlet出示加载的时候根据某个source.door= Y ,来判断如果是Y则继续,是N,就直接不加载返回一个提示信息,如果照你这么写的话,我只有调用这个方法的时候才会拦截,并且不是一次,是每次调用都会再判断。
      

  4.   

    action中重写setServlet方法,在里面写
    或者在action的构造函数中写,因为struts1的action是单例的
      

  5.   

    您的意思是我初始化了setServlet()方法后,它只会初始加载一次?
      

  6.   

    我重写setServlet方法,应该是只初始加载一次,我在里面根据加载的xx.properties里的标志,不满足想跳出来不让actionservlet继续加载了,并返回提示信息,可是setServlet的返回值是void 的类型,还是没达到要求啊。
      

  7.   

    1 由于你只初始化一次,所以可以在action中声明一个属性,来标志成功或者失败,然后在execute等发放中判断返回2 setServlet(ActionServlet servlet)方法中ActionServlet有getServletContext().getRequestDispatcher(path),也能完成转发吧,提示信息这个没问题,就看你怎么用了,呵呵
      

  8.   

    自定义一个actionServlet,在里面设置一个全局Map变量,在应用启动时加载此servlet,并解析你的配置,放到map中,后面的所有action可以引用此map来获取配置