0

これはとても簡単に思えますが、なぜそんなに難しいのかわかりません... getURL では、文字列 "total" を返します。「total」がすでにメソッド handleRequest に持っているのと同じ値を返そうとしています。提案?前もって感謝します!

public class Multiply implements Controller {

    static int product;
    private static String total;

    public static String getURL(HttpServletRequest req) {

        String scheme = req.getScheme();            // http
        String serverName = req.getServerName();    // hostname.com
        int serverPort = req.getServerPort();       // 80
        String contextPath = req.getContextPath();  // /mywebapp
        String servletPath = req.getServletPath();  // /servlet/MyServlet
        String pathInfo = req.getPathInfo();        // /a/b;c=123
        String queryString = req.getQueryString();  // d=789

        String[] item = queryString.split("&");
        product = 1;
        for (int i = 0; i < item.length; i++) {
            String[] s = item[i].split("=");

            String name = s[0];
            String value = s[1];
            int numValue = Integer.parseInt(value);
            product = product * numValue;

        }
        total = "" + product;
        return total;

    }

    public ModelAndView handleRequest(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {

        String Mess = total;

        ModelAndView modelAndView = new ModelAndView("hello");
        modelAndView.addObject("message", Mess);

        return modelAndView;
    }
}
4

2 に答える 2

0

totalクラスのメンバー変数ですMultiply。どちらの方法からでも問題なくアクセスできます。初期化されていないことに注意してください。したがって、それgetURL以前に電話をかけない限り、誰にも割り当てられず、エラーが発生します。handleRequesttotalString

また、私はいくつかの分野であなたの資本化を監視します。

編集:明確にするために、技術的には、あるメソッドから別のメソッドに値を渡すことはありません。2つのメソッド間で共有メンバー変数にアクセスしています。

于 2012-07-31T20:46:58.213 に答える
0

これの実装には多くの問題があります。totalまず、 staticを宣言することにより、このクラスのすべてのインスタンスが同じ の値を持ちますtotal。コントローラーを作成して再利用するフレームワークを使用している場合、クラスのすべてのインスタンスが同じメンバー フィールドを参照および更新するため、問題が発生する可能性があります。

あなたが望むのは、あなたのgetURLメソッドが total の値を返し、それをあなたから呼び出すことhandleRequestです。getURL非静的メンバー フィールドに依存しないため、静的にすることができます。本当にorに名前getURLを変更する必要があります。それがあなたがしていることだからです。あなたがやろうとしていることは、実際には副作用であり、練習として避けるべきです。getTotalgetTotalFromURLgetURL

public class Multiply implements Controller {

    public static String getURLTotal(HttpServletRequest req) {
        String scheme = req.getScheme();            // http
        String serverName = req.getServerName();    // hostname.com
        int serverPort = req.getServerPort();       // 80
        String contextPath = req.getContextPath();  // /mywebapp
        String servletPath = req.getServletPath();  // /servlet/MyServlet
        String pathInfo = req.getPathInfo();        // /a/b;c=123
        String queryString = req.getQueryString();  // d=789

        String[] item = queryString.split("&");
        int product = 1;
        for (int i = 0; i < item.length; i++) {
            String[] s = item[i].split("=");

            String name = s[0];
            String value = s[1];
            int numValue = Integer.parseInt(value);
            product = product * numValue;

        }
        return Integer.toString(product);
    }

    public ModelAndView handleRequest(HttpServletRequest request,
                                      HttpServletResponse response)
                 throws ServletException, IOException 
    {
        String Mess = Multiply.getURLTotal(request);

        ModelAndView modelAndView = new ModelAndView("hello");
        modelAndView.addObject("message", Mess);

        return modelAndView;
    }
}
于 2012-07-31T20:51:09.993 に答える