JavaWeb(3)

1.重定向

response是專門給客戶端相應(yīng)數(shù)據(jù)的響應(yīng)對象.
Http協(xié)議規(guī)定:響應(yīng)數(shù)據(jù)也要分成三部分:
響應(yīng)行,響應(yīng)頭,響應(yīng)體

功能:
public void setStatus(int sc);
    //200:請求成功
    //302:請求重定向
    //404:訪問的資源不存在
    //500:服務(wù)器內(nèi)部錯誤
public void setHeader(String name,String value);
    //設(shè)置響應(yīng)頭信息,name表示屬性名,value表示屬性值.
    //響應(yīng)重定向的路徑
    //response.setHeader("location","http://www.itcast.cn");
重定向的原理步驟:

1.1瀏覽器訪問Servlet1,但是該請求Servlet實現(xiàn)不了,想交給別的Servlet對象來實現(xiàn).
1.2在Servlet1中完成設(shè)置
A:設(shè)置狀態(tài)碼302,通知瀏覽器找其他資源.
response.setStatus(302);
B:設(shè)置響應(yīng)頭,高數(shù)瀏覽器訪問新資源的路徑.
response.setHeader("location","/項目名/servlet名");
1.3瀏覽器識別服務(wù)器返回的狀態(tài)碼.
馬上準(zhǔn)備訪問新資源
1.4瀏覽器向新資源(新的Servlet對象)發(fā)出請求.
1.5新的Servlet對象響應(yīng)瀏覽器的請求.

重定向的實現(xiàn)
    方式一:  分解式
        //1) 響應(yīng)狀態(tài)碼.
        response.setStatus(302);
        //2) 響應(yīng)重定向的路徑
        response.setHeader("location","http://www.itcast.cn");

    方式二: 合并式
        response.sendRedirect("http://www.itcast.cn");
重定向和請求轉(zhuǎn)發(fā)的區(qū)別:

2.1相對于瀏覽器而言,是幾次請求幾次響應(yīng)?
重定向:n次請求,n次響應(yīng)
請求轉(zhuǎn)發(fā):一次請求,一次響應(yīng)

2.2瀏覽器地址和窗體內(nèi)容是否一致?
重定向:一致
請求轉(zhuǎn)發(fā):不一致

2.3頁面跳轉(zhuǎn)是在服務(wù)器內(nèi)部,還是在服務(wù)器外部?
重定向:可以在服務(wù)器內(nèi)部,也可以在服務(wù)器外部
請求轉(zhuǎn)發(fā):只能在服務(wù)器內(nèi)部

2.4關(guān)于是否可以跳轉(zhuǎn)項目外部的路徑
重定向:可以. response.sendRedirect("/項目名/servlet名");項目名沒有規(guī)定死,所以可以訪問外部路徑
請求轉(zhuǎn)發(fā):不可以,request.getRequestDispatcher("/servlet名").forward(request,response);
瀏覽器已經(jīng)自動定位到項目名了,所以只能訪問內(nèi)部路徑了

2.5如果要將request當(dāng)做容器,誰更合適?
重定向: 不合適
請求轉(zhuǎn)發(fā): 更合適

頁面定時刷新到新網(wǎng)頁

應(yīng)用場景:
您訪問的資源不存在,5s后跳轉(zhuǎn)到首頁.
支付成功,3s后跳轉(zhuǎn)到首頁

實現(xiàn)方式:
通過設(shè)置refresh響應(yīng)頭信息來完成這個功能.

格式:
        response.setHeader("refresh","秒數(shù);url=網(wǎng)址");
        
    例如:
        response.setHeader("refresh","5;url=http://www.itcast.cn");
向瀏覽器輸出中文

應(yīng)用場景:
瀏覽器現(xiàn)實的內(nèi)容,下載文件等.

response: //以流的形式, 將內(nèi)容輸出給瀏覽器.
        response.getWriter();       //獲取響應(yīng)體的字符輸出流.
        response.getOutputStream(); //獲取響應(yīng)體的字節(jié)輸出流.

    注意:
        1) 字符流和字節(jié)流不能同時使用.
        2) 復(fù)制文件建議用: 字節(jié)流.  
           手動生成響應(yīng)內(nèi)容建議用: 字符流.
        3) 不需要關(guān)流, tomcat會自動調(diào)用close(),flush()方法.

//方式一: 字符流, 合并式     //推薦使用
        response.setContentType("text/html;charset=utf-8");
        response.getWriter().println("你們真的很棒!");

//方式二: 
        response.getOutputStream().write("你們真的很棒!".getBytes("gbk"));
EL表達(dá)式:

EL:Expression Language(表達(dá)語言的意思),是為了使JSP寫起來更加簡單.

作用:
快速獲取域容器中的數(shù)據(jù)(request容器,context容器).

格式:
${域?qū)ο?類名.屬性名}

eg: ${requestScope.product.name}

登錄案例
準(zhǔn)備:
        創(chuàng)建index.jsp,login.jsp
        分層建包,web層,service層,dao層,domain包,utils包
        導(dǎo)jar包,引入jdbcUtils工具類
        創(chuàng)建User實體類
實現(xiàn):
        在web層創(chuàng)建LoginServlet
        1.設(shè)置編碼
            request.setCharacterEncoding("utf-8");
       
        2.接收參數(shù)
            request.getParameter("");
            也可以使用request.getParameterMap();接收

        3.new一個User對象

        4.使用BeanUtils將接收到的map值封裝為User對象
              BeanUtils.populater(user,map);

        5.將User對象傳遞到service層
              UserService us = new UserService();
              boolean flag = us.isLogin(user);
            (這里返回值為布爾類型,如果返回true,就證明登錄成功)

        (service層)
        6.將User對象傳遞到dao層
            UserDao ud = new UserDao();
            User us = ud.islog(user);
            (這里返回值為User對象,所以要返回web層就需判斷User對象是否為空)
            return us != null;
            (應(yīng)為返回值類型為布爾類型,所以如果us為空,null != null 是false,
            如果us不為空,us != null 是true)

        (dao層)
        7.使用jdbcUtils工具類獲取連接池
        QueryRunner qr = new QueryRunner (jdbcUtils.getDateSource());
        創(chuàng)建SQL語句
        String sql = "select * from users where username =? and password = ?;";
        使用BeanHandler將查詢到的數(shù)據(jù)封裝為User對象 并返回
        return qr.query(sql, new BeanHandler<>(User.class),user.getUsername,user.getPassword);

        8.dao層的返回值將一層一層返回到web層
            現(xiàn)在判斷web層的flag
            if(flag){
                如果flag為true,頁面重定向到index.jsp頁面
            }else{
                如果flag為false,頁面請求轉(zhuǎn)發(fā)到login.jsp頁面
            }
登錄案例分析.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,711評論 19 139
  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架,建立于...
    Hsinwong閱讀 22,970評論 1 92
  • Web應(yīng)用程序 WEB,在英語中web即表示網(wǎng)頁的意思,它用于表示Internet主機(jī)上供外界訪問的資源。Inte...
    陳先森mansplain閱讀 2,439評論 1 4
  • Servlet:Sun公司制訂的一種用來擴(kuò)展Web服務(wù)器功能的組件規(guī)范。當(dāng)瀏覽器將請求發(fā)送給Web服務(wù)器(比如:a...
    南山伐木閱讀 635評論 0 4
  • 課前音樂 非常重要的王朝 關(guān)注哪個朝代,視頻中對王朝評價 生列舉 師,兩位皇帝 文,和 請生找哪些史實證明文帝的功...
    雅客坤坤閱讀 423評論 0 0

友情鏈接更多精彩內(nèi)容