求教java web 在java获取服务器根路径上获取路径问题

& & &本篇博客是 JavaWeb 应用服务器端在不同环境下获取文件路径的全面总结。
& & &获取文件路径后主要应用的场景,读取 JavaWeb 自定义配置文件、在特定路径下生成各种类型的文件提供下载......
& & 想必看官也是来找方法的,先看上面目录有没有能解决你问题的,如果有就点击进到对应小节,如果没有速度关闭,看搜索引擎列出来的下一条记录吧。
1.Servlet 的init 方法中获取
getServletContext().getRealPath("/");
& &output :E:\workspace\tree\ &(tree是我web项目的根目录)
2.任意的class中获取
this.getClass().getClassLoader().getResource("/").getPath();
Thread.currentThread().getContextClassLoader().getResource("/").getPath();
& &output&: E:\workspace\tree\WEB-INF\classes\
3.HttpServletRequest 中获取
request.getServletContext().getRealPath("/");
& &output:E:\Workspaces\tree\WebContent\
& &weblogic 下&request.getServletContext() 路径获取为空,其原因是 servlet-api.jar 本地和 weblogic 上有差别。
& &换用 request.getSession().getServletContext().getRealPath("/") &可以解决问题,但这样的话你需要判断容器。
& &最好是取类加载路径也就是第二种方式,web 相对路径,然后获取你想要的资源。
4.jsp取得当前目录的路径
request.getRealPath("");
& &path=C:\jboss-4.0.5.GA\server\default\tmp\deploy\tmp14544test-exp.war\
(String)request.getContextPath();
& &得到项目(test)应用所在的真实的路径 path=/test
request.getRequestURI();
& &得到应用所在的真实的路径 path=/test/admin/admindex.jsp
request.getRealPath(request.getServletPath());
& &得到当前文件的磁盘绝对路径
5.服务器端的地址
& &服务器端的相对地址指的是相对于你的web应用的地址。这个地址是在服务器端解析的(不同于 html 和 javascript 中的相对地址,他们是由客户端浏览器解析的)
& &也就是说这时候在 jsp 和 servlet 中的相对地址应该是相对于你的web应用,即相对于http: //192.168.0.1/webapp/的。
& &Forward:servlet 中的 request.getRequestDispatcher(address); 这个 address 是在服务器端解析。
& &你要 forward 到 a.jsp 应该这么写:request.getRequestDispatcher(&/user/a.jsp&)
& &这个 / 相对于当前的 web 应用 webapp,其绝对地址就是:http://192.168.0.1/webapp/user/a.jsp。
& &sendRedirect:在 jsp 中 &%response.sendRedirect("/rtccp/user/a.jsp");%&
6.客户端的地址
& &所有的 html 页面中的相对地址都是相对于服务器根目录(http://192.168.0.1/)的。
& &而不是(跟目录下的该Web应用的目录) http://192.168.0.1/webapp/的。
& &Html 中的 form 表单的 action 属性的地址应该是相对于服务器根目录 (http://192.168.0.1/) 的。
& &如果提交到 a.jsp 为:action="/webapp/user/a.jsp" 或 action="&%=request.getContextPath()% &"/user/a.jsp;
& &提交到 servlet 为 actiom="/webapp/handleservlet" &Javascript 也是在客户端解析的,所以其相对路径和 form 表单一样。
& &因此,一般情况下,在 jsp/html 页面等引用的 css,javascript.action等属性前面最好都加上 &%=request.getContextPath()%&,确保所引用的文件属于 Web 应用。
& &另外,应该尽量避免使用类似 ".","./","../../" 等类似的相对该文件位置的相对路径,这样当文件移动时,很容易出问题。
7.Servlet中获得当前应用的相对路径和绝对路径
& &a.根目录所对应的绝对路径:request.getServletPath();
& &b.文件的绝对路径 :request.getSession().getServletContext().getRealPath(request.getRequestURI())
& &c.当前web应用的绝对路径 :servletConfig.getServletContext().getRealPath("/");
javax.servlet.http.HttpSession.getServletContext()
javax.servlet.jsp.PageContext.getServletContext()
javax.servlet.ServletConfig.getServletContext()
& &d..Java 的Class中获得相对路径,绝对路径的方法
& &根据java.io.File的Doc文挡,可知:默认情况下new File("/")代表的目录为:System.getProperty("user.dir")。
System.out.println(Thread.currentThread().getContextClassLoader().getResource(""));
System.out.println(Test.class.getClassLoader().getResource(""));
System.out.println(ClassLoader.getSystemResource(""));
System.out.println(Test.class.getResource(""));
System.out.println(Test.class.getResource("/"));
System.out.println(new File("/").getAbsolutePath());
System.out.println(System.getProperty("user.dir"));
8.Web服务器中的Java类获得当前路径
& &WebApplication的系统文件根目录是你的weblogic安装所在根目录。
& &例如:如果你的weblogic安装在c:beaweblogic700.....
& &那么,你的文件根路径就是 c:&所以,有两种方式能够让你访问你的服务器端的文件。
& &使用绝对路径:比如将你的参数文件放在 c:yourconfigyourconf.properties。
new FileInputStream("yourconfig/yourconf.properties");
& &使用相对路径:相对路径的根目录就是你的webapplication的根路径,即 WEB-INF 的上一级目录,将你的参数文件放在 yourwebappyourconfigyourconf.properties。
new FileInputStream("./yourconfig/yourconf.properties");
& &tomcat:在类中输出System.getProperty("user.dir");显示的是%Tomcat_Home%/bin
& &取当前项目的根目录下资源的方法:
//因为类名为"Application",因此" Application.class"一定能找到
String result = Application.class.getResource("Application.class").toString();
int index = result.indexOf("WEB-INF");
if(index == -1)...{
index = result.indexOf("bin");
result = result.substring(0,index);
if(result.startsWith("jar"))...{
// 当class文件在jar文件中时,返回"jar:file:/F:/ ..."样的路径
result = result.substring(10);
}else if(result.startsWith("file"))...{
// 当class文件在class文件中时,返回"file:/F:/ ..."样的路径
result = result.substring(6);
if(result.endsWith("/"))result = result.substring(0,result.length()-1);//不包含最后的"/"
9.JavaScript获取项目根目录
//js获取项目根路径,如: http://localhost:8083/uimcardprj
function getRootPath(){
//获取当前网址,如: http://localhost:8083/uimcardprj/share/meun.jsp
var curWwwPath=window.document.location.
//获取主机地址之后的目录,如: uimcardprj/share/meun.jsp
var pathName=window.document.location.
var pos=curWwwPath.indexOf(pathName);
//获取主机地址,如: http://localhost:8083
var localhostPaht=curWwwPath.substring(0,pos);
//获取带"/"的项目名,如:/uimcardprj
var projectName=pathName.substring(0,pathName.substr(1).indexOf('/')+1);
return(localhostPaht+projectName);
10.对ClassLoader的一点理解
& &在任意class中使用到了getClassLoader():取得该Class对象的类装载器,对于classLoader 的认识还是在后续工作中接触后不断建立起来。
& &装载类的过程非常简单:查找类所在位置,并将找到的Java类的字节码装入内存,生成对应的Class对象。
& &Java的类装载器专门用来实现这样的过程,JVM并不止有一个类装载器,事实上,如果你愿意的话,你可以让JVM拥有无数个类装载器.
& &类装载器自身也是一个类,它也需要被装载到内存中来,那么这些类装载器由谁来装载呢,总得有个根吧?
& &确实存在这样的根,它就是神龙见首不见尾的Bootstrap ClassLoader. 为什么说它神龙见首不见尾呢?
& &因为你根本无法在Java代码中抓住哪怕是它的一点点的尾巴,
& &尽管你能时时刻刻体会到它的存在,因为java的运行环境所需要的所有类库,都由它来装载,而它本身是C++写的程序,可以独立运行,可以说是JVM的运行起点,颤抖吧,骚年!
& &在Bootstrap完成它的任务后,会生成一个AppClassLoader(实际上之前系统还会使用扩展类装载器ExtClassLoader,它用于装载Java运行环境扩展包中的类)。
& &这个类装载器才是我们经常使用的,可以调用ClassLoader.getSystemClassLoader() 来获得。
& &我们假定程序中没有使用类装载器相关操作设定或者自定义新的类装载器,那么我们编写的所有java类通通会由它来装载,值得尊敬吧。
& &AppClassLoader查找类的区域就是耳熟能详的Classpath,也是初学者必须跨过的门槛,有没有灵光一闪的感觉,我们按照它的类查找范围给它取名为类路径类装载器。
阅读(...) 评论()JAVAWEB工程发布到服务器中,如何才能在启动服务的时候获取服务的完整URL - ITeye问答
在WEB工程启动的时候,有一个ServletContextListener,在这个Listener中,如果才能获取当前发布的系统的URL呢?有没有人遇到过这样的问题?是如何解决的?
应该是你需要读系统中某个文件吧,我以前也遇到过这个问题,建议用系统路径+相对路径的形式来处理,关于系统路径获取看下面链接:
/admin/blogs/510459
contextInitialized方法传的参数ServletContextEvent sce,通过sce.getServletContext()方法可以获得ServletContext,ServletContext里面有个& public String getContextPath();方法,应该可以获得你所需要的URL
如何才能获取当前发布的系统的URL呢!
这个可以做到的,ServletContextListener 和 系统的URL 没有冲突吧,
发布的系统的URL在系统中哪都可以得到的,我的意思是根路径,和当前访问的页面或者URL地址。
只能获得相对于服务器的路径,
已解决问题
未解决问题request.getContextPath获取绝对路径 - Only the heart peace will be prosperity - ITeye博客
博客分类:
项目需求:所有jsp页必须通过Action转发,不能直接在地址栏链接jsp或&a href="aaa.jsp"&&/a&
我的应用如下:
1.LoginFilter
public class LoginFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest hRequest = (HttpServletRequest)
HttpServletResponse hResponse = (HttpServletResponse)
String uri = hRequest.getRequestURI();
System.out.println("uri======"+uri);
TBussinessInfo info =
(TBussinessInfo) hRequest.getSession().getAttribute("user");
if( "/b2cPlatform/jsp/phone/login/login.jsp".equals(uri) || "/b2cPlatform/".equals(uri)
|| "/b2cPlatform/jsp/phone/login/trunToLogin.jsp".equals(uri) )
chain.doFilter(request, response);
hResponse.sendRedirect(hRequest.getContextPath());//不允许直接访问jsp页,除非login.jsp等页
public void destroy() {}
public void init(FilterConfig arg0) throws ServletException {}
&!-- 登录Filter --&
&filter-name&LoginFilter&/filter-name&
&filter-class&com.hanpeng.b2c.phone.priv.LoginFilter&/filter-class&
&filter-mapping&
&filter-name&LoginFilter&/filter-name&
&url-pattern&*.jsp&/url-pattern&
&/filter-mapping&
二、网上其他资料
&%=request.getContextPath()%&是解决相对路径的问题,可返回站点的根路径。
&a href="&%=request.getContextPath()%&/XXX.jsp"& //这样获得的是绝对路径
&a href="XXX.jsp"& //这样获得的是相对路径
&a href="&%=request.getContextPath()%&/XXXX.jsp"& 能够更有效的防治连接的失效。
request.getContextPath()得到的是项目的名字,如果项目为根目录,则得到一个"",即空的字条串,
如果项目为dzjc, &%=request.getContextPath()% &/ 将得到dzjc/,服务器端的路径则会自动加上,
&a href="XXX.jsp"& 应该就是指当前路径下的这个xxx.jsp页面,有时候也可以在head里设置html:base
来解决路径的问题,不过用的最多的还是request.getContextPath。
用EL来表示相同功能的EL为:${pageContext.request.getContextPath()}
request.getScheme();
返回的协议名称,默认是http
request.getServerName()
返回的是你浏览器中显示的主机名
getServerPort()
获取服务器端口号
如果想得到工程文件的实际物理路径,可通过:&%=request.getRealPath("/")%&,这样页面就会输出:d:/web
现在request.getRealPath("") 这个方法已经不推荐使用了
ServletContext.getRealPath(java.lang.String) instead. request.getSession().getServletContext().getRealPath() 得到工程文件的实际物理路径,也就是绝对地址
简便用法:
String path=request.getContextPath();//path = /oa
request.setAttribute("path", path);
在页面中应用(EL) ${path}/images/xx.jpg(绝对定位:oa/images/xx.jpg)
可以解决复杂的相对路径定位失败的问题。
浏览 30577
相关知识库:
浏览: 1525196 次
来自: 哈尔滨
今天也跟着学习了,用到了
讲解的很不错。URLConnection类的内容也可以看这篇文 ...急求:JAVAWEB实现文件打印的问题公司的OA是JAVAWEB的,现在想增加一个功能,自动调用一台网络上的打印机打印OA服务器上指定路径下的文件(一般都是WORD或者EXCEL的日报,报表之类的),
急求:JAVAWEB实现文件打印的问题
公司的OA是JAVAWEB 的,现在想增加一个功能,自动调用一台网络上的打印机打印OA服务器上指定路径下的文件(一般都是WORD或者EXCEL的日报,报表之类的),这个好实现吗?打印机不是直接配置在服务器上的,是一台普通的网络打印机
网络打印机添加后,就跟本地打印机没多少区别了
import java.io.FileInputS
import java.io.FileNotFoundE
import javax.print.D
import javax.print.DocF
import javax.print.DocPrintJ
import javax.print.PrintE
import javax.print.PrintS
import javax.print.PrintServiceL
import javax.print.SimpleD
import javax.print.attribute.DocAttributeS
import javax.print.attribute.HashDocAttributeS
import javax.print.attribute.HashPrintRequestAttributeS
import javax.print.attribute.PrintRequestAttributeS
import javax.print.attribute.standard.MediaSizeN
import javax.swing.JOptionP
public class PrintUtils {
public static void main(String[] args) {
FileInputStream textStream =
textStream = new FileInputStream("C:\CityLove.pdf");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
//String printStr = "打印测试内容";// 获取需要打印的目标文本
if (textStream != null) // 当打印内容不为空时
// 指定打印输出格式
DocFlavor flavor = DocFlavor.INPUT_STREAM.PDF;//SERVICE_FORMATTED.PRINTABLE
// 定位默认的打印服务
PrintService printService = PrintServiceLookup.lookupDefaultPrintService();
// 创建打印作业
DocPrintJob job = printService.createPrintJob();
// 设置打印属性
PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
// 设置纸张大小,也可以新建MediaSize类来自定义大小
pras.add(MediaSizeName.ISO_A4);
DocAttributeSet das = new HashDocAttributeSet();
// 指定打印内容
Doc doc = new SimpleDoc(textStream, flavor, das);
// 不显示打印对话框,直接进行打印工作
job.print(doc, pras); // 进行每一页的具体打印操作
} catch (PrintException pe) {
pe.printStackTrace();
// 如果打印内容为空时,提示用户打印将取消
JOptionPane.showConfirmDialog(null,
"Sorry, Printer Job is Empty, Print Cancelled!",
"Empty", JOptionPane.DEFAULT_OPTION,
JOptionPane.WARNING_MESSAGE);
解决方案二:
用 JPS是可以实现基本的打印,但是office文件它支持不好。。。。
【云栖快讯】数据库技术天团集体亮相,分享一线生产实践经验,告诉你踩过的坑、走过的路,都是老司机,靠谱!干货分享,不可错过!&&
弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率
稳定可靠、可弹性伸缩的在线数据库服务,全球最受欢迎的开源数据库之一
6款热门基础云产品6个月免费体验;2款产品1年体验;1款产品2年体验
开发者常用软件,超百款实用软件一站式提供}

我要回帖

更多关于 java web获取项目路径 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信