如何将数组从servlet传递到jsp页面?

时间:2014-12-10 22:52:54

标签: java arrays servlets

我已经使用以下代码将整数变量发送到jsp页面:

resp.sendRedirect(("result.jsp?fibNum=" + fibNum));

但是当我尝试传递数组时,int[] fibSequence我将以下内容传递给jsp页面的地址栏:

fibSequence

有没有人对如何输出传递给jsp页面的数组值有任何建议?`

这是我将数组发送到doPost()中的结果jsp页面的方式:

protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        // TODO Auto-generated method stub


        // read form fields
        String fibNum = req.getParameter("fibNum");


        try{
              //Get reference from server's registry
              Registry registry = LocateRegistry.getRegistry("127.0.0.1");

              //Lookup server object from server's registry
              IFibonacci fibonacci_proxy = (IFibonacci)registry.lookup("PowerObject");


              int fibMax = Integer.parseInt(fibNum);

             //Invoke server object's methods 
             //Get Fibonacci array.
             int[] fibSequence = fibonacci_proxy.fibonacciArrayTest(fibMax);


             for (int value : fibSequence) {
                System.out.println(value);
             }


            //System.out.println(Arrays.toString(fibSequence));


            }catch(NotBoundException nbe){
              nbe.printStackTrace();
            }catch(RemoteException re){
              re.printStackTrace();
            }

            //send input to the result page using a redirect
            //resp.sendRedirect(("result.jsp?fibNum=" + fibNum));
            resp.sendRedirect(("result.jsp?fibSequence=" + fibSequence));

          }

我是如何尝试在jsp页面上检索数组值并打印它们的,但我得到了fibSequence cannot be resolved to a variable,尽管这是传递的数组的名称:

<a href="home.jsp">Return to Main</a><br>
             <%String[] var_array=request.getParameterValues("fibSequence");%>
             <%System.out.print(""+fibSequence);%>
        </form>     

2 个答案:

答案 0 :(得分:1)

信任编译器。 fiBSeq没有定义。你定义了fibSequence。但是将该数组作为参数传递将不起作用,因为您将传递(int [])。toString(),这可能不是您想要的。如果它不是太大,你可以序列化和编码它。或发布。

编辑1

int [] array = {1,2,3,4,5,6,7,8,9};
System.out.print(""+array);//<-- print [I@15db9742  or similar

编辑2

在发送方编码阵列

int[] array = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
String param = Arrays.toString(array);
param = param.substring(1, param.length()-1);//removing enclosing []
String encArray = URLEncoder.encode(param, "utf-8");

// Send encArray as parameter.
resp.sendRedirect(("result.jsp?fibSequence=" + encArray));

解码接收器端的阵列

String encArray = request.getParameterValues("fibSequence");
String decArray = URLDecoder.decode(encArray,"utf-8");
//Now you can parse the list into an Integer list
String [] var_array = decArray.split(",");

在jsp中,将代码放在&lt;%...%&gt; 之间。如果您遇到一些未解决的符号错误,则必须导入缺少的库 可以是以下一个或多个,只需复制页面顶部的语句即可。

<%@ page import="java.io.*" %>
<%@ page import="java.net.*" %>
<%@ page import="java.util.*" %>

(默认导入java.util,我不确定)

  

但请注意

     

请注意不要以这种方式发送太多数据! URL的大小可能不是无限制的。此外,数据在URL中可见,“讨厌”的用户可以简单地复制和复制请求   发送数据的更好方法是使用HTTP post。

答案 1 :(得分:0)

这是将数组变量从servlet传输到jsp页面的更好答案:

In Servelet:
String arr[] = {"array1","array2"};
request.setAttribute("arr",arr);
RequestDispatcher dispatcher = request.getRequestDispatcher("yourpage.jsp");
dispatcher.forward(request,response);
In Jsp:
<% String str[] = (String[]) request.getAttribute("arr"); %>
<%= str[0]+""+str[1] %>