为JSP的Web链接实现优雅的失败过程

时间:2017-08-22 13:21:23

标签: java jsp http-headers

我正在撰写一个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。

我的问题是:我如何将每个网络链接作为一个参数传递给班级(甚至可以) - 或者我是以完全错误的方式处理问题?

1 个答案:

答案 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转发回上一页并在响应中发送错误消息 - 然后显示响应以代替链接。