最佳实践?我在哪里为Struts2中的自己的应用程序配置参数?

时间:2011-09-02 17:24:15

标签: java struts2

在Java servlet中,有<context-param>。在桌面应用程序中,我们通常会定义自己的配置文件。

我应该在哪里为Struts2应用程序添加配置参数?例如,我的应用程序需要为用户输入设置时间限制,或者保存和读取存储在某处的文件,或者用户输入错误密码的最长时间等。我希望这些内容可配置。

人们通常在Struts2应用程序中执行此操作的方式是什么?任何最佳做法?

3 个答案:

答案 0 :(得分:5)

如果您熟悉您提到的ServletContext方法,您可以坚持下去。在web.xml中,只需添加<context-param>

然后,要在行动中获得ServletContext,只需实施ServletContextAware,系统会自动为您注入。{/ p>

以下是一个简短的例子:

的web.xml

<context-param>
  <param-name>someSetting</param-name>
  <param-value>someValue</param-value>
</context-param>

你的行动

public class YourAction extends ActionSupport implements ServletContextAware {
  private ServletContext servletContext;

  @Override
  public String execute() throws Exception {
    String someValue = (String) servletContext.getAttribute("someSetting");

    return SUCCESS;
  }

  @Override
  public void setServletContext(final ServletContext context) {
    this.servletContext = servletContext;
  }
}

答案 1 :(得分:0)

见这里:Apache Struts 2 Documentation - Handling File Uploads 或:Apache Struts 2 Documentation - File Upload

  

可以通过在WEB-INF / classes中放置struts.properties文件来设置属性。在属性文件中找到的任何属性都将覆盖默认值。

     
      
  • struts.multipart.parser - 此属性应设置为扩展MultiPartRequest的类。目前,该框架附带了Jakarta FileUpload实现。
  •   
  • struts.multipart.saveDir - 上传文件的目录。如果未设置此属性,则默认为javax.servlet.context.tempdir。
  •   
  • struts.multipart.maxSize - 允许上载的最大文件大小(以字节为单位)。这有助于防止有人上传大量大文件导致系统滥用。默认值为2兆字节,可以设置为2千兆字节(如果要编辑Pell多部分源,则需要更高,但如果需要上传大于2千兆字节的文件,则需要重新考虑事项!)如果要上传更多文件与表单上的一个文件相比,maxSize适用于组合总数,而不是单个文件大小。
  •   
     

如果您对默认值感到满意,则无需在struts.prop中添加任何属性

我通常将所有这些设置放在默认包中的struts.properties文件中。如果使用此类配置,也可以在struts.xml文件中设置它们。

Google搜索使用“Struts2文件上传”作为搜索参数,为struts 2提供了大量文件处理示例。

答案 2 :(得分:0)

我使用一个config xml文档,我在一个实现javax.servlet.ServletContextListener类的类中加载。从那里我将属性设置为servletContext:

public void contextInitialized(ServletContextEvent contextEvent) {
    try{

        Document xmlDocument = readConfigFile(contextEvent.getServletContext().getRealPath("") + fileSeperator + AppConfigConstants.XML_CONFIG_LOCATION);

        contextEvent.getServletContext().setAttribute(AppConfigConstants.RECORDS_PAGE_NODE_NAME,this.getValueFromConfig(AppConfigConstants.RECORDS_PAGE_NODE_NAME,xmlDocument));

...

}

然后在我的struts基类动作类中,我有从servlet上下文中获取属性的方法。

protected Integer getRecordsPage(){
    Integer recordsPage = Integer.valueOf("0");

    if(this.getServlet().getServletContext().getAttribute(AppConfigConstants.RECORDS_PAGE_NODE_NAME)!= null){
        recordsPage = Integer.valueOf(this.getServlet().getServletContext().getAttribute(AppConfigConstants.RECORDS_PAGE_NODE_NAME).toString());
    }

    return recordsPage;

}