1. 程式人生 > 實用技巧 >注意點-隨看隨想

注意點-隨看隨想

目錄

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

}或<%=request.getContextPath()%>

取出來的就是/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)重定向的特點:

  1. 位址列發生變化
  2. 重定向可以訪問其他站點(伺服器)的資源
  3. 重定向是兩次請求。不能使用request物件來共享資料

(forward)轉發的特點:

  1. 轉發位址列路徑不變
  2. 轉發只能訪問當前伺服器下的資源
  3. 轉發是一次請求,可以使用request物件來共享資料

所以轉發可以用request物件傳值,重定向要用session物件傳值