我正在撰写一个JSP
网络应用,其中包含许多外部网络链接。我正在尝试编写一个Java class
,它将从外部网站链接中获取HTTP response
代码,如果网站不可用,则会向用户显示有意义的消息。
我的工作类将HTTP response
代码输出到JSP:
public class httpResponseUtility {
public int urlResponse (int respCode) throws IOException {
HttpURLConnection urlConn = null;
URL calUrl = new URL("http://www.google.co.uk/400"); //Replace with URL string
try {
urlConn = (HttpURLConnection) calUrl.openConnection();
urlConn.setRequestMethod("GET");
urlConn.connect();
respCode = urlConn.getResponseCode();
}
catch (IOException e) {
urlConn.disconnect();
}
return respCode;
}
}
但是,不是在URL calUrl行中定义外部URL - (google链接用于验证响应传递回JSP) - 我想传入其中一个定义的其他外部链接JSP然后将'HTTP Response'传递回主JSP,以调用单独的错误处理jsp。
我的问题是:我如何将每个网络链接作为一个参数传递给班级(甚至可以) - 或者我是以完全错误的方式处理问题?
答案 0 :(得分:0)
您的HTML链接看起来像这样。
<a href="/OutboundHttpServlet?url=http://outboundsiteone.com">http://outboundsiteone.com</a>
用户认为他们将转到http://outboundsiteone.com
,但他们实际上只是将该URL发送到servlet。
@WebServlet("/OutboundHttpServlet")
public class OutboundHttpServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public OutboundHttpServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String uri = request.getParameter("url");
response.setContentType("text/html");
int code = getCode(uri);
if(code >= 200 && code <= 299) {
response.setHeader("Location", uri);
}
response.setHeader("Location", new String("yourerrorpage.jsp"));
}
public int getCode(String uri) throws IOException {
HttpURLConnection conn = null;
int response = -1;
URL url = new URL(uri);
try {
conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.connect();
response = conn.getResponseCode();
} catch (IOException e) {
conn.disconnect();
}
return response;
}
}
后端代码基本上只是检查用户希望去的URL的错误状态代码。如果成功,他们会转发到那里。如果出现错误,则会将其转发到您的错误页面。您还可以将jsut转发回上一页并在响应中发送错误消息 - 然后显示响应以代替链接。