response.sendRedirect - 检查重定向是不是启动
Posted
技术标签:
【中文标题】response.sendRedirect - 检查重定向是不是启动【英文标题】:response.sendRedirect - check redirect is upresponse.sendRedirect - 检查重定向是否启动 【发布时间】:2010-05-31 07:52:14 【问题描述】:从 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 页面,我没有任何可用的库(例如用于 http GET 方法的 ApacheCommons)。
【问题讨论】:
【参考方案1】:在纯 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。当您想要控制、预处理或后处理请求时,首选 JSP 上方的 HttpServlet
或 Filter
。 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?
【讨论】:
【参考方案2】:您可以尝试检查从您的服务器到目标的连接,就像在您的第一个示例中一样,但它会使线程等待这可能是不可取的。
第二个不会真正做你认为的那样 - 它只是向客户端发送一个 HTTP 302,客户端可能会也可能不会遵循重定向,但无论如何你都不会从中得到异常。
【讨论】:
您可以考虑在单独的线程中或使用 Quartz 计时器任务进行验证,并检查线程上次检查站点是否可用。 是的,这将有助于实现这里的原始目标【参考方案3】:恕我直言,这样做不是一个好主意。 您可以编写 java 代码尝试在 www.google.com 上打开与端口 80 的连接,并检查您是否收到 200 响应代码。 但请注意,这会减慢您的页面渲染时间!
【讨论】:
以上是关于response.sendRedirect - 检查重定向是不是启动的主要内容,如果未能解决你的问题,请参考以下文章
response.sendRedirect() 和 request.getRequestDispatcher().forward(request,response) 有啥区别 [重复]
response.sendRedirect - 检查重定向是不是启动
使用 response.sendRedirect() 传递隐藏参数
求jsp中response.sendRedirect()实例;
response.sendRedirect()和request.getRequestDispatcher().forward(request,response)的区别