0

这看起来很简单,但我不知道为什么我会遇到这样的困难......所以在 getURL 中,我返回字符串“total”。我正在尝试返回方法 handleRequest 中已有的 SAME 值“total”。建议?提前致谢!

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之前打电话,handleRequest否则total不会被分配给任何人String,并且会给你一个错误。

另外,我会在几个领域观察你的资本化情况。

编辑:为了澄清起见,从技术上讲,您并没有将值从一种方法传递给另一种方法。您正在访问两个方法之间的共享成员变量。

于 2012-07-31T20:46:58.213 回答
0

您的实施存在许多问题。首先,通过声明total静态,这个类的所有实例将具有相同的值total。如果您正在使用创建控制器并重用它的框架,这可能会导致问题,因为该类的所有实例都将引用和更新相同的成员字段。

你想要的是让你的getURL方法返回 total 的值,然后从你的handleRequest. getURL可以是静态的,因为它不依赖于非静态成员字段。你真的应该重命名getURLgetTotalorgetTotalFromURL因为那是你正在做的事情。你要求getURL做的实际上是一个副作用,应该避免作为一种做法。

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 回答