web工程中的各種路徑(eclipse開發)


目前遇到的 web 工程中要寫url和路徑的文件有 

  • webContent中.jsp/.html :action
  • src中的servlet類 : 映射地址、重定向、請求轉發、訪問資源文件(webContent中、src中)
  • src非servlet類的普通類 :訪問資源文件(webContent中、src中)

以下一一說明:

 

.jsp/.html中的路徑

  form表單提交的action中要寫servlet(jsp)的路徑

    1. 跳轉到.jsp

      action中使用相對路徑,相對於當前頁面。

    

 

<!-- from JSP1.jsp to JSP2.jsp --> 
<!-- JSP1.jsp中的form --> 
<form action="File/JSP2.jsp">
<!-- from JSP2.jsp to JSP1.jsp --> 
<!-- JSP2.jsp中的form --> 
<form action="../JSP1.jsp">

 

    2.跳轉到servlet1

    注意,路徑與package產生的目錄無關。

    

 

//Servlet1.java 的映射地址
@WebServlet(name = "Servlet1", urlPatterns = { "/Servlet1" })
<!-- from JSP2.jsp to Servlet1 --> 
<!-- JSP2.jsp中的form --> 
<form action="../Servlet1">

 

改變servlet的映射地址,使servlet映射到與JSP2.jsp一個文件夾下

//修改servlet1的映射地址后
@WebServlet(name = "Servlet1", urlPatterns = { "/File/Servlet1" })
<!-- from JSP2.jsp to Servlet1 --> 
<!-- JSP2.jsp中的form --> 
<form action="Servlet1">

 

 再次改變servlet映射地址,servlet映射到虛擬目錄下

//再次修改servlet1的映射地址后,映射到virtualFile虛擬目錄
@WebServlet(name = "Servlet1", urlPatterns = { "/virtualFile/Servlet1" })
<!-- from JSP2.jsp to Servlet1 --> 
<!-- JSP2.jsp中的form --> 
<form action="../virtualFile/Servlet1">

     3.更新:利用超鏈接<a>跳轉到servlet,其中的href:

//相對於當前jsp的相對路徑跳轉到servlet,同時傳遞參數id = 111,111為String類

//在servlet頁面可以通過 request.getPatameter("id")獲取111
<a href="servlet1?id=111">點擊跳轉到servlet1</a>

 

src中的servlet類

  •     url注解中的要寫servlet的映射地址
  •     servlet類訪問webContent中的資源文件    Servlet1訪問1.txt(按照tomcat中的工程結構)

//Servlet1.java 的映射地址
@WebServlet(name = "Servlet1", urlPatterns = { "/Servlet1" }) 
//利用getServletContext().getRealPath()獲取web工程的絕對路徑
String filePath = this.getServletContext().getRealPath("/sourceFile/1.txt");
//filePath=// D:\tomcat\apache-tomcat-8.0.50-windows-x64\apache-tomcat-8.0.50\webapps\test3\sourceFile\1.txt
BufferedReader br = new BufferedReader(new FileReader(filePath));

 

  •  訪問src中的資源文件     Servlet1訪問2.txt

 

//Servlet1.java 的映射地址
@WebServlet(name = "Servlet1", urlPatterns = { "/Servlet1" }) 

 

//訪問src中的文件,要按照tomcat中的工程目錄獲取絕對路徑
//servlet不要映射到虛擬目錄
String filePath = this.getServletContext().getRealPath("/WEB-INF/classes/2.txt");
BufferedWriter br = new BufferedWriter(new FileWriter(filePath));

 

  •  重定向到servlet(jsp),只能用相對路徑  servlet1重定向到JSP2.jsp
//重定向使用相對路徑,url發生改變
response.sendRedirect("File/JSP2.jsp");

 

  •  請求轉發到servlet,可以 用相對路徑、絕對路徑 servlet1請求轉發到Servlet2
//相對路徑
RequestDispatcher rd = request.getRequestDispatcher("Servlet2");
rd.forward(request,response);
//絕對路徑
RequestDispatcher rd = request.getRequestDispatcher("/Servlet2");
rd.forward(request,response);              

 

src非servlet類的普通類

  

 

  •  普通類訪問webContent中的資源文件  NormalClass中訪問1.txt
//利用class獲取本類所在的目錄(不含pacakage,只到classes),
//利用getResource()獲取資源文件絕對路徑
//在webContent中則要兩次返回上級目錄(WEB-INF,工程名URLTest)
File filePath = new File(NormalClass.class.getClassLoader().getResource("../../sourceFile/1.txt").getPath());
FileInputStream fn = new FileInputStream(filePath);
  •   普通類問src中的資源文件  NormalClass中訪問2.txt
//利用class獲取本類所在的目錄(不含pacakage,只到classes),
//利用getResource()獲取資源文件絕對路徑
File filePath = new File(NormalClass.class.getClassLoader().getResource("2.txt").getPath());
FileInputStream fn = new FileInputStream(filePath);

 

注意:

注意!! 第一次打開.jsp頁面時,.jsp頁面的所有相對路徑都是相對.jsp頁面的,然而從servlet轉發到jsp頁面時相對路徑會變成相對於servlet的路徑,會導致資源文件訪問不到。

如何避免:在所有相對路徑前面加上 ${pageContext.request.contextPath}來獲得相對web工程的目錄。

如:

<!-- from JSP2.jsp to Servlet1 --> 
<!-- JSP2.jsp中的form --> 
<form action="../Servlet1">

 改為

<!-- from JSP2.jsp to Servlet1 --> 
<!-- JSP2.jsp中的form --> 
<form action="${pageContext.request.contextPath}/Servlet1">

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM