JavaEE--Response

Response對象

設置狀態碼

void setStatus(int sc)設置狀態碼

設置響應頭(key:value)

一個key對應一個value或一個key對應多個value

  • void setHeader(String name, String value)(一個key對應一個value)經常使用
    setHeader(“aa”,”bb”);
    setHeader(“aa”,”cc”);
    結果:aa:cc
  • void addHeader(String name, String value)(一個key對應多個value)
    addHeader(“aa”,”bb”);
    addHeader(“aa”,”cc”);
    結果:aa:bb,cc

設置響應體

  • ServletOutputStream getOutputStream()字節輸出流
  • PrintWriter getWriter()字符輸出流

重定向

  • 登錄頁面重定向
  • 狀態碼302,響應頭loaction

Api

方法一:
// 設置302的狀態碼
response.setStatus(302);
// 設置地址
response.setHeader("location", "/day10/response/login.html");
方法二:
// response對象提供了一個方法,可以完成重定向。
response.sendRedirect("/day10/response/login.html");

案例

登陸頁面,用戶名和密碼的登陸頁面,用戶名和密碼都是admin,
如果有一個不是,重定向到登陸頁面,重新登陸。

login.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <form action="/Day21/login" method="post">
        <table border="1" width="50%">
            <tr>
                <td>輸入姓名</td>
                <td><input type="text" name="username"></td>
            </tr>
            <tr>
                <td>輸入密碼</td>
                <td><input type="password" name="password"></td>
            </tr>
            <tr>
                <td colspan="2">
                    <input type="submit"  value="提交">               </td>
            </tr>
        </table>
    </form>
</body>
</html>

LoginServlet

public class LoginServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        if("admin".equals(username)&&"admin".equals(password)){
            response.getWriter().write("success");
        }else{
////            方法一
//          //設置狀態碼
//          response.setStatus(302);
////            設置地址
//          response.setHeader("location", "/Day21/response/login.html");
//          方法二
            response.sendRedirect("/Day21/response/login.html");
        }
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);

    }

}

頁面定時刷新(頁面讀秒操作)

響應頭

refresh

案例

public class RefreshServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        response.getWriter().write("<h1>頁面將在5秒後跳轉</h1>");
        //通過refresh頭完成刷新頁面
        response.setHeader("refresh", "5;url=/Day21/response/login.html");
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);

    }

}

上面有一個問題是秒數不能動態改變,我們可以換另外一個方法實現,在Html中實現

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<!--  設置請求頭 -->
<meta http-equiv="refresh" content="5;url=/Day21/response/login.html">
<title>Insert title here</title>
</head>
<body onload="run()">
    <h2>
        頁面將在<span id="spanId">5</span>秒後跳轉
    </h2>
</body>
<script type="text/javascript">
    /*
        頁面一加載執行onload()
    */
    var x=5;
    function run(){
        var span=document.getElementById("spanId");
        span.innerHTML=x;
        x--;
        window.setTimeout("run()", 1000);
    }

</script>
</html>

禁用瀏覽器的緩存(三個頭信息)

一般應用在:網銀系統
Cache-Control : no-cache
Expires: -1 值是日期類型(setDateHeader())
Pragma : no-cache

案例

public class CEPServlet extends HttpServlet {


    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setHeader("Cache-Control", "no-cache");
        response.setHeader("Pragma", "no-cache");
//      這裏是設置dateheader
        response.setDateHeader("Expires", -1);

        Date date=new Date();
        SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String str = simpleDateFormat.format(date);
        response.getWriter().write(str);

    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);

    }

}

向頁面輸出中文(亂碼問題)

字節流

    /**
     * 字節輸出中文
     *  * 如果不設置頭的話,不一定會亂碼,看瀏覽器配置
     *  * 解決辦法
     *      1.設置瀏覽器打開文件時所採用的編碼
     *          response.setHeader("Content-Type", "text/html;charset=UTF-8");
     *      2.獲取字符串byte數組時編碼和打開文件時編碼一致。
     *          "亂碼測試".getBytes("UTF-8")
     * @throws IOException 
     */
    public void run1(HttpServletResponse response) throws IOException{
        // 設置瀏覽器打開文件時編碼
        response.setHeader("Content-Type", "text/html;charset=UTF-8");
        // 獲取字節輸出流
        OutputStream os = response.getOutputStream();
        // 輸出中文
        os.write("亂碼測試".getBytes("UTF-8"));
    }

字符流

    /**
     * 字符輸出中文
     *  * 肯定亂碼
     *      response緩衝區的編碼,默認值ISO-8859-1
     *  方法一:
     *  1.   設置response緩衝編碼     
     *      response.setCharacterEncoding("UTF-8");
     *  2。   設置瀏覽器打開文件所採用的編碼
     *      response.setHeader("Content-Type", "text/html;charset=UTF-8");
     *  方法二:
     *   簡寫方式
     *      response.setContentType("text/html;charset=UTF-8");
     *      
     * @param response
     * @throws IOException
     */
    public void run2(HttpServletResponse response) throws IOException{
        // 設置response緩衝區的編碼
        //response.setCharacterEncoding("UTF-8");
        // 設置瀏覽器打開文件所採用的編碼
        //response.setHeader("Content-Type", "text/html;charset=UTF-8");

        // 簡寫的形式(等於上面兩句)
        response.setContentType("text/html;charset=UTF-8");
        response.getWriter().write("哈羅臥得");
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章