Java中利用iframe访问一些其它域名网站网页文章时,在主页面想要通过Js获取iframe中文字内容,会出现跨域问题。由于iframe主要是显示内容,可以利用后台Servlet的api接口中后台请求iframe中要显示的地址,然后通过api接口返回网页内容。本文主要介绍一下Java Servlet中后台api接口的实现代码。

1、后台请求获取网页内容

public static String getDataFromURL(String strURL, Map<String, Object> param) throws Exception {
		URL url = new URL(strURL);
		URLConnection conn = url.openConnection();
		conn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream());
		final StringBuilder sb; 
		if (param != null) {
			sb = new StringBuilder(param.size() << 4);// 4次方
			final Set<String> keys = param.keySet();
			for (final String key : keys) {
				final Object value = param.get(key);
				sb.append(key); // 不能包含特殊字符
				sb.append('=');
				sb.append(value);
				sb.append('&');
			}
			// 将最后的 '&' 去掉
			sb.deleteCharAt(sb.length() - 1);
		}else{
			sb = new StringBuilder(100 << 4);
		}
		// writer.write("email=fd3589@163.com&password=123");
		writer.write(sb.toString());
		writer.flush();
		writer.close();
		InputStreamReader reder = new InputStreamReader(conn.getInputStream(), "utf-8");
		BufferedReader breader = new BufferedReader(reder);
		BufferedWriter w = new BufferedWriter(new FileWriter("d:/1.txt"));//获取内容输出到指定文件
		String content = null;
		String result = null;
		while ((content = breader.readLine()) != null) {
			result += content;
		}
		w.write(result);
		w.flush();
		w.close();
		return result;
	}

2、后台Servlet的代码

@RequestMapping("URLtoHtml")
	public void URLtoHtml(HttpServletRequest request,HttpServletResponse response) throws IOException{
		String strURL= request.getParameter("url");
		String html= etDataFromURL(strURL, null);;//获取的html代码
	    response.setContentType("text/html;charset=utf-8"); 
	    PrintWriter out=response.getWriter();
	    out.println(html);
  }

3、iframe中通过后台接口请求页面

利用同域名下的后台api来请求要显示的网页,本文主要是要操作iframe中的文字内容,逻辑很简单,解决跨域问题,可以使用此方法。复杂可以考虑其它方法解决iframe中跨域问题。

<iframe src="URLtoHtml?url=https://www.cnblogs.com/shijiaqi1066/p/3753224.html" width="500" height="300" id="iframe"></iframe>