1

I have Vector declared in index.jsp page like this:

<%! Vector vNumbers = new Vector();%>

I want to use it in servlet, how do I correctly get it? Also, how do I send Vector back from servlet to JSP? Thanks!

Joeri, no, I dont use framework. I have the following servlet:

import java.io.IOException;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.FileWriter;


public class Sort extends HttpServlet {

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        addNumber(request);
        goToPage("/index.jsp", request, response);
    }

 private void goToPage(String address, HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException{
        RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(address);
        dispatcher.forward(request, response);}


    public static void addNumber(HttpServletRequest request){

        try{
                HttpSession session = request.getSession(true);
                String path = session.getServletContext().getRealPath("/") + "numbers.txt";       
                String dataName = "textarea2";
                FileWriter writer = new FileWriter(path, true);
                writer.write(dataName + ":\n");
                writer.flush();
                writer.close();}
        catch ( Exception e) {}
  }

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

}

Here is index.jsp:

<%@ page import="java.util.*" %>
<%@ page import="java.io.*" %>
<%! Vector vNumbers = new Vector();%>
<HTML>
<HEAD>
<TITLE>Sorting</TITLE>
</HEAD>
<BODY>
<H1>Sorting a vector</H1>
<FORM ACTION="index.jsp" METHOD="POST">
  Input a number:
  <input type="text" name="textarea1">
  <INPUT TYPE="SUBMIT" VALUE="Enter">
</form>
<FORM ACTION="index.jsp" METHOD="POST">
  Enter amount of numbers to generate:
  <input type="text" name="textarea2">
  <input type="SUBMIT" value="Generate">
</FORM>
Your list:
<br>
 <%
  String number = request.getParameter("textarea1");
  String value = request.getParameter("textarea2");
  if (number != null) vNumbers.add(number);
   Random randomGenerator = new Random();
  if (value != null) for (int i = 0; i < Integer.parseInt(value); ++i)
  vNumbers.add(randomGenerator.nextInt(100));
  out.println(vNumbers);
       %>
<br>
<br>
<br>
</form>
<FORM ACTION="Sort.do" METHOD="POST">
  <input type="SUBMIT" value="Sort">
</FORM>
<br>
<%
String file = application.getRealPath("/") + "numbers.txt";
FileReader filereader = new FileReader(file);
BufferedReader br = new BufferedReader(filereader);
String eachLine = br.readLine();
while (eachLine != null) {
out.println(eachLine);
out.println("<br>");
eachLine = br.readLine();
}
filereader.close();       
%>
</BODY>
<HTML>
BObov
  • 140
  • 1
  • 10

1 Answers1

0

Note that,

request.getAttribute() is a server-side mechanism of passing parameters between servlets and JSPs. Whereas
request.getParameter() is normally a browser-side mechanism of passing parameters to servlets and JSPs.

<%! Vector vNumbers = new Vector();%>

vNumbers has scope only within that JSP page. To pass it on to other servlets/jsps you need to set it as a request attribute.

Inside the JSP use request.setAttribute("vector", vNumbers); In Servlet you can retrieve it using, Vector v = (Vector)request.getAttribute("vector");

You could also send it as a session attribute. Similar question here

PS: you should seek to minimize Java code in JSPs.

Community
  • 1
  • 1
John Eipe
  • 10,922
  • 24
  • 72
  • 114
  • You will not get values in Servlet when you use getAttribute in Servlet passed from JSP. It will be NULL. The session will work instead. – Hardik Mishra Mar 09 '12 at 09:40