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(“index.jsp”);
23
24 //4、表单提交
25 //response.setContentType(“text/html”);
26 //response.getWriter().write("");
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,servlet,tomcat
标签: 理解java Web项目中的路径问题

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用与更新说明 1.5.8 Beta 2018-01-28 一、增加了几个变量 %DomainNoPoint%为当前扫描目标域名去掉. wwwbaiducom %DomainUnderLine%为当前扫描目标域名将.换成下划线www_baidu_com %DomainCenterAndTldUnderLine%为当前扫描目标域名主体与后缀并将.换成下划线baidu_com %LastSubPath%为当前目标url最后一级目录 baidu.com/admin/data/ 则%LastSubPath%为data (注:此变量需要为Url加入/结尾,如未存在子目录则程序自动抛弃此行字典。) 1.5.7 Beta 2018-01-26 一、增加字典变量功能 目标域名为www.baidu.com的话 四个变量 分别是 %Domain% 为当前扫描目标域名www.baidu.com %SubDomain% 为当前扫描目标子域名www %DomainCenter% 为当前扫描目标域名主体baidu %DomainCenterAndTld% 为当前扫描目标域名主体与后缀baidu.com 二、给非head访问增加返回长度功能通过返回长度可有效识别一些通过关键字无法识别的自定义404页面 三、修复若干bug并取消了启动弹框 1.5.6 Beta 2017-08-30 一、修复关闭后进程不推出的问题 二、修复cookie支持兼容问题 1.5.5 Beta 2017-08-19 一、修改开始按钮的显示状态为动态(根据线程状态判断) 二、恢复暂停按钮 1.5.4 Beta 2017-08-14 一、接受建议调整功能可以自由输入http头不止支持useragent和cookie 二、接受建议调整界面自定义404的输入框挪到左侧 三、接受建议取消暂停按钮将开始和停止按钮合并 1.5.3 Beta 2017-08-09 一、接受建议让结果表格自动下滑 二、接受建议修改对延时扫描时间的小数支持 三、修复多URL扫描的多处bug 1.5.2 Beta 2017-08-06 一、接受建议加入cookie功能 二、接受建议修改对URL的处理方法去掉多余的’/’ 三、对3xx结果显示跳转后地址http://www.xxx. xxx/admin/index.php ——–> login_redir.php 1.5.1 Beta 2017-08-05 一、修改若干细节 1.5 Alpha 2017-07-28 一、修复延时扫描处多个bug 二、优化线程 三、修复从快捷方式启动后都取字典失败的问题 四、扫描前URL编码解决部分误报问题 1.4 至安全学员内测版2017-07-21 一、修改最大并发连接为100 二、对输入Url进行智能处理获取最后一个’/’的目录进行扫描 三、增加工作线程数显示控制停止后开始前的线程是否全部退出检查 1.3 Alpha 2017-07-20 一、增加停止按钮 二、增加暂停按钮 三、拼接字典时自动根据字典类型增加/ 符号使扫描结果更精准 1.2 Alpha 2017-07-18 一、精确扫描结果识别跳转页面 二、对输入参数进行判断 1.1 Alpha 2017-07-18 一、增加列表内容不同常用状态码使用不同颜色的功能绿色为200 红色为403 二、增加点击列头后对列表内容排序的功能 三、增加右键导出结果功能 四、美化部分文本内容 五、点击开始会自动重置工具方便重复使用不必重新打开 六、增加自选加载字典模式可多选! 1.0 Alpha 2017-07-17 秉承着为人民服务的想法还有就是Windows下我确实没有什么功能比较全又稳定的此类工具了此前用过破壳扫描器和dirburte 都不稳定经常崩,御剑虽好但是缺少很多小功能。 不扯这些了介绍一下功能吧 一、先说说并发线程数吧,虽然默认是20 但是加大也无妨看你自己的各个参数设置和机器网络等配置了。 二、超时时间自己视情况而定也不必多介绍了。 三、这个随机xff头和xr头套用百度上一段话能懂得自然懂得不懂得也无所谓很少能碰见需要用到的这种情况勾选后每次访问都会随机生成这两个IP值如果线程开的大可能比较耗cpu。 1、X-Forwarded-For是用于记录代理信息的,每经过一级代理X-Forwarded-For是用于记录代理信息的,每经过一级代理(匿名代理除外),代理服务器都会把这次请求的来源IP追加在X-Forwarded-For,来自4.4.4.4的一个请求,header包含这样一行X-Forwarded-For: 1.1.1.1, 2.2.2.2, 3

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值