JAVA处理的HTML的工具类,可以生成静态HTML页面,将HTML的内容转成纯文本。可以用于一些爬虫功能或者一些特殊处理的地方,代码有比较清晰的注释,所以也可以用于I/O流和HTML标签相关正则表达式的学习。
package example.utils.html;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import Pattern;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.WriteListener;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
import org.apache.log4j.Logger;
/**
* HTML页面工具类
*
* @author Javier.Yao
*
*/
public class HtmlUtils {
private static Logger logger = Logger(HtmlUtils.class);
/**log4j2 logger标签
* 生成静态HTML页面的方法
*
* @param request
* 请求对象
* @param response
* 响应对象
* @param servletContext
* Servlet上下文
* @param fileName
* 文件名称
* @param fileFullPath
* 文件完整路径
* @param jspPath
* 需要生成静态文件的JSP路径(相对即可)
* @throws IOException
* @throws ServletException
*/
public void createStaticHTMLPage(HttpServletRequest request, HttpServletResponse response, ServletContext servletContext, String fileName, String fileFullPath, String jspPath)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");// 设置HTML结果流编码(即HTML文件编码)
RequestDispatcher rd = RequestDispatcher(jspPath);// 得到JSP资源
final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();// 用于从ServletOutputStream中接收资源
final ServletOutputStream servletOuputStream = new ServletOutputStream() {
// 用于从HttpServletResponse中接收资源
@Override
public void write(int b) throws IOException {
byteArrayOutputStream.write(b);
}
public void write(byte[] b, int off, int len) {
byteArrayOutputStream.write(b, off, len);
}
@Override
public void setWriteListener(WriteListener listener) {
}
@Override
public boolean isReady() {
return false;
}
};
final PrintWriter printWriter = new PrintWriter(new OutputStreamWriter(byteArrayOutputStream));// 把转换字节流转换成字符流
HttpServletResponse httpServletResponse = new HttpServletResponseWrapper(resp
onse) {// 用于从response获取结果流资源(重写了两个方法)
public ServletOutputStream getOutputStream() {
return servletOuputStream;
}
public PrintWriter getWriter() {
return printWriter;
}
};
rd.include(request, httpServletResponse);// 发送结果流
printWriter.flush();// 刷新缓冲区,把缓冲区的数据输出
FileOutputStream fileOutputStream = new FileOutputStream(fileFullPath);
byteArrayOutputStream.writeTo(fileOutputStream);// 把byteArrayOuputStream中的资源全部写入到fileOuputStream中
fileOutputStream.close();// 关闭输出流,并释放相关资源
response.sendRedirect(fileName);// 发送指定文件流到客户端
}
/**
* 将HTML的内容转成纯文本
*
* @param inputString 带html标签的文本内容
* @return 返回纯文本
*/
public static String Html2Text(String inputString) {
String htmlStr = inputString;
String textStr = "";
Pattern p_script;
Matcher m_script;
Pattern p_style;
Matcher m_style;
Pattern p_html;
Matcher m_html;
Pattern p_html1;
Matcher m_html1;
try {
// 定义script的正则表达式{或<script[^>]*?>[\\s\\S]*?<\\/script>}
String regEx_script = "<[\\s]*?script[^>]*?>[\\s\\S]*?<[\\s]*?\\/[\\s]*?script[\\s]*?>";
// 定义style的正则表达式{或<style[^>]*?>[\\s\\S]*?<\\/style>}
String regEx_style = "<[\\s]*?style[^>]*?>[\\s\\S]*?<[\\s]*?\\/[\\s]*?style[\\s]*?>";
String regEx_html = "<[^>]+>"; // 定义HTML标签的正则表达式
String regEx_html1 = "<[^>]+";
p_script = Patternpile(regEx_script, Pattern.CASE_INSENSITIVE);
m_script = p_script.matcher(htmlStr);
htmlStr = placeAll(""); // 过滤script标签
p_style = Patternpile(regEx_style, Pattern.CASE_INSENSITIVE);
m_style = p_style.matcher(htmlStr);
htmlStr = placeAll(""); // 过滤style标签
p_html = Patternpile(regEx_html, Pattern.CASE_INSENSITIVE);
m_html = p_html.matcher(htmlStr);
htmlStr = placeAll(""); // 过滤html标签
p_html1 = Patternpile(regEx_html1, Pattern.CASE_INSENSITIVE);
m_html1 = p_html1.matcher(htmlStr);
htmlStr = placeAll(""); // 过滤html标签
textStr = htmlStr;
} catch (Exception e) {
(e.getMessage(), e);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论