2012-03-07 6 views
1

私はベクトルは次のようにindex.jspページで宣言されています:ServletのJSPファイルからVectorを使用するには?

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

私は、サーブレットでそれを使用したい、どのように私はそれを正しく得るのですか? また、VectorをサーブレットからJSPに戻すにはどうすればよいですか? ありがとう!

Joeri、いいえ、私はフレームワークを使用しません。 Iは、次のサーブレットを有する:

<%@ 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> 
+0

フレームワークを使用していますか?通常のJSPを呼び出すときにサーブレットが関与していると思われる理由は何ですか? –

答えて

0

request.getAttribute()は、サーブレットおよびJSPの間でパラメータを渡すのサーバ側の機構である、こと:ここ

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); 
    } 

} 

はindex.jspのです。一方、通常はサーブレットやJSPにパラメータを渡すブラウザ側のメカニズムです。

vNumbersは、そのJSPページ内のスコープのみを持っています。他のサーブレット/ JSPに渡すには、リクエスト属性として設定する必要があります。 JSP内

はあなたがまた、セッション属性としてそれを送ることができ、Vector v = (Vector)request.getAttribute("vector");

を使用して、それを取り出すことができサーブレットでrequest.setAttribute("vector", vNumbers); を使用しています。同様の質問here

PS:JSPでJavaコードを最小限に抑えるようにする必要があります。

+0

JSPから渡されたサーブレットでgetAttributeを使用すると、サーブレットに値が取得されません。 NULLになります。代わりにセッションが機能します。 –