本文以项目部署在tomcat服务器为例,其他相信也是一样的。

先说明请求页面的写法,在web中,页面路径主要写的有以下几种

  1、请求重定向

  2、浏览器的请求被服务器请求到新页面(我称为“转发”)

  3、超链接

  4、form表单提交的action

为了演示路径写法,首先先建一个项目(项目名WebPath),并建立一个servlet(PathServlet)

目录结构如下

以访问目录中index.jsp文件为例,jxf.path.PathServlet.jave中对以上四种路径的写法(红色部分)

 package jxf.path;

 import java.io.IOException;
import java.io.PrintWriter; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class PathServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//1、重定向
response.sendRedirect("/WebPath/index.jsp"); //2、转发
//request.getRequestDispatcher("/index.jsp").forward(request, response); //3、超链接
//response.setContentType("text/html");
//response.getWriter().write("<thml><head></head><body><a href='/WebPath/index.jsp'>index.jsp<a></body></html>"); //4、表单提交
//response.setContentType("text/html");
//response.getWriter().write("<thml><head></head><body><form action='/WebPath/index.jsp'><input type='submit' value='to index.jsp'/></form></body></html>");
} }

路径的写法主要注意以两点:

  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

 public class SourcePath extends HttpServlet {

     public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
//String path = request.getRealPath("/WEB-INF/classes/demo.txt");
//InputStream inputStream = this.getServletContext().getResourceAsStream("/WEB-INF/classes/demo.txt");
String path = this.getServletContext().getRealPath("/WEB-INF/classes/demo.txt");
File file = new File(path);
FileInputStream inputStream = new FileInputStream(file);
byte[] bytes = new byte[1024];
StringBuilder sb = new StringBuilder();
int len = 0;
while((len = inputStream.read(bytes))!=-1){
sb.append(new String(bytes,0,len));
}
inputStream.close();
response.getWriter().write(sb.toString());
} }

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项目中的路径问题的更多相关文章

  1. JAVA WEB项目中各种路径的获取

    JAVA WEB项目中各种路径的获取 标签: java webpath文件路径 2014-02-14 15:04 1746人阅读 评论(0) 收藏 举报  分类: JAVA开发(41)  1.可以在s ...

  2. (转)Java web 项目中文件路径

    文件路径分为绝对路径和相对路径,在项目中页面跳转.配置文件读写.文件上传下载等等许多地方都涉及到文件路径问题. 一篇好文转载于此:http://blog.csdn.net/shendl/archive ...

  3. 对Java Web项目中路径的理解

    第一个:文件分隔符 坑比Window.window分隔符 用\;unix采用/.于是用File.separator来跨平台 请注意:这是文件路径.在File f = new File(“c:\\hah ...

  4. Java Web项目中连接Access数据库的配置方法

    本文是对前几天的"JDBC连接Access数据库的几种方式"这篇的升级.因为在做一些小项目的时候遇到的问题,因此才决定写这篇博客的.昨天已经将博客公布了.可是后来经过一些验证有点问 ...

  5. web项目中各种路径的获取(复制,为以后好找资源)

    web项目中各种路径的获取 1.可以在servlet的init方法里 String path = getServletContext().getRealPath("/"); 这将获 ...

  6. linux 下用renameTo方法修改java web项目中文件夹名称问题

    经测试,在Linux环境中安装tomcat,然后启动其中的项目,在项目中使用java.io.File.renameTo(File dest)方法可行. 之前在本地运行代码可以修改,然后传到Linux服 ...

  7. Java Web项目中缺少Java EE 6 Libraries怎么添加

    Java Web项目中缺少Java EE 6 Libraries怎么添加 具体步骤如下: 1.项目名称上点击鼠标右键,选择"Build Path-->Configure Build P ...

  8. java web 项目中 简单定时器实现 Timer

    java web 项目中 简单定时器实现 Timer 标签: Java定时器 2016-01-14 17:28 7070人阅读 评论(0) 收藏 举报  分类: JAVA(24)  版权声明:本文为博 ...

  9. java web项目中打开资源文件中文乱码

    1 java web项目中经常使用多模块管理.在某一个模块中添加了一些资源文件.但不是启动项目.有时候需要在程序中读取资源文件内容,打包后放到容器中就不能正常运行了.需要将所有资源文件放到启动项目的 ...

随机推荐

  1. input框自动填充内容背景颜色为黄色解决方法

    谷歌浏览器input自动填充内容,背景色会是黄色,想改的话: input:-webkit-autofill { box-shadow: 0 0 0px 1000px white inset;} 这种方 ...

  2. [hadoop转载]tearsort

        1TB排序通常用于衡量分布式数据处理框架的数据处理能力.Terasort是Hadoop中的的一个排序作业,在2008年,Hadoop在1TB排序基准评估中赢得第一名,耗时209秒.那么Tera ...

  3. IT项目管理的六种错误思维

    导读:在软件行业,在界面设计没有正式展现给客户之前,所有的工作都处于需求调研阶段.很多IT项目经理因为年轻,初生牛犊不怕虎,胆量大,勇气足,敢于在实践中引入新的工具.方法.敢于尝试不是坏事,但试验的风 ...

  4. mongodb数据库连接池(java版)

    mongodb数据库接口的设计 package storm.db; import java.util.ArrayList; import com.mongodb.DB; import com.mong ...

  5. AIX topas命令详解

    本文转载于:AIX topas命令详解 topas命令默认2秒更新一次 一.topas命令以区域形式表现系统各项指标性能,如下图: 1. CPU:反应CPU性能区域,如果有多个 CPU,按 c 键两次 ...

  6. PHP文件操作常用函数总结

    一 .解析路径: 1 获得文件名: basename(); 给出一个包含有指向一个文件的全路径的字符串,本函数返回基本的文件名.如果文件名是以 suffix 结束的,那这一部分也会被去掉. eg: $ ...

  7. Java和Tomcat类加载机制

    转自:http://blog.csdn.net/codolio/article/details/5027423 加载类是运行程序的基础,了解Java和Tomcat的类加载机制对更有效地开发.调试Web ...

  8. 英文Ubantu系统安装中文输入法

    以前都是安装的中文Ubantu,但是有时候用命令行的时候中文识别不好,会出现错误,所以这次安装了英文版,但是安装后发现输入法不好用,于是就要自己安装输入法. 安装环境为Ubantu13.04 1.卸载 ...

  9. asp.net mvc 两级分类联动方法示例

    前台视图代码 <%:Html.DropDownList("AwardClassMainID","请选择")%> <%:Html.DropDow ...

  10. 无法打开SQL Server的连接

       机房收费系统重构版的登陆敲了好几天了,总算把登陆窗口敲完了,代码调试的差点儿相同了,问题就处在数据库了.    SQL Server配置管理里的SQL  Server服务都启动了,可是还是报这个 ...