我怎么能从servlet发送一个字符串数组到jsp并在jsp中接收它

我的Servlet代码是

package DBCon; import java.io.*; import java.net.*; import java.util.ArrayList; import javax.servlet.*; import javax.servlet.http.*; import java.sql.*; /** * * @author Nayan */ public class loadCourseId extends HttpServlet { /** * Processes requests for both HTTP GET and POST methods. * @param request servlet request * @param response servlet response */ protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); ArrayList ar1=new ArrayList(); ArrayList ar2=new ArrayList(); int i; i=0; try { Class.forName("com.mysql.jdbc.Driver").newInstance(); Connection con=DriverManager.getConnection("jdbc:mysql://localhost/online_exam?"+"user=root&password=pass"); Statement stmt=con.createStatement(); ResultSet rs=stmt.executeQuery("select * from course"); while(rs.next()) { ar1.add(rs.getString(1)); ar2.add(rs.getString(2)); } request.getSession().setAttribute("CourseID", ar1); request.getSession().setAttribute("CourseName", ar2); RequestDispatcher requestDispatcher=getServletContext().getRequestDispatcher("http://localhost:8080/ONLINE_EXAM/removeCourse.jsp"); requestDispatcher.forward(request,response); } catch(Exception e) { out.println("

"+e.getStackTrace()+"

"); } } // /** * Handles the HTTP GET method. * @param request servlet request * @param response servlet response */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } /** * Handles the HTTP POST method. * @param request servlet request * @param response servlet response */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } /** * Returns a short description of the servlet. */ public String getServletInfo() { return "Short description"; } // }

和Jsp代码是

         window.onload=function LoadCombo() { window.action="loadCourseId.do"; ArrayList cd=new ArrayList(); cd.add(request.getSession().getAttribute("CourseID")); if(cd.isEmpty()==false) { for(int i=0;i<cd.size();i++) { var newOpt = cid.appendChild(document.createElement('option')); newOpt.text = cd.get(i); } } else { alert("Course table is empty") } }   Remove Course      
                              

通过编写此代码,我无法将项目CourseId添加到comboboxcid中。 你能说我问题出在哪里吗? 谢谢。

您有2个同步列表,其项目彼此相关。 这不容易维护和遍历。 而是将两个列表的值放在Map

 Map courses = new LinkedHashMap(); // ... while(resultSet.next()) { map.put(resultSet.getString(1), resultSet.getString(2)); } // ... request.setAttribute("courses", courses); 

在JSP中,您可以使用JSTL 标记迭代ListMap 。 对于Map ,每次迭代都会在var属性中为您提供一个Map.Entry ,而该属性又包含getKey()getValue()方法。 所以这应该做:

 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> ...  

此外,您的processRequest()方法中的前两行

 response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); 

应该删除,因为这是JSP的负责任,而不是servlet。 否则,在这样做时,您将冒着IllegalStateException错误的风险。

还要删除JSP顶部的@page import 。 它们位于错误的位置,所有相关代码都属于servlet。

 class MyBean{ String val; String label; //+getters setters method } 

Servlet的

 //fetching list of MyBean and setting it to request as attribute request.setAttribute("beanList",beanList); // forward this request to jsp 

JSP