在public ActionForward execute(ActionMapping mapping,ActionForm form, HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException, SAXException {
里面 通过url连接 访问 另一台服务器。
con = (HttpURLConnection) aUrl.openConnection();
//我想让他如果连接不上,就 继续循环访问 下一台服务器。
if(con.getResponseCode()!= 200){
continue;
}
但是 如果 有一台 服务器连接不上,程序好像 一直就试图连接,最后显示如下错误。
描 述 服务器遇到内部错误,无法满足这个访问请求异 常 java.net.ConnectException: Connection timed out: connect
java.net.PlainSocketImpl.socketConnect(Native Method)
java.net.PlainSocketImpl.doConnect(Unknown Source)
java.net.PlainSocketImpl.connectToAddress(Unknown Source)
java.net.PlainSocketImpl.connect(Unknown Source)
java.net.Socket.connect(Unknown Source)
java.net.Socket.connect(Unknown Source)
sun.net.NetworkClient.doConnect(Unknown Source)
sun.net.www.http.HttpClient.openServer(Unknown Source)
sun.net.www.http.HttpClient.openServer(Unknown Source)
sun.net.www.http.HttpClient.<init>(Unknown Source)
sun.net.www.http.HttpClient.New(Unknown Source)
sun.net.www.http.HttpClient.New(Unknown Source)
sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source)
sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)
com.searchforyou.action.SearchAllAction.execute(SearchAllAction.java:139)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
com.searchforyou.filters.CharFilter.doFilter(CharFilter.java:27)
throws IOException, ServletException, SAXException {
里面 通过url连接 访问 另一台服务器。
con = (HttpURLConnection) aUrl.openConnection();
//我想让他如果连接不上,就 继续循环访问 下一台服务器。
if(con.getResponseCode()!= 200){
continue;
}
但是 如果 有一台 服务器连接不上,程序好像 一直就试图连接,最后显示如下错误。
描 述 服务器遇到内部错误,无法满足这个访问请求异 常 java.net.ConnectException: Connection timed out: connect
java.net.PlainSocketImpl.socketConnect(Native Method)
java.net.PlainSocketImpl.doConnect(Unknown Source)
java.net.PlainSocketImpl.connectToAddress(Unknown Source)
java.net.PlainSocketImpl.connect(Unknown Source)
java.net.Socket.connect(Unknown Source)
java.net.Socket.connect(Unknown Source)
sun.net.NetworkClient.doConnect(Unknown Source)
sun.net.www.http.HttpClient.openServer(Unknown Source)
sun.net.www.http.HttpClient.openServer(Unknown Source)
sun.net.www.http.HttpClient.<init>(Unknown Source)
sun.net.www.http.HttpClient.New(Unknown Source)
sun.net.www.http.HttpClient.New(Unknown Source)
sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source)
sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)
com.searchforyou.action.SearchAllAction.execute(SearchAllAction.java:139)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
com.searchforyou.filters.CharFilter.doFilter(CharFilter.java:27)
楼主【thankyou2008】截止到2008-07-21 17:41:21的历史汇总数据(不包括此帖):
发帖的总数量:19 发帖的总分数:1380 每贴平均分数:72
回帖的总数量:26 得分贴总数量:5 回帖的得分率:19%
结贴的总数量:17 结贴的总分数:1180
无满意结贴数:1 无满意结贴分:40
未结的帖子数:2 未结的总分数:200
结贴的百分比:89.47 % 结分的百分比:85.51 %
无满意结贴率:5.88 % 无满意结分率:3.39 %
楼主加油
里面 通过url连接 访问 另一台服务器。
con = (HttpURLConnection) aUrl.openConnection();
//我想让他如果连接不上,就 继续循环访问 下一台服务器。
if(con.getResponseCode()!= 200){
continue;
} 把这一段循环的代码帖出来看下
//下面两行是 从 一个xml文件中得到 url的代码。其中url格式为http://192.168.1.102:8080/
Element serveritem=(Element) servers.item(i);
String url =serveritem.getElementsByTagName("url").item(0).getFirstChild().getNodeValue();
aUrl = new URL(url+"SearchForYou/SearchCellAction.do?searchContent="+ URLEncoder.encode(searchContent,"UTF-8"));
//打印一下 aurl
System.out.println(aUrl);
con = (HttpURLConnection) aUrl.openConnection();
if(con.getResponseCode()!= 200){
continue;
}
con.setDefaultUseCaches(false);
con.setUseCaches(false);
// 指示应用程序要从 URL 连接读取数据
con.setDoOutput(true);
con.setDoInput(true);//
con.connect();
//
//
//
//从Url连接中获取输入流信息 (即:服务器的输出流信息)
InputStream in = con.getInputStream();
objectInputStream = new ObjectInputStream(in);
try {
serializeObject= objectInputStream.readObject();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
linkedListCell=(LinkedList) serializeObject;
objectInputStream.close();
//把从 每一个服务器内 获取的 记录集加到内存 中的静态链表 中
SearchResultLinkedListUtil.linkedList.addAll(linkedListCell);
}
if(con.getResponseCode()!= 200){
continue;
}
我想改成这样怎么样
try{
con = (HttpURLConnection) aUrl.openConnection();
if(con.getResponseCode()!= 200){
continue;
} } catch(){
continue;
}
con = (HttpURLConnection) aUrl.openConnection();
if(con.getResponseCode()!= 200){
continue;
} } catch(Exception e){
continue;
}
这一个解决方法,会产生一个 问题,如果 con = (HttpURLConnection) aUrl.openConnection(); 如果 有一个连接有问题,它会试图连接好多次,
我也不知道 系统 试图连接 了几次,?
问题是,这样有一台机子 有问题,我整个 的查询时间 就会很长,有没解决的办法?laorer老师。
//下面两行是从一个xml文件中得到url的代码。其中url格式为http://192.168.1.102:8080/
Element serveritem = (Element) servers.item(i);
String url = serveritem.getElementsByTagName("url").item(0).getFirstChild().getNodeValue();
aUrl = new URL(url + "SearchForYou/SearchCellAction.do?searchContent=" + URLEncoder.encode(searchContent,"UTF-8"));
//打印一下 aurl
System.out.println(aUrl);
con = (HttpURLConnection) aUrl.openConnection();
if (con.getResponseCode() != 200) {
continue;
}
con.setDefaultUseCaches(false);
con.setUseCaches(false);
//指示应用程序要从 URL 连接读取数据
con.setDoOutput(true);
con.setDoInput(true);
con.connect();
//从Url连接中获取输入流信息 (即:服务器的输出流信息)
InputStream in = con.getInputStream();
objectInputStream = new ObjectInputStream(in);
try {
serializeObject= objectInputStream.readObject();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
linkedListCell = (LinkedList) serializeObject;
objectInputStream.close();
//把从每一个服务器内获取的记录集加到内存中的静态链表中
SearchResultLinkedListUtil.linkedList.addAll(linkedListCell);
}
http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=121&threadID=20964\
**看下,http://www.5do8.com/blog/doc/630/index.aspx不要叫我老师吧,我对这个也不熟悉,只是看你说的情况加上那个,刚刚baidu了一下,估计可以解决你的问题,你再看一下上面两个链接
大S说得对,代码,帖出来时,最好整理一下,然后再加上相应的格式, 要不看起来不舒服
con.setUseCaches(false);
jdk文档上说:
将此 URLConnection 的 useCaches 字段的值设置为指定的值。
有些协议用于文档缓存。有时候能够进行“直通”并忽略缓存尤其重要,例如浏览器中的“重新加载”按钮。如果连接中的 UseCaches 标志为 true,则允许连接使用任何可用的缓存。如果为 false,则忽略缓存。默认值来自 DefaultUseCaches,它默认为 true。
参数:
usecaches - 一个指示是否允许缓存的 boolean 值 这一点不太明白,比如它的 缓存 指的 是什么呢 ?
对我 这个 连接,他代表什么 意思呢 ?
2.我已经 在前面 使用了 con = (HttpURLConnection) aUrl.openConnection();
用openconnection方法打开了一个连接,后面 又con.connect();这样 会不会重复?谢谢。