在Java servlet中,有<context-param>
。在桌面应用程序中,我们通常会定义自己的配置文件。
我应该在哪里为Struts2应用程序添加配置参数?例如,我的应用程序需要为用户输入设置时间限制,或者保存和读取存储在某处的文件,或者用户输入错误密码的最长时间等。我希望这些内容可配置。
人们通常在Struts2应用程序中执行此操作的方式是什么?任何最佳做法?
答案 0 :(得分:5)
如果您熟悉您提到的ServletContext
方法,您可以坚持下去。在web.xml
中,只需添加<context-param>
。
然后,要在行动中获得ServletContext
,只需实施ServletContextAware
,系统会自动为您注入。{/ p>
以下是一个简短的例子:
<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;
}