在用servlet+jsp開發中,無論是服務器端跳轉、客戶端跳轉還是表單請求路徑,在servlet和jsp中路徑的表達是不一樣的。app
聲明: jsp
一、項目名爲zzzz,端口號改成默認(80)this
2 <servlet-mapping>
<servlet-name>X</servlet-name>
<url-pattern>/servlet/X</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>n</servlet-name>
<url-pattern>/servlet/n</url-pattern>
</servlet-mapping>url
三、jsp頁面所有在WebRoot(根)目錄下spa
四、絕對路徑指的是和當前頁(jsp或者servlet)相對位置,例以下列表單請求A:中的相對路徑表示index1.jsp和index.jsp在同一個(物理)位置orm
1、在jsp中get
一、表單請求servlet
A:在index.jsp請求index1.jspit
用相對路徑:<form action="index1.jsp">io
用絕對路徑:<form action="/zzzz/index1.jsp">
B:在index.jsp請求servlet
用相對路徑:<form action="servlet/n">
用絕對路徑:<form action="/zzzz/servlet/n">
二、客戶端跳轉
A:超鏈接
相對路徑:<a href="index1.jsp">跳轉</a>或者<a href="servlet/n">跳轉</a>
絕對路徑:<a href="/zzzz/index1.jsp">跳轉</a>或者<a href="/zzzz/servlet/n">跳轉</a>
B:sendRedirect方法
相對路徑:response.sendRedirect("index1.jsp")或者response.sendRedirect("servlet/n");
絕對路徑:response.sendRedirect("/zzzz/index1.jsp")或者response.sendRedirect("/zzzz/servlet/n");
三、服務器端跳轉
相對路徑:request.getRequestDispatcher("index1.jsp").forward(request,response);
request.getRequestDispatcher("servlet/n").forward(request,response);
絕對路徑:request.getRequestDispatcher("/index1.jsp").forward(request,response)注意:不是request.getRequestDispatcher("/zzzz/index1.jsp").forward(request,response);
request.getRequestDispatcher("/servlet/n").forward(request,response);
this.getServletContext().getRequestDispatcher("/index1.jsp").forward(request,response);
總結:除了服務器端跳轉外,相對路徑比絕對路徑多了/zzzz
2、在servlet中
一、客戶端跳轉
A:超鏈接
相對路徑:PrintWriter out=response.getWriter();
out.println("<a href='../index.jsp'>跳轉</a>");
或者
PrintWriter out=response.getWriter();
out.println("<a href='X'>跳轉</a>");
絕對路徑:PrintWriter out=response.getWriter();
out.println("<a href='/zzzz/index.jsp'>跳轉</a>");
或者
PrintWriter out=response.getWriter();
out.println("<a href='/zzzz/servlet/X'>跳轉</a>");
B:sendRedirect方法
相對路徑:response.sendRedirect("../index1.jsp")或者response.sendRedirect("X");
絕對路徑:response.sendRedirect("/zzzz/index1.jsp")或者response.sendRedirect("/zzzz/servlet/X");
二、服務器端跳轉
相對路徑:request.getRequestDispatcher("../index.jsp").forward(request,response);
request.getRequestDispatcher("X").forward(request,response);
request.getRequestDispatcher("./X").forward(request,response);
絕對路徑:request.getRequestDispatcher("/index.jsp").forward(request,response)注意:(不是request.getRequestDispatcher("/zzzz/index.jsp").forward(request,response);)
request.getRequestDispatcher("/servlet/X").forward(request,response);
this.getServletContext().getRequestDispatcher("/index.jsp").forward(request,response);
總結:
一、 絕對路徑
無論是在jsp亦或在servlet中,除了服務器端跳轉的絕對路徑不用寫上/zzzz(項目名)外都是正常的絕對路徑
二、相對路徑
無論是jsp還是servlet中,都是正常的相對路徑
三、有意思的是,在jsp中的服務器端跳轉時,路徑index1.jsp,./index1.jsp,/index1.jsp的效果是同樣,前兩個是相對路徑,第三個是絕對路徑
四、注意,這裏所說的服務器端跳轉不僅僅是用request.getRequestDispatcher().forward()方法,也能夠是<jsp:forward page=""></jsp:forward>