jsp入門及內置對象,解決亂碼,轉發重定向,四大作用域

1、概念:英文全稱,中文意思
1.1、http:超文本傳輸協議(HyperText Transfer Protocol)
一種無狀態協議,意思就是說服務器端和客戶端瀏覽之間的不需要建立永久連接。

1.2、URL:統一資源定位符(Uniform Resource Locator),用來唯一標識互聯網上的具體的計算機的命名約定。
URL的組成:
http://www.baidu.com?tn=9801
https://news.qq.com/a/20180826/048218.htm?tn=9801

 1http:協議部分
 2、www.baidu.com:主機地址和端口號(dns轉換ip和端口號)
 3、/a/20180826/048218.htm?tn=9801&page=1:資源地址
     ?tn=9801:參數

1.3、C/S和B/S的區別?
C/S:Client(客戶端)/Server(服務器)
B/S:Browser(瀏覽器)/Server(服務器)
a) C/S:
從數據維護來說:需要維護客戶端和服務器端,
從安全性來說(偏向於局域網): C/S是優於B/S。
從技術來說:現在的一些技術B/S達不到,比如說遊戲的遊戲引擎
b) B/S:
從數據維護來說只需要維護服務器端,
從技術來說:現在的一些技術B/S達不到
未來的發展趨勢向B/S的方向

2、主流Web服務器
Tomcat、JBoss、WebLogic、WebShare、

Tomcat服務器,特點是什麼?
1、開源
2、資源佔用小
3、輕量級的應用服務器

Tomcat的目錄結構:
tomcat8
|__bin 可執行文件
|__conf 配置文件
|__lib tomcat所需的jar文件
|__logs tomcat啓動過程中產生的日誌文件
|__temp tomcat啓動和執行過程中產生的臨時文件
|__webapps 發佈的web工程
|__work jsp編譯後生成的.java和.class文件

3、jsp(全稱:Java Server Page:運行在服務器的頁面)
HTML:靜態網頁技術
JSP:動態網頁技術, 在HTML裏嵌入java代碼
1、jsp在第一次訪問時纔會執行轉換和編譯的過程.
2、如果修改了jsp文件,那麼在第二次訪問時會重新進行轉換和編譯的過程。

3.1) jsp的組成:
a) 瀏覽器解析:html、javascript、style
b) java腳本:
b.1) jsp指令
b.1.1) page指令
<%@ page language=”java” import=”java.util.*”
pageEncoding=”ISO-8859-1”
contentType=”text/html; charset=ISO-8859-1” %>
language:開發語言,默認java
import:默認導入”java.util.*”,在本頁面需要導入類或接口時,在這裏配置,多個導入之間用逗號分隔
pageEncoding:配置本頁的編碼方式,默認是ISO-8859-1(tomcat的默認編碼)
顯示中文:
utf-8:支持國際化,比如日文,韓文
gbk2312:常用的簡體中文
gbk:比gbk2312更多的漢字,包括簡體和繁體。
contentType:配置編碼方式,是指服務器發回給客戶端的編碼方式

             jsp文件的執行過程:
                1、將jsp文件轉換爲.java文件
                                                      是根據pageEncoding設置的編碼讀取文件內容轉換爲.java文件
                2、將.java文件編譯成.class文件
                                                       由JVM根據utf-8格式轉換爲.class文件,外部控制不了的
                3、執行.class文件    
                                                       發送回客戶端的編碼是根據contentType來轉換的。     

               tomcat底層對編碼是有優化:
                  tomcat將jsp轉換爲java文件是按照pageEncoding->contentType的順序查找
                  tomcat將發送響應到客戶端時是按照contentType->pageEncoding的順序查找

          b.1.2) include指令
          b.1.3) taglib指令

       b.2) jsp動作
            <jsp:include>和include指令的區別:

       b.3) jsp腳本:
          jsp聲明: 
              <%!
                //java代碼
              %>
          jsp表達式:並且最後不能加上";"
              <%=java代碼 %>
          jsp小腳本:
              <%
                 //java代碼 
              %>

    c) 註釋:  
         html註釋:<!-- html註釋 -->在瀏覽器上看得到
         java註釋:<%-- java註釋 --%>在瀏覽器上看不到

3.2)jsp的內置對象有哪些?
內置對象:就是不需要手動new的對象.
輸出:
1.out:輸出對象
四大作用域:
2.pageContext:本頁面作用域對象
3.request:請求對象-1次請求的對象
String getParameter(String name):獲得指定請求參數名的值(單個參數名)
String[] getParameterValues(String name):獲得指定請求參數名的值(一組相同名稱的參數名)

   4.session:會話對象--包含多個請求的對象
     String getId():獲得當前會話ID

   5.application:應用工程對象--包含多個會話

   6.response:響應對象
      response.sendRedirect(url);
      response.addCookie():添加1個Cookie對象返回到客戶端瀏覽器

   7.page:相當於this對象
   8.config:ServletConfig對象
   9.exception:異常對象

       練習:註冊功能
       用戶名,密碼,郵箱,興趣愛好,將這些值在第2個頁面輸出

3.3)4大作用域:從小到大的順序
pageContext–>request–>session–>application
pageContext:可以訪問本頁面作用域範圍內設置的值 (本頁面)
request:可以訪問1次請求內的作用域範圍內設置的值 (無論跳轉了多少個頁面,只要在當前請求內)
session:可以訪問當前會話內的作用域範圍內設置的值 (無論發了多少次請求,只要在會話內)
application:可以訪問當前工程應用內的作用域範圍內設置的值 (無論有多少個會話,只要在當前工程應用內)

   void setAttribute(String name,Object value):設置屬屬性名對應的值
   Object getAttribute(String name):根據指定name取值

3.4)session和cookie的區別
session中保存的數據存儲於服務器端
cookie中保存的數據存儲於客戶端瀏覽器
安全性問題:
服務器端保存數據安全性高於客戶端瀏覽器。
考慮什麼數據保存在session中,什麼數據保存在cookie。
安全性要求比較高的數據保存於Session中,安全性要求沒那麼高,不需要保密的數據就可以存儲於cookie中。

3.5)get和post的區別
a) get在網址欄時會顯示出提交的請求數據,get安全不高
提交的數據量拼接在url後面,所以是字符串長度限制的。256K
b) post在網址欄是不會顯示提交的請求數據,post的安全性會高
數據量4M

3.6)轉發和重定向的區別
a) 轉發
屬於1次請求內,請求後跳轉的頁面需要前面(前一頁面)頁面數據時,在網址欄只會顯示第1次請求的頁面
request.getRequestDispatcher(url).forward(request,response)
b) 重定向:通知瀏覽器發出第二次請求,不能共享前面頁面的數據,並且網址欄的內容會變成重定向後的頁面
response.sendRedirect(url);

3.7)中文亂碼問題
1.post
1.1) 使用new String();
1.2) 通過request.setCharacterEncoding(“utf-8”);

   2.get
     2.1) 使用new String(); 
     2.2) 如果在tomcat8之前,需要修改/conf/server.xml文件
          <Connector port="8080" protocol="HTTP/1.1"
                connectionTimeout="20000" URIEncoding="utf-8"
                redirectPort="8443" /> 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章