SpringMVC 中无缓存的BasicController的设计

BaseController是一个基础控制器,用于无缓存响应处理。它包含各种方法如输出文本、HTML、XML和JSON内容,同时也支持设置下载文件头和禁止缓存的HTTP头。方法initResponseHeader分析并设置contentType与headers,setNoCacheHeader则用于确保客户端不缓存响应。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class BaseController {

    // header 常量定义
    private static final String DEFAULT_ENCODING = "UTF-8";
    private static final boolean DEFAULT_NOCACHE = true;
    // Content Type 常量定义
    public static final String TEXT_TYPE = "text/plain";
    public static final String JSON_TYPE = "application/json";
    public static final String XML_TYPE = "text/xml";
    public static final String HTML_TYPE = "text/html";
    public static final String JS_TYPE = "text/javascript";
    public static final String EXCEL_TYPE = "application/vnd.ms-excel";
    public static int PAGE_NUMERIC = 20;

    

    /**
     * 直接输出内容的简便函数.
     */
    protected void render(final String contentType, final String content,
            final HttpServletResponse response) {
        HttpServletResponse resp = initResponseHeader(contentType, response);
        try {
            resp.getWriter().write(content);
            resp.getWriter().flush();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 直接输出文本.
     */
    protected void outText(final String text, final HttpServletResponse response) {
        render(TEXT_TYPE, text, response);
    }

    /**
     * 直接输出HTML.
     */
    protected void outHtml(final String html, final HttpServletResponse response) {
        render(HTML_TYPE, html, response);
    }

    /**
     * 直接输出XML.
     */
    protected void outXml(final String xml, final HttpServletResponse response) {
        render(XML_TYPE, xml, response);
    }

    /**
     * 输出JSON,可以接收参数如: [{'name':'www'},{'name':'www'}],['a','b'],new
     * String[]{'a','b'},合并如下:jsonString = "{TOTALCOUNT:" + totalCount + ",
     * ROOT:" + jsonString + "}";
     *
     * @param jsonString
     *            json字符串.
     *
     */
    protected void outJson(final String json, final HttpServletResponse response) {
        render(JSON_TYPE, json, response);
    }

    /**
     * 设置让浏览器弹出下载对话框的Header.
     *
     * @param fileName
     *            下载后的文件名.
     */
    protected void setFileDownloadHeader(HttpServletResponse response,
            String fileName) {
        try {
            // 中文文件名支持
            String encodedfileName = new String(fileName.getBytes(),
                    "ISO8859-1");
            response.setHeader("Content-Disposition", "attachment; filename=\""
                    + encodedfileName + "\"");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 分析并设置contentType与headers.
     */
    protected HttpServletResponse initResponseHeader(final String contentType,
            final HttpServletResponse response) {
        // 分析headers参数
        String encoding = DEFAULT_ENCODING;
        boolean noCache = DEFAULT_NOCACHE;
        // 设置headers参数
        String fullContentType = contentType + ";charset=" + encoding;
        response.setContentType(fullContentType);
        if (noCache) {
            setNoCacheHeader(response);
        }

        return response;
    }

    /**
     * 设置客户端无缓存Header.
     */
    protected void setNoCacheHeader(HttpServletResponse response) {
        // Http 1.0 header
        response.setDateHeader("Expires", 0);
        response.addHeader("Pragma", "no-cache");
        // Http 1.1 header
        response.setHeader("Cache-Control", "no-cache");
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值