日期:2014-05-17  浏览次数:20733 次

不用form如何调用servlet
在jsp页面想显示表里的前10条数据,jsp如何调用servlet,servlet调用javabean显示数据。

是直接在jsp页面用<% %>这样的形式取数据吗。

------解决方案--------------------
你是不是错误理解了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。
以上两种方案中,更推荐的是方案一。
------解决方案--------------------
以超链接的形式调用<a fref='servlet的别名?参数=xx&参数=xx'>显示学生信息</a>
------解决方案--------------------
不用form提交的话。
1)window.location = "xxx.do"
2)< a href = "xxx.do">
3)window.open("xxx.do")
4) ajax
5) httpclient
6) httpurlconnection

------解决方案--------------------
Java code

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