最佳实践?在 Struts2 中,我应该将自己的应用程序的配置参数放在哪里?
Posted
技术标签:
【中文标题】最佳实践?在 Struts2 中,我应该将自己的应用程序的配置参数放在哪里?【英文标题】:Best Practice? Where do I put configuration parameters for my own application in Struts2? 【发布时间】:2011-11-09 08:48:46 【问题描述】:在 Java servlet 中,有<context-param>
。在桌面应用程序中,我们通常会定义自己的配置文件。
我应该将我的 Struts2 应用程序的配置参数放在哪里?例如,我的应用程序需要设置用户输入的时间限制,或者保存和读取存储在某处的文件,或者用户输入错误密码的最长时间等。我希望这些东西是可配置的。
人们通常在 Struts2 应用程序中使用什么方式?有什么最佳做法吗?
【问题讨论】:
您可以在 web.xml 中使用<context-param>
方法。
@Steven 如何从我的 struts2 应用程序中检索它?使用 Struts2 Actions 可以调用的专用于常量处理的 servlet?人们是这样做的吗?
我将评论扩展为答案。
【参考方案1】:
如果您熟悉您提到的ServletContext
方法,您可以坚持下去。在您的web.xml
中,添加您的<context-param>
s。
然后,要在您的操作中获取ServletContext
,只需实现ServletContextAware
,它将自动为您注入。
这是一个简短的例子:
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;
【讨论】:
感谢您的回复。这就是我想要的答案。并感谢您纠正我的错字。该死的,我没注意到。 哈哈!没问题。很高兴这对您有所帮助。【参考方案2】:请看这里:Apache Struts 2 Documentation - Handling File Uploads 或:Apache Struts 2 Documentation - File Upload
可以通过将 struts.properties 文件放入 WEB-INF/classes 来设置属性。在属性文件中找到的任何属性都将覆盖默认值。
struts.multipart.parser - 此属性应设置为扩展 MultiPartRequest 的类。目前,该框架随 Jakarta FileUpload 实现一起提供。 struts.multipart.saveDir - 上传文件的存放目录。如果未设置此属性,则默认为 javax.servlet.context.tempdir。 struts.multipart.maxSize - 允许上传的最大文件大小(以字节为单位)。这有助于防止有人上传大量大文件而滥用系统。默认值为 2 MB,可以设置为 2 GB(如果您想编辑 Pell 多部分源,则更高,但如果您需要上传大于 2 GB 的文件,您真的需要重新考虑!)如果您要上传更多maxSize 适用于合并的总数,而不是单个文件的大小。如果您对默认值感到满意,则无需将任何属性放在 struts.prop 中
我通常将所有这些设置放在我的 struts.properties 文件中,该文件位于默认包中。如果您使用这种类型的配置,也可以在 struts.xml 文件中设置它们。
Google 搜索显示了大量使用“Struts2 文件上传”作为搜索参数的 struts 2 文件处理示例。
【讨论】:
您阅读我的问题了吗?我不是在问文件处理! “例如,我的应用程序需要保存和读取存储在某处的文件” - 这让我相信您正在谈论文件处理以及在哪里配置这些设置。无论如何,这样的设置通常在 struts.properties 文件或 struts.xml 文件中处理,除此之外,您可以像使用 web.xml 或以编程方式配置任何其他应用程序一样。 对不起。那将是我的错。如果你现在明白了,你能再回答我的问题吗?谢谢。 有很多 struts2 设置可以被覆盖或在 struts.properties 中设置。我通常使用这个:struts.apache.org/2.0.11/docs/strutsproperties.html 作为我的项目的基础,并注释掉我不需要的东西。没有通过标准 API 提供的东西,我通常会编写自己的东西来处理这种情况。 我并不是要覆盖 struts2 设置。我的意思是我应该在哪里保存我自己的设置以供我自己的操作使用。人们通常是怎么做的?【参考方案3】:我使用了一个配置 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;
【讨论】:
以上是关于最佳实践?在 Struts2 中,我应该将自己的应用程序的配置参数放在哪里?的主要内容,如果未能解决你的问题,请参考以下文章