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小时内删除。