Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 最佳实践?我应该在Struts2中将我自己的应用程序的配置参数放在哪里?_Java_Struts2 - Fatal编程技术网

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

Java 最佳实践?我应该在Struts2中将我自己的应用程序的配置参数放在哪里?,java,struts2,Java,Struts2,在Javaservlet中,有。在桌面应用程序中,我们通常定义自己的配置文件 我应该将Struts2应用程序的配置参数放在哪里?例如,我的应用程序需要设置用户输入的时间限制,或者保存和读取存储在某处的文件,或者用户输入错误密码的最长时间,等等。我希望这些东西是可配置的 在Struts2应用程序中,人们通常是怎么做的?有什么最佳做法吗?请参见此处: 或: 可以通过将struts.Properties文件放入WEB-INF/classes中来设置属性。在属性文件中找到的任何属性都将覆盖默认值 st

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


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

在Struts2应用程序中,人们通常是怎么做的?有什么最佳做法吗?

请参见此处: 或:

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

  • struts.multipart.parser-此属性应设置为扩展MultiPartRequest的类。目前,该框架附带雅加达FileUpload实现
  • struts.multipart.saveDir—上载文件的存放目录。如果未设置此属性,则默认为javax.servlet.context.tempdir
  • struts.multipart.maxSize—允许上载的最大文件大小(以字节为单位)。这有助于防止上传大量大文件的人滥用系统。默认值为2兆字节,可设置为2千兆字节(如果要编辑Pell multipart源代码,则设置得更高,但如果需要上载大于2千兆字节的文件,则确实需要重新考虑!)如果要在表单上上载多个文件,则maxSize应用于组合的总大小,而不是单个文件大小
如果您对默认设置感到满意,则无需将任何属性放在struts.prop中

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


谷歌搜索发现了大量Struts2的文件处理示例,使用“Struts2文件上传”作为搜索参数

我使用在实现javax.servlet.ServletContextListener类的类中加载的配置xml文档。从那里我设置了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;

}

如果您熟悉您提到的
ServletContext
方法,您可以坚持使用它。在
web.xml
中,只需添加
即可

然后,要在您的操作中获得
ServletContext
,只需实现
ServletContextAware
,它就会自动为您注入

下面是一个简单的例子:

web.xml
您可以使用web.xml中的
方法。@Steven我如何从struts2应用程序中检索它?是否有一个专用于Struts2操作调用的常量处理的servlet?人们就是这样做的吗?我把我的评论扩展成一个答案。你读过我的问题吗?我不是在问文件处理!“例如,我的应用程序需要保存和读取存储在某处的文件”-这让我相信您正在谈论文件处理以及在何处配置这些设置。不管怎样,像这样的设置通常在struts.properties文件或struts.xml文件中处理,除此之外,您还可以像其他任何使用web.xml或编程方式配置应用程序。对不起。那是我的错。如果你现在明白了,你能再次回答我的问题吗?谢谢。struts.properties中有许多struts2设置可以覆盖或设置。我通常使用这个:作为我项目的基础,并注释掉我不需要的东西。标准API没有提供的东西,我通常会编写自己的东西来处理这种情况。我不是要覆盖struts2设置。我的意思是,我应该在哪里保存自己的设置以供自己的操作使用。人们通常是怎么做的?谢谢你的回复。这就是我想要的答案。谢谢你纠正我的打字错误。该死的,我没注意到。哈哈!没问题。很高兴这帮了你。
<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;
  }
}