从JSP我只想重定向到另一个页面......
<% response.sendRedirect("http://www.google.com/"); %>
我可以查看google.com是否已启动,然后重定向(或写一个其他消息)...
类似的东西:
<% if(ping("www.google.com")) {
response.sendRedirect("http://www.google.com/");
} else {
// write a message
}%>
或者
<% try {
response.sendRedirect("http://www.google.com/");
} catch(SomeException e) {
// write a message
}%>
它只是一个JSP页面,我没有任何可用的库(如Apache Gmons for http GET方法)。
答案 0 :(得分:0)
您可以尝试检查服务器与目标之间的连接,就像在第一个示例中一样,但它会使线程等待这可能是不可取的。
第二个不会真正做你认为它做的事情 - 它只是向客户端发送一个HTTP 302,客户端可能会或可能不会遵循重定向,但无论如何你不会从中获得异常。< / p>
答案 1 :(得分:0)
这是恕我直言,这不是一个好主意。 您可以编写试图在www.google.com上打开与端口80的连接的Java代码,并检查是否收到200响应代码。 但请注意,这会降低页面渲染时间!
答案 2 :(得分:0)
在纯JSP中,我会抓住JSTL(只需将jstl-1.2.jar放在/WEB-INF/lib
)<c:import>
和<c:catch>
中。当无法联系到另一方时,<c:import>
会抛出IOException
(FileNotFoundException
)。使用<c:catch>
,您可以将任何Throwable
捕获到变量中。使用<c:choose>
(或<c:if>
),您可以相应地处理结果。
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<c:set var="url" value="http://google.com" />
<c:catch var="e">
<c:import url="${url}" var="ignore"></c:import>
</c:catch>
<c:choose>
<c:when test="${not empty e}">
<p>Site doesn't exist
</c:when>
<c:otherwise>
<c:redirect url="${url}" />
</c:otherwise>
</c:choose>
var="ignore"
是必需的,因为否则它将包含JSP中的所有页面内容。
那就是说,我不会为此使用JSP。当您想要控制,预处理或后处理请求时,首选上面的HttpServlet
或Filter
JSP。 JSP是一种视图技术,应该按原样使用。在HttpServlet
我会更喜欢这样:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String url = "http://google.com";
try {
new URL(url).openStream(); // Will throw UnknownHostException or FileNotFoundException
response.sendRedirect(url);
} catch (IOException e) {
throw new ServletException("URL " + url + " does not exist", e); // Handle whatever you want. Forward to JSP?
}
}