如何将Map数据结构委托给helper Class?

时间:2011-05-27 05:36:38

标签: java java-ee

我有一个Servlet,我使用Map<Integer, String>月,日,年使用JSTL标记在Select tag显示。

例如在Servlet代码中:

// Storing month in key-value pair
Map<Integer, String> months = new LinkedHashMap<Integer,String>();
months.put(1, new String("Jan"));
months.put(2, new String("Feb"));
months.put(3, new String("Mar"));
months.put(4, new String("Apr"));
...

// Putting month in request scope to be accessed in JSP
request.setAttribute("months", months);

但是,我想在其他Helper class中编写Map数据结构代码并在Servlet中调用它,以便我的Servlet变得不那么乏味

问题:

  1. 如何委托给助手类/方法?
  2. 如何在Servlet中的请求范围内调用它?

3 个答案:

答案 0 :(得分:2)

简单地:

Map<Integer, String> months = new Helper().months();

根据您的需要,您也可以将其实现为静态方法。使用常规方法使用DI更加合适(大部分时间)。

没有必要在方法中核心数月。 SimpleDateFormat可以处理这个问题。 (使用joda时间而不是GregorianCalendar可能会更好一些。)

public static Map<Integer, String> months() {
    Map<Integer, String> months = new HashMap<Integer, String>();
    for(int i=0;i<12;i++){
        GregorianCalendar cal = new GregorianCalendar(2000, i, 1);
        String month = new SimpleDateFormat("MMM", Locale.ENGLISH).format(cal.getTime());
        months.put(i + 1, month);
    }
    return months;
}

请求范围:为每个请求调用您的servlet。只要您将月份作为属性添加到请求中,一切都应该没问题。实际上没有必要为每个请求创建地图。几个月不会改变那么多。您应该在启动时将地图存储在应用程序上下文中。

答案 1 :(得分:1)

我不确定如果我正确地跟着你,但在这里它 - 。 你可以写一个类Helper并且可以在其中有一个静态方法说getMonths将返回这个Map。喜欢 -

public class Helper {

    private Helper(){ }

    private static Map<Integer, String> months = new LinkedHashMap<Integer, String>();

    static{
        months.put(1, "Jan");
        months.put(2, "Feb");
        months.put(3, "Mar");
        months.put(4, "Apr");
        ...
    }

    public static Map<Integer, String> getMonths(){
        return months;
    }
}

你可以从你的servlet调用这个方法,比如 -

Map<Integer, String> months = Helper.getMonths(); 

因为这个Map是常量但是可变的,你可以从Guava为此目的使用ImmutableMap

答案 2 :(得分:1)

不太确定,但可以:

String[] months = DateFormatSymbols.getInstance().getMonths();

方法实施:

public static Map<Integer, String> months() {
    Map<Integer, String> months = new HashMap<Integer, String>();
    String[] instance = DateFormatSymbols.getInstance(Locale.ENGLISH).getShortMonths();
    for (int i = 0; i < instance.length; i++) {
        months.put(i + 1, instance[i]);
    }
    return months;
}