Java 将信息从servlet发送到jsp页面
我的任务要求我们将信息从Javaservlet发送到jsp页面 我的问题是关于调用函数的。它有一个sql查询,可以找到多个结果。我遇到的问题是,它只将结果集中的最后一个结果返回到jsp页面,而不是所有结果 以下是servlet:Java 将信息从servlet发送到jsp页面,java,jsp,servlets,Java,Jsp,Servlets,我的任务要求我们将信息从Javaservlet发送到jsp页面 我的问题是关于调用函数的。它有一个sql查询,可以找到多个结果。我遇到的问题是,它只将结果集中的最后一个结果返回到jsp页面,而不是所有结果 以下是servlet: private void sendBack(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession sess
private void sendBack(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession(true);
//Set data you want to send back to the request (will be forwarded to the page)
//Can set string, int, list, array etc.
String sql = "SELECT id, user_id" +
" FROM lab" +
" WHERE user_id=" + (Integer)session.getAttribute("id");
try{
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/wae","root","");
System.out.println("got boobs");
System.out.println(session.getAttribute("id"));
Statement stmt = con.createStatement();
ResultSet res = stmt.executeQuery(sql);
ArrayList<String> list1 = new ArrayList<String>();
if (res.next()){
do{
list1.add(res.getString(1));
list1.add(res.getString(2));
}while(res.next());
request.setAttribute("res", res);
}
for(int i=0;i<list1.size();i++){
System.out.println(list1.get(i));
}
}catch (SQLException e) {
}
catch (Exception e) {
}
//Decides what page to send the request data to
RequestDispatcher view = request.getRequestDispatcher("Student_manage.jsp");
//Forward to the page and pass the request and response information
view.forward(request, response);
}
private void sendBack(HttpServletRequest请求、HttpServletResponse响应)抛出ServletException、IOException{
HttpSession session=request.getSession(true);
//设置要发送回请求的数据(将转发到页面)
//可以设置字符串、整数、列表、数组等。
String sql=“选择id,用户\u id”+
“来自实验室”+
“其中user_id=“+(整数)session.getAttribute(“id”);
试一试{
Connection con=DriverManager.getConnection(“jdbc:mysql://localhost:3306/wae“,”根“,”);
System.out.println(“有乳房”);
System.out.println(session.getAttribute(“id”);
语句stmt=con.createStatement();
ResultSet res=stmt.executeQuery(sql);
ArrayList list1=新的ArrayList();
if(res.next()){
做{
列表1.add(res.getString(1));
列表1.add(res.getString(2));
}while(res.next());
setAttribute(“res”,res);
}
对于(inti=0;i你的逻辑是错误的
您迭代一行rs
,并将其存储在请求属性data1
和data2
中。
然后,您将获得下一行,并一遍又一遍地覆盖相同的属性
因此,剩下的是rs
的最后一个值
我认为最好将结果存储在集合
中,然后将集合
存储在请求
对象中
更新1
考虑这个示例代码
public class MyObject{
private String data1;
private String data2;
public void setData1(String data1) {
this.data1 = data1;
}
public String getData1() {
return data1;
}
public void setData2(String data2) {
this.data2 = data2;
}
public String getData2() {
return data2;
}
}
这是你的目标
然后对上述代码进行如下更改:
List <MyObject> list = new List<MyObject>();
if (res.next()){
MyObject obj = new MyObject();
do{
obj.setData1(res.getString(1));
obj.setData2(res.getString(2));
list.add(obj);
}while(res.next());
request.setAttribute("results", list);
}
更新2
PS:删除do/while
循环是一种很好的做法,因为它容易出错,并用while
这样的循环替换它
while(res.next()){
obj.setData1("data1", res.getString(1));
obj.setData2("data2", res.getString(2));
list.add(obj);
}
<%@page import="java.util.*"%>
<%
List <MyObject> results = (List<MyObject>) request.getAttribute("results");
for(MyObject obj : results){
out.write(obj.getData1() + " "+ obj.getData2() + "<br/>";
}
%>
更新3
像这样将其打印到jsp
while(res.next()){
obj.setData1("data1", res.getString(1));
obj.setData2("data2", res.getString(2));
list.add(obj);
}
<%@page import="java.util.*"%>
<%
List <MyObject> results = (List<MyObject>) request.getAttribute("results");
for(MyObject obj : results){
out.write(obj.getData1() + " "+ obj.getData2() + "<br/>";
}
%>
我更新了我的代码,所以现在它获得了整个数组,我现在如何在jsp中打印它?/@user1393064..while loop..in您的scriplet..因为您必须使用它..没有其他方法..您可以使用JSTL进行迭代