注意點-隨看隨想
目錄
- req.getContextPath()作用
- JSP/Servlet中的相對路徑和絕對路徑
- include和iframe的區別
- dao層的介面方法引數中為什麼都要加上@Param註解
- param 和attribute的區別
- session和request物件區別
- 重定向和轉發
req.getContextPath()作用
得到的是專案的虛擬路徑:例如
訪問路徑為:http://localhost:8080/blue/response.jsp
request.getContextPath()得到的就是 /blue
JSP/Servlet中的相對路徑和絕對路徑
伺服器端
相對地址指的是相對於你的web應用的地址,這個地址是在伺服器端解析的
(不同於html和javascript中的相對地址,他們是由客戶端瀏覽器解析的)也就是說這時候在jsp和servlet中的相對地址應該是相對於你的web應用,即相對於http://127.0.0.1/webapp/的。
請求轉發:
//跳轉頁面
req.getRequestDispatcher("/WEB-INF/pages/store/company/update.jsp").forward(req, resp);
客戶端
所有的html頁面中的相對地址都是相對於伺服器根目錄(http://127.0.0.1/)的,
而不是(根目錄下的該Web應用的目錄)http://127.0.0.1/webapp/的。
請求重定向
//加個標記引數 //uri : /store/company?operation=list @WebServlet("/store/company") public class CompanyServlet extends BaseServlet { }
//請求重定向 地址改變、不可以共享request、絕對路徑
resp.sendRedirect(req.getContextPath() + "/store/company?operation=list");
${pageContext.request.contextPath}
是JSP取得絕對路徑的方法,
等價於<%=request.getContextPath()%>
也就是取出部署的應用程式名或者是當前的專案名稱
比如我的專案名稱是demo1在瀏覽器中輸入為http://localhost:8080/demo1/a.jsp ${pageContext.request.contextPath
取出來的就是/demo1,而"/"代表的含義就是http://localhost:8080
故有時候專案中這樣寫${pageContext.request.contextPath}/a.jsp
include和iframe的區別
https://www.cnblogs.com/JolinChan/p/4039523.html
dao層的介面方法引數中為什麼都要加上@Param註解
因為java沒有儲存行參的記錄,java在執行的時候會把List queryAll(int offset,int limit);中的引數變成這樣:queryAll(int arg0,int arg1),這樣我們就沒有辦法去傳遞多個引數。所以需要使用@Param註解給方法引數命名,然後在xml檔案的該dao層方法對應的sql語句中就可以正常使用@Param註解的引數名
param 和attribute的區別
相同 : 二者都是封裝在request中
param: JSP-->Servlet [客戶端]
屬性是在後臺servlet中設定並獲取的 , 用方法setAttribute(name, o) 和 getAttribute(name)實現;
String getParameter(String name),即只能返回String型別資料。
沒有setParameter()這一說。
attribute:Servlet-->Servlet/JSP [容器內]
引數主要是將前端頁面標籤攜帶的資訊(標籤的name作為引數名,標籤的value作為引數值)作為引數(可以類似地看成在前端頁面設定引數)往後臺傳遞資料
void setAttribute(String name,Obejct o);
Object getAttribute(String name);
先在request中set,然後才能在request中get
https://www.zhihu.com/question/325301954/answer/690322222
session和request物件區別
轉自https://blog.csdn.net/lameraaa/article/details/103384993
主要區別在於 生命週期不同
request
生命週期為一個請求,範圍較小。
不需要宣告,系統自動封裝了,可以直接用。
存值:request.setAttribute(“名字”, 要存的值);
取值:request.getParameter(“名字”);
或者用EL表示式: ${名字}
session
生命週期為一次會話,一次會話內session儲存的內容將一直存在。
宣告:HttpSession session = request.getSession();
存值:session.setAttribute(“名字”, 要存的值);
取值:session.getAttribute(“名字”)
或者用EL表示式 ${sessionScope.所存值的物件 }
比較
request佔用資源比較少,安全性比較高,但缺乏持續性。
session相對來說對資源的消耗會大點,安全性相對來說也會稍微低點,但它生命週期長。
如果可以使用request的情況下,儘量使用request ,因為相對於伺服器來說資源的消耗還是比較重要的。
重定向和轉發
(redirect)重定向的特點:
- 位址列發生變化
- 重定向可以訪問其他站點(伺服器)的資源
- 重定向是兩次請求。不能使用request物件來共享資料
(forward)轉發的特點:
- 轉發位址列路徑不變
- 轉發只能訪問當前伺服器下的資源
- 轉發是一次請求,可以使用request物件來共享資料
所以轉發可以用request物件傳值,重定向要用session物件傳值