这看起来很容易,但我不知道为什么我遇到这样的困难...所以在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;
}
}
答案 0 :(得分:0)
total
是类Multiply
的成员变量。从任一方法访问它都应该没有问题。请记住,它是未初始化的。因此,除非您在getURL
之前致电handleRequest
,否则total
将不会被分配给任何String
,并会给您一个错误。
另外,我会在几个方面观察你的资本化。
编辑:为了澄清,您在技术上并未将值从一个方法传递到另一个方法。您正在两个方法之间访问共享成员变量。
答案 1 :(得分:0)
您在实施此问题时遇到了一些问题。首先,通过声明total
static,此类的所有实例将具有相同的total
值。如果您正在使用创建控制器并重用它的框架,这可能会导致问题,因为该类的所有实例都将引用并更新相同的成员字段。
您想要的是使用getURL
方法返回总值,然后从handleRequest
中调用它。 getURL
可以是静态的,因为它不依赖于非静态成员字段。您应该将getURL
重命名为getTotal
或getTotalFromURL
,因为这就是您正在做的事情。你要求getURL
做的事实上是side effect,应该避免这种做法。
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;
}
}