1. 程式人生 > >java web中的路徑問題

java web中的路徑問題

本文以專案部署在tomcat伺服器為例,其他相信也是一樣的。

先說明請求頁面的寫法,在web中,頁面路徑主要寫的有以下幾種

  1、請求重定向

  2、瀏覽器的請求被伺服器請求到新頁面(我稱為“轉發”)

  3、超連結

  4、form表單提交的action

為了演示路徑寫法,首先先建一個專案(專案名WebPath),並建立一個servlet(PathServlet)

目錄結構如下

以訪問目錄中index.jsp檔案為例,jxf.path.PathServlet.jave中對以上四種路徑的寫法(紅色部分)

複製程式碼
 1 package jxf.path;
 2 
 3 import java.io.IOException;
4 import java.io.PrintWriter; 5 6 import javax.servlet.ServletException; 7 import javax.servlet.http.HttpServlet; 8 import javax.servlet.http.HttpServletRequest; 9 import javax.servlet.http.HttpServletResponse; 10 11 public class PathServlet extends HttpServlet { 12 public void doGet(HttpServletRequest request, HttpServletResponse response)
13 throws ServletException, IOException { 14 //1、重定向 15 response.sendRedirect("/WebPath/index.jsp"); 16 17 //2、轉發 18 //request.getRequestDispatcher("/index.jsp").forward(request, response); 19 20 //3、超連結 21 //response.setContentType("text/html");
22 //response.getWriter().write("<thml><head></head><body><a href='/WebPath/index.jsp'>index.jsp<a></body></html>"); 23 24 //4、表單提交 25 //response.setContentType("text/html"); 26 //response.getWriter().write("<thml><head></head><body><form action='/WebPath/index.jsp'><input type='submit' value='to index.jsp'/></form></body></html>"); 27 } 28 29 }
複製程式碼

路徑的寫法主要注意以兩點:

  1、路徑是誰發起的(瀏覽器,伺服器)

  2、路徑開頭直接 “/” 表示當前路徑(主要就是這個當前路徑,搞清楚就明白了)

首先來分析“路徑是由誰發起的”,以上四種寫法,除了“2、轉發”是伺服器發起的,其他都是由瀏覽器發起的。

用過tomcat伺服器的都應該明白一點,平常我們開發時候在瀏覽器中輸入“http://localhost:埠號/專案名/xxx檔案”請求需要的資源,並且根據tomcat的專案都是在%tomcat根目錄%/webapps資料夾下,可得知,此時由瀏覽器發起的請求,程式碼中的“/”表示的當前路徑就應該表示的是webapps的根目錄

而程式碼中的“轉發”,是由瀏覽器向伺服器發起請求,而伺服器根據請求的內容幫助其訪問專案中的其他資源,並返回給瀏覽器。整個 “資源路徑” 是由伺服器來發起的,可以檢視web專案在tomcat部署後的結構,對比MyEclipse中的專案結構,可理解為“/”表示當前目錄是MyEclipse中專案的WebRoot的根目錄(也可理為%tomcat%/webapps/WebPath根目錄)。既然是“/”表示為WebRoot的根目錄,那麼訪問這個index.jsp檔案的寫法應該為“/index.jsp”

 總結:   

  1、由瀏覽器發起的路徑,“/”表示%tomcat根目錄%/webapps根目錄

  2、由伺服器發起的路徑,“/”表示專案中的WebRoot根目錄

根據請求的資源的檔案與“/”代表的路徑的相對位置,即可寫對訪問的資源路徑。

順便提起src中的資源的訪問路徑

新建一個txt檔案,隨便寫點內容,新建一個servlet,名為SourcePath,檔案目錄結構如下

jxf.path.SourcePath.java

複製程式碼
 1 public class SourcePath extends HttpServlet {
 2 
 3     public void doGet(HttpServletRequest request, HttpServletResponse response)
 4             throws ServletException, IOException {
 5         response.setContentType("text/html;charset=UTF-8");
 6         //String path = request.getRealPath("/WEB-INF/classes/demo.txt");
 7         //InputStream inputStream = this.getServletContext().getResourceAsStream("/WEB-INF/classes/demo.txt");
 8         String path = this.getServletContext().getRealPath("/WEB-INF/classes/demo.txt");
 9         File file = new File(path);
10         FileInputStream inputStream = new FileInputStream(file);
11         byte[] bytes = new byte[1024];
12         StringBuilder sb = new StringBuilder();
13         int len = 0;
14         while((len = inputStream.read(bytes))!=-1){
15             sb.append(new String(bytes,0,len));
16         }
17         inputStream.close();
18         response.getWriter().write(sb.toString());
19     }
20 
21 }
複製程式碼

web專案中載入資原始檔有以下方法:   

  request物件.getRealPath("/WEB-INF/classes/demo.txt");//返回該檔案絕對路徑的字串,不過在java Servlet API 2.1版本以後去除了,不推薦使用

  Context物件.getResourceAsStream("/WEB-INF/classes/demo.txt");//返回該檔案絕對路徑建立的InputStream

  Context物件.getRealPath("/WEB-INF/classes/demo.txt");//返回該檔案絕對路徑的字串

而這些方法中的路徑寫法和上面的url原理是一樣的,此時也是由伺服器發起的,所以“/”代表的是WebRoot根目錄,而src下的所有資源,專案部署後,都會自動放在/WEB-INF/classes目錄下。所以應寫為"/WEB-INF/classes/demo.txt"

相關推薦

java web路徑格式使用案例總結,即問題:要不要以“/”開頭?

首先可以確定相對路徑不需要以“/”開頭,在Java web裡用到的絕對路徑要以“/”開頭,因為“/”表示根目錄(即伺服器),然後“/”後面加上專案名/...... 接著要考慮的關鍵問題是,哪裡用相對路徑、相對誰?,哪裡用絕對路徑? 很難從個例當中總結出普適的規律,所以我把自從接觸Java w

tomcat 與 java weburl路徑的配置以及使用規則詳情(長期更新)

root 每一個 ava 目錄 clip ima 文件夾 logs 需要 首先我們看一下在myeclipse中建立的java web項目的結構 在這裏我們需要註意這個webroot也就是我們在tomcat裏的webapp裏面的應用 之所以每一個項目都有這個webroot

Java Web使用logback輸出日誌檔案的路徑問題

一個軟體的日誌有多重要,相信當軟體出問題,你一行一行去找的時候才會意識到,Clean code, clean logs中提出了10個建議來有效的使用日誌。 從我自己的經驗上來看,從根本不會考慮日誌問題,到使用System.out.println(),再到使用s

java web路徑問題

本文以專案部署在tomcat伺服器為例,其他相信也是一樣的。先說明請求頁面的寫法,在web中,頁面路徑主要寫的有以下幾種  1、請求重定向  2、瀏覽器的請求被伺服器請求到新頁面(我稱為“轉發”)  3、超連結  4、form表單提交的action為了演示路徑寫法,首先先建一

java web讀取properties檔案時的路徑問題

在web開發時,難免會有一些固定的引數,我們一般把這些固定的引數存在properties檔案中,然後用的時候要讀出來。但經常出現一些錯誤,找不到相應的路徑,所以,今天特地講一些如何正確獲得路徑。 首先,我們要將properties檔案部署在$app/WEB-INF/cla

Java Web的相對路徑與絕對路徑總結

-webapp |-MyProject  目錄  |--WebContent 目錄  |---scripts 目錄   ---dtree.js 檔案  |---styles 目錄   ---main.css 檔案   |---pages 目錄   ---test.jsp 檔案  現在例如要在test.jsp

java web使用log4j路徑的事

第一次使用lo4j就出現一個很奇怪顯現。log可以在java project專案下記錄日誌到控制檯和檔案中,且不需要額外程式碼量。但是放在web專案中,只有控制檯有日誌,檔案都不生成的。為了解決這個問題花了我大半天時間,也嘗試了網上各種方法,被坑無數。下面就來說說辛酸史的解

java-web生成文檔(一)

all 檢查 download com ftl 緩沖 getc cor tps 基於Java的解決方案也是很多的,包括使用Jacob、Apache POI、Java2Word、iText等各種方式,其實在從Office 2003開始,就可以將Office文檔轉換成XML文件

Java web常見編碼亂碼問題(二)

catalina 轉換 alt str 檢測 內容 tom 拼搏 image 根據上篇記錄Java web中常見編碼亂碼問題(一), 接著記錄亂碼案例:   案例分析:   2、輸出流寫入內容或者輸入流讀取內容時亂碼(內容中有中文)   原因分析:     a、 如果是

MySQL 查詢語句自己定義的中文內容在Java Web 顯示為問號

variable select 關閉 程序 自己 bsp from sel 技術   Java Web 端做查詢時,性別字段存的是數字,1代表男,2代表女,取數據時將性別轉為漢字顯示在頁面,sql語句如下,結果發生了問題 select a.emp_id,a.emp_n

java web編碼亂碼問題

查詢 頁面 問題 調試過程 都是 clas image 進行 web項目   b/s 模式的java web項目中,不管是前端與後端。開發過程中,調試過程中,運行過程都經常遇到亂碼問題。再從現象出發,分析一下問題:    1,項目導進來,頁面中的註釋等非西歐文字都是亂碼。先

Java Web的mapper,service,controller,model

目錄 一、SSM(Spring+SpringMVC+MyBatis)架構 1、 SSM的工作原理 (1) SSM系統架構 (2) SSM程式執行流程 2、 MSCM是什麼及其作用 (1) controller (2) model  (3) service

Java Web提交表單之後跳轉到WebContent目錄下的子目錄裡的jsp檔案

最近在做一個系統,需要完成登入動能進行跳轉到另一個頁面。在這個專案裡面,我把 jsp,css,js檔案都統一放在 WebContent 目錄下的一個 WebPage 裡面。 按照以前的習慣,寫好了 servlet 之後在 web.xml 裡面完成配置,但由於平時 jsp 檔案都是直接

Java web 的中文亂碼問題總結

一、亂碼由來:        大家都知道一句話:“亂碼是因為編碼和解碼方式不一致造成的”。 那麼,我們為什麼要編碼呢?        那就要從計算機底層是如何表示人類語言(

Java Web使用Spark MLlib訓練的模型

PMML是一種通用的配置檔案,只要遵循標準的配置檔案,就可以在Spark中訓練機器學習模型,然後再web介面端去使用。目前應用最廣的就是基於Jpmml來載入模型在javaweb中應用,這樣就可以實現跨平臺的機器學習應用了。 訓練模型 首先在spark MLlib中使用mllib包下的邏輯迴歸

Java Web的jsp技術

     在動態網頁開發中,經常需要動態生成html內容,如果使用servlet來實現html頁面資料的改變會導致程式十分臃腫。為了克服這些缺點,Oracle(Sun)公司推出了jsp技術。     JSP全名是Java Server Page,它是建立在S

Java WebgetAttribute和getParameter的區別

1.getAttribute是取得jsp中 用setAttribute設定的attribute  2.parameter得到的是string;attribute得到的是object  3.request.getParameter()方法傳遞的資料,會從Web客戶端傳到Web伺服器

RabbitMQ在java-web的簡單應用

RabbitMQ的使用場景 MQ,是Message Queue(訊息佇列)的簡寫。簡而言之,RabbitMQ就是將訊息儲存在佇列中。 在專案的實際開發過程中,可以將一些無需即時返回結果且耗時的操作提取出來,進行非同步處理。這種處理方式能夠大大節省伺服器的請求響應

Java Web application(應用級) session(會話級) request(請求級)

  在JavaWeb 中實現資料共享往往通過定義屬性的方法來實現,而什麼是屬性呢?它類似於Hashmap中的鍵值對,有屬性名和屬性值作為設定屬性方法的引數,而在其他的地方通過屬性名去獲取屬性的值。   而定義定義不同級別的值,資料共享的範圍是有區別的,接下來我就詳細的介紹下

java web傳遞get方式與post方式下中文亂碼問題

首先確定編譯器建立網頁的中文編碼: windows-preference-web-css/jsp/html,將其中的 encoding設定為ISO10646/Unicode (UTF-8) post