在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; } } }