java servlet 路径_JavaServlet 路径书写总结
在寫javaweb項(xiàng)目的時(shí)候,總會(huì)遇到路徑書寫的問(wèn)題,現(xiàn)在將其作個(gè)總結(jié)。
在javaweb中需要書寫路徑的地方主要有這四大類:
客服端路徑
超鏈接
表單
重定向
服務(wù)器端路徑
轉(zhuǎn)發(fā)
包含
資源獲取路徑
servletContext獲取資源
ClassLoader獲取資源
Class獲取資源
路徑
現(xiàn)分別作介紹
其構(gòu)建的javaweb如下:
1客服端路徑
A超鏈接
pageEncoding="UTF-8"%>
html?PUBLIC?"-//W3C//DTD?HTML?4.01?Transitional//EN"?"http://www.w3.org/TR/html4/loose.dtd">
頁(yè)面A這是絕對(duì)地址超鏈接
這是以"/"開(kāi)頭的相對(duì)地址超鏈接
這是不以"/"開(kāi)頭的相對(duì)地址超鏈接
B表單
pageEncoding="UTF-8"%>
html?PUBLIC?"-//W3C//DTD?HTML?4.01?Transitional//EN"?"http://www.w3.org/TR/html4/loose.dtd">
Insert?title?hereusername:
username:
username:
username:
username:
username:
C重定向
package?cn.ccnu.path;
import?java.io.IOException;
import?javax.servlet.ServletException;
import?javax.servlet.http.HttpServlet;
import?javax.servlet.http.HttpServletRequest;
import?javax.servlet.http.HttpServletResponse;
/*
*?重定向有三種路徑書寫方式
*??????1.絕對(duì)路徑
*??????2.以"/"開(kāi)頭的相對(duì)路徑
*??????3.不以"/"開(kāi)頭的相對(duì)路徑
*/
public?class?RedirectServlet?extends?HttpServlet?{
public?void?doGet(HttpServletRequest?request,?HttpServletResponse?response)
throws?ServletException,?IOException?{
response.sendRedirect("http://localhost:8080/javaee/jsp/b.jsp");
/*
*?2.以"/"開(kāi)頭的相對(duì)路徑
*??????此時(shí),/代表整個(gè)web工程的路徑,即http://localhost:8080/
*/
//??????response.sendRedirect("/javaee/jsp/b.jsp");
/*
*?3.不以"/"開(kāi)頭的相對(duì)路徑
*??????此時(shí)是相對(duì)于當(dāng)前資源的相對(duì)路徑
*??????當(dāng)前資源路徑為:http://localhost:8080/javaee/RedirectServlet
*??????即表示:RedirectServlet在路徑http://localhost:8080/javaee之下
*??????而b.jsp在http://localhost:8080/javaee/jsp/b.jsp
*??????所以最終地址寫為:jsp/b.jsp
*/
//??????response.sendRedirect("jsp/b.jsp");
}
public?void?doPost(HttpServletRequest?request,?HttpServletResponse?response)
throws?ServletException,?IOException?{
doGet(request,?response);
}
}
2服務(wù)器端路徑
A請(qǐng)求轉(zhuǎn)發(fā)
package?cn.ccnu.path;
import?java.io.IOException;
import?javax.servlet.ServletException;
import?javax.servlet.http.HttpServlet;
import?javax.servlet.http.HttpServletRequest;
import?javax.servlet.http.HttpServletResponse;
/*
*?服務(wù)器端的路徑不能是絕對(duì)路徑,只能是相對(duì)路徑,也分為以/開(kāi)頭和不以/開(kāi)頭兩種
*??????1.以"/"開(kāi)頭的相對(duì)路徑
*??????2.不以"/"開(kāi)頭的相對(duì)路徑
*/
public?class?DispatcherServlet?extends?HttpServlet?{
public?void?doGet(HttpServletRequest?request,?HttpServletResponse?response)
throws?ServletException,?IOException?{
/*
*?1.以"/"開(kāi)頭的相對(duì)路徑
*??????此時(shí),/代表當(dāng)前web項(xiàng)目,即:http://localhost:8080/javaee
*/
//??????request.getRequestDispatcher("/jsp/b.jsp").forward(request,?response);
/*
*?2.不以"/"開(kāi)頭的相對(duì)路徑
*??????相對(duì)于當(dāng)前資源的相對(duì)路徑
*??此時(shí),當(dāng)前資源的路徑為:http://localhost:8080/javaee/DispatcherServlet
*??所以要轉(zhuǎn)發(fā)去的資源的路徑以:http://localhost:8080/javaee開(kāi)頭
*/
request.getRequestDispatcher("jsp/b.jsp").forward(request,?response);
}
public?void?doPost(HttpServletRequest?request,?HttpServletResponse?response)
throws?ServletException,?IOException?{
doGet(request,?response);
}
}
B請(qǐng)求包含
package?cn.ccnu.path;
import?java.io.IOException;
import?javax.servlet.ServletException;
import?javax.servlet.http.HttpServlet;
import?javax.servlet.http.HttpServletRequest;
import?javax.servlet.http.HttpServletResponse;
/*
*?請(qǐng)求包含不能書寫絕對(duì)地址,只能書寫相對(duì)地址
*??????1.以"/"開(kāi)頭的相對(duì)路徑
*??????2.不以"/"開(kāi)頭的相對(duì)路徑
*
*/
public?class?IncludeServlet?extends?HttpServlet?{
public?void?doGet(HttpServletRequest?request,?HttpServletResponse?response)
throws?ServletException,?IOException?{
/*
*?1.以"/"開(kāi)頭的相對(duì)路徑
*??????此時(shí),/代表當(dāng)前web項(xiàng)目,即:http://localhost:8080/javaee
*/
//??????request.getRequestDispatcher("/jsp/b.jsp").include(request,?response);
/*
*?2.不以"/"開(kāi)頭的相對(duì)路徑
*??????相對(duì)于當(dāng)前資源的相對(duì)路徑
*??此時(shí),當(dāng)前資源的路徑為:http://localhost:8080/javaee/IncludeServlet
*??所以要轉(zhuǎn)發(fā)去的資源的路徑以:http://localhost:8080/javaee開(kāi)頭
*/
request.getRequestDispatcher("jsp/b.jsp").include(request,?response);
}
public?void?doPost(HttpServletRequest?request,?HttpServletResponse?response)
throws?ServletException,?IOException?{
doGet(request,?response);
}
}
3資源獲取路徑
AServletContext獲取資源
package?cn.ccnu.path;
import?java.io.IOException;
import?java.io.InputStream;
import?java.util.Properties;
import?javax.servlet.ServletException;
import?javax.servlet.http.HttpServlet;
import?javax.servlet.http.HttpServletRequest;
import?javax.servlet.http.HttpServletResponse;
/*
*?ServletContext獲取資源必須是相對(duì)路徑,不能是絕對(duì)路徑,但不管是以/開(kāi)頭,還是不以/開(kāi)頭,
*?都是相對(duì)于當(dāng)前資源的相對(duì)路徑
*
*/
public?class?ServletContextServlet?extends?HttpServlet?{
public?void?doGet(HttpServletRequest?request,?HttpServletResponse?response)
throws?ServletException,?IOException?{
String?path1?=?this.getServletContext().getRealPath("/a.properties");
String?path2?=?this.getServletContext().getRealPath("a.properties");
System.out.println(path1);
System.out.println(path2);
//輸出的地址一樣
}
public?void?doPost(HttpServletRequest?request,?HttpServletResponse?response)
throws?ServletException,?IOException?{
doGet(request,?response);
}
}
BClassLoader獲取資源
package?cn.ccnu.classloaderpath;
import?java.io.IOException;
import?java.io.InputStream;
import?java.util.Properties;
import?javax.servlet.ServletException;
import?javax.servlet.http.HttpServlet;
import?javax.servlet.http.HttpServletRequest;
import?javax.servlet.http.HttpServletResponse;
/*
*?ClassLoader類加載器不能通過(guò)絕對(duì)地址來(lái)加載資源,只能通過(guò)相對(duì)地址來(lái)加載資源
*?但相對(duì)地址不管前面加不加/都是相當(dāng)于類路徑的相對(duì)地址
*
*/
public?class?ClassLoaderServlet?extends?HttpServlet?{
public?void?doGet(HttpServletRequest?request,?HttpServletResponse?response)
throws?ServletException,?IOException?{
/*
*?加了/,其地址是相對(duì)于類路徑的相對(duì)地址
*/
//??????InputStream?in?=?this.getClass().getClassLoader().getResourceAsStream("/cn/ccnu/classloaderpath/c.properties");
//??????Properties?prop?=?new?Properties();
//??????prop.load(in);
//??????System.out.println(prop.getProperty("url"));
/*
*?不加/,其地址是相對(duì)于類路徑的相對(duì)地址
*/
InputStream?in?=?this.getClass().getClassLoader().getResourceAsStream("cn/ccnu/classloaderpath/c.properties");
Properties?prop?=?new?Properties();
prop.load(in);
System.out.println(prop.getProperty("url"));
/*
*?總結(jié):不能使用絕對(duì)地址,而只能只用相對(duì)地址
*?且不管加不加/的相對(duì)地址,都是相對(duì)于類路徑的相對(duì)地址
*
*/
}
public?void?doPost(HttpServletRequest?request,?HttpServletResponse?response)
throws?ServletException,?IOException?{
doGet(request,?response);
}
}
CClass獲取資源
package?cn.ccnu.classpath;
import?java.io.IOException;
import?java.io.InputStream;
import?java.util.Properties;
import?javax.servlet.ServletException;
import?javax.servlet.http.HttpServlet;
import?javax.servlet.http.HttpServletRequest;
import?javax.servlet.http.HttpServletResponse;
/*
*?Class讀取資源不能是絕對(duì)路徑,只能是相對(duì)路徑,又分為以/開(kāi)頭或者是不以/開(kāi)頭
*??????1.以/開(kāi)頭的相對(duì)路徑
*??????2.不以/開(kāi)頭的相對(duì)路徑
*/
public?class?ClassServlet?extends?HttpServlet?{
public?void?doGet(HttpServletRequest?request,?HttpServletResponse?response)
throws?ServletException,?IOException?{
/*
*?1.以/開(kāi)頭的相對(duì)路徑
*??????此時(shí)的/代表類路徑,即:/javaee/WEB-INF/classes
*/
//??????InputStream?in?=?ClassServlet.class.getResourceAsStream("/cn/ccnu/classpath/b.properties");
//??????Properties?porp?=?new?Properties();
//??????porp.load(in);
//??????System.out.println(porp.getProperty("url"));
/*
*?2.不以/開(kāi)頭的相對(duì)路徑
*??????此時(shí)相對(duì)的是:類ClassServlet.class的路徑,即:\javaee\WEB-INF\classes\cn\ccnu\classpath
*??????即:/javaee/WEB-INF/classes/cn/ccnu/classpath
*/
InputStream?in?=?ClassServlet.class.getResourceAsStream("b.properties");
Properties?porp?=?new?Properties();
porp.load(in);
System.out.println(porp.getProperty("url"));
}
public?void?doPost(HttpServletRequest?request,?HttpServletResponse?response)
throws?ServletException,?IOException?{
doGet(request,?response);
}
}
4路徑
要么以“*”開(kāi)關(guān),要么為“/”開(kāi)頭,當(dāng)通常情況看下,我們都會(huì)以"/"開(kāi)頭。
Servlet的路徑跳轉(zhuǎn)
一、JSP跳轉(zhuǎn)到Servlet
1、相對(duì)路徑,如href="servlet/TestServlet"
如果寫成"/servlet/TestServlet"會(huì)報(bào)錯(cuò),因?yàn)榈谝粋€(gè)“/”表示的是【服務(wù)器根目錄】
2、絕對(duì)路徑,通過(guò)內(nèi)置成員變量path實(shí)現(xiàn),如href="/servlet/TestServlet"
path得到的是項(xiàng)目根目錄,如【http://localhost:8080/ServletDemo】
二、Servlet跳轉(zhuǎn)JSP1、請(qǐng)求重定向:response.sendRedirect(request.getContextPath()+"/xxx.jsp");
request.getContextPath()獲得項(xiàng)目根目錄,或者通過(guò)"../xxx.jsp"取得上層路徑得到
2、服務(wù)器內(nèi)部轉(zhuǎn)發(fā):
request.getRequestDispatcher("../xxx.jsp").forward(req,resp);
request.getRequestDispatcher("/test.jsp").forward(request, response); //斜線表示項(xiàng)目的根目錄
小結(jié):Servlet都可以通過(guò)../xxx.jsp獲取路徑
三、web.xml的路徑
web.xml的必須以“/”開(kāi)頭,“/”表示項(xiàng)目的根目錄
在JSP頁(yè)面上使用相對(duì)路徑和絕對(duì)路徑調(diào)用servlet
web.xml的必須以“/”開(kāi)頭,“/”表示項(xiàng)目的根目錄
如果在Servlet中使用請(qǐng)求重定向方式跳轉(zhuǎn)到其他jsp頁(yè)面,則需要:
response.sendRedirect(request.getContextPath()+"/test.jsp");
服務(wù)器內(nèi)部跳轉(zhuǎn)路徑:
request.getRequestDispatcher("/test.jsp").forward(request,response);//這里的斜線表示項(xiàng)目的根目錄
或者request.getRequestDispatcher("../test.jsp").forward(request,response);//“..”表示回到上層目錄也就是根目錄;
PS:如果帶一層路徑 如:/servlet/loginServlet,則內(nèi)部轉(zhuǎn)發(fā)的時(shí)會(huì)從WebRoot/servlet/路徑下找jsp頁(yè)面,如果要轉(zhuǎn)發(fā)的頁(yè)面不在WebRoot/servlet/路徑下,則需要“..”回到上層或根目錄再定位到j(luò)sp頁(yè)面,如下:request.getRequestDispatcher("../test.jsp").forward(request,response);
如果要轉(zhuǎn)發(fā)的頁(yè)面在WebRoot/servlet/路徑下,則如下:request.getRequestDispatcher("/test.jsp").forward(request,response);
總結(jié)
以上是生活随笔為你收集整理的java servlet 路径_JavaServlet 路径书写总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 有事说事下一句是什么呢?
- 下一篇: java ee有哪些工具_JavaEE开