在jsp页面想显示表里的前10条数据,jsp如何调用servlet,servlet调用javabean显示数据。是直接在jsp页面用<% %>这样的形式取数据吗。

解决方案 »

  1.   

    你是不是错误理解了MVC架构?常规访问逻辑应该是:
    1、浏览器请求Servlet;
    2、Servlet准备数据(借助JavaBean或直接用DAO);
    3、Servlet将准备好的数据存入request.attribute;
    4、Servlet重定向到JSP;
    5、JSP直接使用request中的数据,用<%=request.getAttribute("xxoo")%>或${xxoo}
    如果你非要用JSP去二次查询Servlet(可能是别人早就开发好,你没得修改的),那么两种做法:
    1、在浏览器端用JS脚本,Ajax的方式去请求Servlet数据;
    2、直接在服务器端,模拟浏览器请求(HttpClient组件)去请求Servlet。
    以上两种方案中,更推荐的是方案一。
      

  2.   

    以超链接的形式调用<a fref='servlet的别名?参数=xx&参数=xx'>显示学生信息</a>
      

  3.   

    不用form提交的话。
    1)window.location = "xxx.do"
    2)< a href = "xxx.do">
    3)window.open("xxx.do")
    4) ajax
    5) httpclient
    6) httpurlconnection
      

  4.   


    package com.sxz.timecontroal;  
      
    import java.io.BufferedReader;  
    import java.io.IOException;  
    import java.io.InputStream;  
    import java.io.InputStreamReader;  
    import java.net.UnknownHostException;  
    import java.util.Calendar;  
      
    import org.apache.commons.httpclient.HttpClient;  
    import org.apache.commons.httpclient.methods.GetMethod;  
      
    /** 
     * 当可以连接网络时,取得网络上的时间使用。 
     *  
     * @author sxz 2012/01/29 
     */  
    public class CheckTImeWithNet {  
          
        /** 
         * 获取时间数据所在的网点地址 
         */  
        private static final String NET_TIME_URL = "http://open.baidu.com/special/time/";  
          
        /** 
         * 获取时间数据所在行的key值 
         */  
        private static final String NET_TIME_FIND_KEY_WORD = "window.baidu_time(";  
          
        /** 
         * 网络上的时间 
         */  
        private Calendar netDate = Calendar.getInstance();  
      
          
        /** 
         * 获取当前 网络上的时间 
         */  
        public Calendar getNetDate() {  
            return netDate;  
        }  
      
        /** 
         * 设置当前 网络上的时间 
         */  
        public void setNetDate(long netDate) {  
            this.netDate.setTimeInMillis(netDate);  
        }  
      
        @SuppressWarnings("finally")  
        public boolean checkTime() {  
              
            boolean flag = true;  
              
            try {  
                // 创建连接  
                HttpClient httpClient = new HttpClient();  
              
                // 设置请求参数  
                GetMethod getMethod = new GetMethod(NET_TIME_URL);  
              
                // 设置读取网页数据时的编码格式  
                getMethod.addRequestHeader( "Content ", "text/html,charset=GBK");  
                  
                // 进行网络连接,并获取返回结果code,根据这个code判断,当前是否连接到网络。  
                int statusCode = httpClient.executeMethod(getMethod);  
                  
                if(statusCode != 200){  
                    System.out.println("网络数据有问题,有待调整获取资源的途径");  
                    return false;  
                }  
                  
                // 获取网页信息  
                InputStream responseBody = getMethod.getResponseBodyAsStream();    
                  
                // 设置编码格式  
                BufferedReader reader = new BufferedReader(new InputStreamReader(responseBody,"GBK"));  
                  
                // 一行一行的取出信息  
                String tempBf = null;    
                while((tempBf=reader.readLine()) != null){    
                      
                    // 寻找有效数据  
                    // window.baidu_time(1327819975724);  
                    int timeRowCheckFlag = tempBf.indexOf(NET_TIME_FIND_KEY_WORD);  
                      
                    // 找到网络时间数据所在行。  
                    if(timeRowCheckFlag > 0){  
                        // 去掉数据中的无用数据,得到时间字符串  
                        // window.baidu_time(1327819975724); ->1327819975724  
                        String netTimeStr = tempBf.replaceAll("[^\\d]", "");  
                          
                        // 当前网络时间   
                        long netTimeMillis = Long.parseLong(netTimeStr);  
                          
                        // 设置当前网络上的时间  
                        this.setNetDate(netTimeMillis);  
                          
                        // 当找到网络上的的时间时,不必再从该网页上读取数据了!  
                        break;  
                    }  
                   
                }   
                  
            } catch(UnknownHostException ex){  
              
                // 网络连接失败  
                flag = true;  
                System.out.println("网络连接失败!");  
                ex.printStackTrace();  
              
            }catch (IOException e) {  
                  
                flag = true;  
                System.out.println("IO错误,程序还需要调整!");  
                e.printStackTrace();  
                  
            } catch(Exception e){  
                flag = true;  
                System.out.println("其他错误,程序还需要调整!");  
                e.printStackTrace();  
            }  
            finally{  
                return flag;  
            }  
          
        }  
      

      

  5.   

    Servlet其实直接可以通过URL调用的,你就把servle的URL输入到浏览器的地址栏里回车就好,但是你要想好,Servlet返回的数据你怎么接收。
      

  6.   

    常规访问逻辑应该是:
    1、浏览器请求Servlet;
    2、Servlet准备数据(借助JavaBean或直接用DAO);
    不通过form的action如何达到请求servlet,我现在是在一个页面显示几条数据
      

  7.   


    是不是只有在web.xml里配置了servlet,jsp页面里即使没有使用<form action="">也自动去请求了servlet
      

  8.   

    当然不是应该是开始请求就直接请求Servlet,也就是说,你最开始的超链接地址就应该是Servlet的地址:<a href="/servlet/xxoo">显示列表</a>然后Servlet里面数据准备完毕后,就用 requestDispacher.forward 到JSP页面。