A. java怎麼得到當前web的鏈接
tomcat本地地址 E:\soft4develop\apache-tomcat-6.0.18
System.getProperty("user.dir")//E:\soft4develop\apache-tomcat-6.0.18\bin
System.getProperty("catalina.home")//E:\soft4develop\apache-tomcat-6.0.18對於jboss同樣適用。其他容器未做測試。
說道這里,正好有朋友在群里頭問了個問題,情景式這樣的
登陸需要用Https來做請求,登陸成功後,剩下的其他請求全部走http.
比如https://www.jb51.net/admin/user_manager.apsx
發現這個不需要走Https,就轉發到
http://www.jb51.net/admin/user_manager.apsx
問題來了
request.getServerPort() 只能獲取https時的port1埠
那如何獲取port2埠呢。
通過上面的方式可以獲取到tomact的路徑,在通過下面xml的xpath來獲取到
tomcat的server.xml中的埠配置拼接,來實現。
獲取tomcat埠的方法
復制代碼 代碼如下:
public static Integer getTomcatPortFromConfigXml(File serverXml) {
Integer port;
try {
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
domFactory.setNamespaceAware(true); // never forget this!
DocumentBuilder builder = domFactory.newDocumentBuilder();
Document doc = builder.parse(serverXml);
XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();
XPathExpression expr = xpath.compile
("/Server/Service[@name='Catalina']/Connector[count(@scheme)=0]/@port[1]");
String result = (String) expr.evaluate(doc, XPathConstants.STRING);
port = result != null && result.length() > 0 ? Integer.valueOf(result) : null;
} catch (Exception e) {
port = null;
}
return port;
}
最後附帶下System.ge
復制代碼 代碼如下:
另外:System.getProperty()中的字元串參數如下:
System.getProperty()參數大全
# java.version Java Runtime Environment version
# java.vendor Java Runtime Environment vendor
# java.vendor.url Java vendor URL
# java.home Java installation directory
# java.vm.specification.version Java Virtual Machine specification version
# java.vm.specification.vendor Java Virtual Machine specification vendor
# java.vm.specification.name Java Virtual Machine specification name
# java.vm.version Java Virtual Machine implementation version
# java.vm.vendor Java Virtual Machine implementation vendor
# java.vm.name Java Virtual Machine implementation name
# java.specification.version Java Runtime Environment specification version
# java.specification.vendor Java Runtime Environment specification vendor
# java.specification.name Java Runtime Environment specification name
# java.class.version Java class format version number
# java.class.path Java class path
# java.library.path List of paths to search when loading libraries
# java.io.tmpdir Default temp file path
# java.compiler Name of JIT compiler to use
# java.ext.dirs Path of extension directory or directories
# os.name Operating system name
# os.arch Operating system architecture
# os.version Operating system version
# file.separator File separator ("/" on UNIX)
# path.separator Path separator (":" on UNIX)
# line.separator Line separator ("\n" on UNIX)
# user.name User's account name
# user.home User's home directory
# user.dir User's current working directory
File.getCanonicalPath()和File.getAbsolutePath()大約只是對於new File(".")和new File("..")兩種路徑有所區別。
復制代碼 代碼如下:
# 對於getCanonicalPath()函數,「."就表示當前的文件夾,而」..「則表示當前文件夾的上一級文件夾
# 對於getAbsolutePath()函數,則不管」.」、「..」,返回當前的路徑加上你在new File()時設定的路徑
# 至於getPath()函數,得到的只是你在new File()時設定的路徑
比如當前的路徑為 C:\test :
File directory = new File("abc");
directory.getCanonicalPath(); //得到的是C:\test\abc
directory.getAbsolutePath(); //得到的是C:\test\abc
direcotry.getPath(); //得到的是abc
File directory = new File(".");
directory.getCanonicalPath(); //得到的是C:\test
directory.getAbsolutePath(); //得到的是C:\test\.
direcotry.getPath(); //得到的是.
File directory = new File("..");
directory.getCanonicalPath(); //得到的是C:\
directory.getAbsolutePath(); //得到的是C:\test\..
direcotry.getPath(); //得到的是..
B. java 怎麼獲取web根目錄
以工程名為TEST為例:
(1)得到包含工程名的當前頁面全路徑:request.getRequestURI()
結果:/TEST/test.jsp
(2)得到工程名:request.getContextPath()
結果:/TEST
(3)得到當前頁面所在目錄下全名稱:request.getServletPath()
結果:如果頁面在jsp目錄下 /TEST/jsp/test.jsp
(4)得到頁面所在伺服器的全路徑:application.getRealPath("頁面.jsp")
結果:D:/resin/webapps/TEST/test.jsp
(5)得到頁面所在伺服器的絕對路徑:absPath=new java.io.File(application.getRealPath(request.getRequestURI())).getParent();
結果:D:/resin/webapps/TEST
2.在類中取得路徑:
(1)類的絕對路徑:String u=Class.class.getClass().getResource("/").getPath()
結果:/D:/TEST/WebRoot/WEB-INF/classes/pack/
(2)得到工程的路徑:System.getProperty("user.dir")
結果:D:/TEST
3.在Servlet中取得路徑:
(1)得到工程目錄:request.getSession().getServletContext().getRealPath("") 參數可具體到包名。
結果:E:/Tomcat/webapps/TEST
(2)得到IE地址欄地址:request.getRequestURL()
結果:http://localhost:8080/TEST/test
(3)得到相對地址:request.getRequestURI()
結果:/TEST/test
C. 求教java web 在伺服器上獲取路徑問題
歸根結底,Java本質上只能使用絕對路徑來尋找資源。所有的相對路徑尋找資源的方法,都不過是一些便利方法。不過是API在底層幫助我們構建了絕對路徑,從而找到資源的!
在開發Web方面的應用時, 經常需要獲取 伺服器中當前WebRoot的物理路徑。
如果是Servlet , Action , Controller, 或則Filter , Listener , 攔截器等相關類時, 我們只需要獲得ServletContext, 然後通過ServletContext.getRealPath("/")來獲取當前應用在伺服器上的物理地址。
如果在類中取不到ServletContext時, 有兩種方式可以做到:
1. spring框架的思路, 在WEB-INF/web.xml中 , 創建一個webAppRootKey的param, 指定一個值(默認為webapp.root)作為鍵值, 然後通過Listener , 或者Filter , 或者Servlet 執行String webAppRootKey = getServletContext().getRealPath("/"); 並將webAppRootKey對應的webapp.root 分別作為Key , Value寫到System Properties系統屬性中。之後在程序中通過System.getProperty("webapp.root")來獲得WebRoot的物理路徑。
2. 利用Java的類載入機制 調用 XXX.class.getClassLoader().getResource(""); 方法來獲取到ClassPath , 然後處理獲得WebRoot目錄,這種方式只能是該class在WebRoot/WEB-INF/classes下才能生效, 如果該class被打包到一個jar文件中, 則該方法失效。這時就應該用下面一種方式。
根據第二種的思路,我們還可以再擴展一下。不過對於在部署在一台伺服器中的應用來說,若還不是你所需請再往下看。
下面是一些得到classpath和當前類的絕對路徑的一些方法。你可使用其中的一些方法來得到你需要的資源的絕對路徑:
1. DebitNoteAction.class.getResource("")
得到的是當前類FileTest.class文件的URI目錄。不包括自己!
如:file:/D:/eclipse/springTest/WebRoot/WEB-INF/classes/
atacarnet/src/com/evi/moles/atacarnet/action/
2. DebitNoteAction.class.getResource("/")
得到的是當前的classpath的絕對URI路徑。
如:file:/D:/eclipse/springTest/WebRoot/WEB-INF/classes/
3. Thread.currentThread().getContextClassLoader().getResource("")
得到的也是當前ClassPath的絕對URI路徑
如:file:/D:/eclipse/springTest/WebRoot/WEB-INF/classes/
4. DebitNoteAction.class.getClassLoader().getResource("") 或ClassLoader.getSystemResource("")
得到的也是當前ClassPath的絕對URI路徑。
D. 我想在java類里獲取web項目的路徑,比如我將項目放在D:/,項目名稱為test,我想得到D:/test路徑,在java
首先得到ServletContext對象(jsp中的application)
其次得到WEB項目的的真實路徑
String add=application.getRealPath("/"); super指得是GenericServlet類
最後,可以得到任意一個網站文件的地址:
add+request.getServletPath();
E. java 怎麼獲取web容器的ip和埠號
request.getRemoteAddr(); IP獲取
request.getRemotePort(): 埠號
F. java 怎麼獲取web根目錄
在java中獲得文件的路徑在我們做上傳文件操作時是不可避免的。 web 上運行 1:this.getClass().getClassLoader().getResource("/").getPath(); this.getClass().getClassLoader().getResource("").getPath(); 得到的是 ClassPath的絕對URI路徑。
以工程名為TEST為例:
(1)得到包含工程名的當前頁面全路徑:request.getRequestURI(),結果:/TEST/test.jsp。
(2)得到工程名:request.getContextPath(),結果:/TEST。
(3)得到當前頁面所在目錄下全名稱:request.getServletPath()。結果:如果頁面在jsp目錄下 /TEST/jsp/test.jsp。
(4)得到頁面所在伺服器的全路徑:application.getRealPath("頁面.jsp"),結果D:/resin/webapps/TEST/test.jsp。
(5)得到頁面所在伺服器的絕對路徑:absPath=new java.io.File(application.getRealPath(request.getRequestURI())).getParent();
結果:D:/resin/webapps/TEST。
G. java怎麼獲得web應用的網址
比如這個路徑
http://localhost/servlet/DemoServlet?name=test
String scheme = request.getScheme();//獲取請求協議-http
int serverPort = request.getServerPort();//獲取服務埠號 -8080
String serverName = request.getServerName();//獲取服務域名(主機名) -localhost
String requestURI = request.getRequestURI();//獲取請求uri路徑 -/servlet/DemoServlet
String servletPath = request.getServletPath();//獲取servlet路徑 -/DemoServlet
String contextPath = request.getContextPath();//獲取上下文路徑 -/servlet
String queryString = request.getQueryString();//獲取uri請求參數 -/name=test
StringBuffer requestURL = request.getRequestURL();//獲取url路徑 -http://localhost/servlet/DemoServlet
H. java 如何獲取webcontent的路徑 不是tomcat伺服器的路徑
用servlet獲取
1、獲取項目的絕對路徑
request.getSession().getServletContext().getRealPath("")
結果:
E:\java_web\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\myWebsite
2、獲取瀏覽器地址
request.getRequestURL()
結果:
http://localhost:8080/myWebsite/QuestionServlet
3、獲取當前文件的絕對路徑
request.getSession().getServletContext().getRealPath(request.getRequestURI())
結果:
E:\java_web\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\myWebsite\myWebsite\QuestionServlet
I. 怎麼在一個java程序里獲得當前web應用的路
在java中獲得文件的路徑在我們做上傳文件操作時是不可避免的。
web 上運行
1:this.getClass().getClassLoader().getResource("/").getPath();
this.getClass().getClassLoader().getResource("").getPath(); 得到的是 ClassPath的絕對URI路徑。
如:/D:/jboss-4.2.2.GA/server/default/deploy/hp.war/WEB-INF/classes/
System.getProperty("user.dir");
this.getClass().getClassLoader().getResource(".").getPath(); 得到的是 項目的絕對路徑。
如:/D:/jboss-4.2.2.GA/server/default/deploy/hp.war
2:this.getClass().getResource("/").getPath();
this.getClass().getResource("").getPath(); 得到的是當前類 文件的URI目錄。
如:/D:/jboss-4.2.2.GA/server/default/deploy/hp.war/WEB-INF/classes/com/jebel/helper/
this.getClass().getResource(".").getPath(); X 不 能運行
3:Thread.currentThread().getContextClassLoader().getResource("/").getPath()
Thread.currentThread().getContextClassLoader().getResource("").getPath() 得到的是 ClassPath的絕對URI路徑。
如:/D:/jboss-4.2.2.GA/server/default/deploy/hp.war/WEB-INF/classes/
Thread.currentThread().getContextClassLoader().getResource(".").getPath() 得到的是 項目的絕對路徑。
如:/D:/jboss-4.2.2.GA/server/default/deploy/hp.war
在本地運行中
1:this.getClass().getClassLoader().getResource("").getPath();
this.getClass().getClassLoader().getResource(".").getPath(); 得到的是 ClassPath的絕對URI路徑。
如:/D:/myProjects/hp/WebRoot/WEB-INF/classes
this.getClass().getClassLoader().getResource(".").getPath(); X 不 能運行
2:this.getClass().getResource("").getPath();
this.getClass().getResource(".").getPath(); 得到的是當前類 文件的URI目錄。
如:/D:/myProjects/hp/WebRoot/WEB-INF/classes/com/jebel/helper/
/D:/myProjects/hp/WebRoot/WEB-INF/classes/ 得到的是 ClassPath的絕對URI路徑。
如:/D:/myProjects/hp/WebRoot/WEB-INF/classes
3:Thread.currentThread().getContextClassLoader().getResource(".").getPath()
Thread.currentThread().getContextClassLoader().getResource("").getPath() 得到的是 ClassPath的絕對URI路徑。。
如:/D:/myProjects/hp/WebRoot/WEB-INF/classes
Thread.currentThread().getContextClassLoader().getResource("/").getPath() X 不 能運行
最後
在Web應用程序中,我們一般通過ServletContext.getRealPath("/")方法得到Web應用程序的根目錄的絕對路徑。
還有request.getContextPath(); 在Weblogic中要用request.getServletContext().getContextPath();但如果打包成war部署到Weblogic伺服器,項目內部並沒有文件結構的概念,用這種方式是始終得到null,獲取不到路徑,目前還沒有找到具體的解決方案。
J. java怎麼取到web服務的根路徑
java獲取根路徑有兩種方式:
1)在servlet可以用一下方法取得:
request.getRealPath(「/」)
例如:filepach = request.getRealPath(「/」)+」//upload//」;
2)不從jsp,或servlet中獲取,只從普通java類中獲取:
String path = getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
SAXReader() saxReader = new SAXReader();
if(path.indexOf(「WEB-INF」)>0){
path = path.substring(0,path.indexOf(「/WEB-INF/classes」)+16);
// 『/WEB-INF/classes』為16位
document = saxReader.read(path+filename);
}else{
document = saxReader.read(getClass().getResourceAsStream(filename));
}