当前位置: 代码迷 >> Java Web开发 >> 不用form怎么调用servlet
  详细解决方案

不用form怎么调用servlet

热度:2531   发布时间:2013-02-25 21:17:33.0
不用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                      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;          }            }    }
  相关解决方案