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

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

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

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

如果您熟悉所提到的ServletContext方法,那么您可以坚持下去。 在您的web.xml ,只需添加

然后,要在您的操作中获取ServletContext ,只需实现ServletContextAware ,它将自动为您注入。

这是一个简短的例子:

web.xml中

  someSetting someValue  

你的行动

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

请参阅此处: Apache Struts 2文档 – 处理 文件上载或: Apache Struts 2文档 – 文件上载

可以通过在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文件中设置它们。

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

我使用一个配置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; }