1 前言

本文将对近期项目练习中出现的关于文件路径的问题进行分析和总结,主要涉及html页面中的href及ajax指向路径、jsp页面中href指向路径及servlet转发或重定向路径等内容,本文的分析及总结将尽量做到知其然知其所以然。

注:本文中的项目练习,是通过IDEA的MAVEN插件,部署到TOMCAT完成的。**所有html、jsp页面都在webapp文件夹下,所有src中的java文件会由maven自动编译为class文件,放在WEB-INF文件夹下。**

2 html页面标签内的路径写法

2.1 html页面之间直接跳转的路径写法

直接在标签的href中写指向的html页面文件名即可

<a href="login.html">登录</a>

2.2 html页面内通过ajax跳转到servlet的路径写法

直接在URL属性处写servlet的value值(但是最前面不要加/)即可

$.post("registerUserServlet", $(this).serialize(), function (data) {});

如果是指向servlet下的方法,写value值(但是最前面不要加/)+"/"+方法名即可

$.post("user/register", $(this).serialize(), function (data) {});

2.3 servlet内通过java代码书写的html标签的路径写法

直接在标签的href中写指向的html页面文件名即可

<a href="login.html">登录</a>

3 jsp页面标签内的路径写法

3.1 jsp页面之间直接跳转的路径写法

直接在标签的href中写指向的html页面文件名即可

<a class="btn btn-primary" href="add.jsp">添加联系人</a>

由于jsp页面中可以获取绝对路径,加上绝对路径也可以

<a class="btn btn-primary" href="${pageContext.request.contextPath}/add.jsp">添加联系人</a>

若不小心在未添加绝对路径的情况下,还在文件名前面加了个"/"符号,路径则会直接指ip+/文件下,比如上面两种情况的链接为http://localhost:8080/finalTest0/add.jsp,写错情况下或指向http://localhost:8080/add.jsp,错误写法如下

<a class="btn btn-primary" href="/add.jsp">添加联系人</a>

3.2 jsp页面内跳转到servlet的路径写法

直接在标签的href中写servlet的value值(但是最前面不要加/)即可

<a
href="FindUserByPageServlet" style="text-decoration:none;font-size:33px">查询所有用户信息
</a>

由于jsp页面中可以获取绝对路径,加上绝对路径也可以

<a
href="${pageContext.request.contextPath}/FindUserByPageServlet" style="text-decoration:none;font-size:33px">查询所有用户信息
</a>

4 servlet转发或重定向的路径写法

4.1 关于重定向后和转发后的问题

重定向的页面中,仍然可以使用相对路径,但是在转发的页面中,相对路径就会失效。关于重定向后和转发后的理解,可自行查看其他文章,下面小节内说明的只是重定向时和转发时的路径怎么写。

4.2servlet重定向到html页面的路径写法

需要写成绝对路径的形式,会正确指到http://localhost/travel/login.html;不在同一文件夹下,就使用getContextPath来查找路径,getContextPath获取的是webapp路径,再需要什么文件,在后面加就行了

response.sendRedirect(request.getContextPath()+"/login.html");

如果写成相对路径,会错误指到http://localhost/travel/user/login.html

response.sendRedirect("login.html");

4.3servlet转发到html页面的路径写法

因为是服务器做转发动作,所以要在文件名前面加"/"符号

request.getRequestDispatcher("/list.jsp").forward(request,response);

5 关于"/"符号的一些认识

转发是在服务端完成的事情,是对客户端的同一个request请求进行传递,浏览器并不知道(不产生新的请求)。(相当于拨打110,然后110内部给你分配到所属辖区)
重定向是浏览器来做的事情,重定向时,服务器返回一个状态是302的的response,里面包含了跳转的地址,由浏览器获得后,自动发送一个新的请求(产生新的请求)。(相当于拨打114查号台,然后根据返回的号码再次拨打)
————————————————
版权声明:本文为CSDN博主「搁浅浅浅丶」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhl19920118/article/details/88654078

所以只要是在同一个文件夹下的一些跳转,路径前面都不要加"/"符号,或者说重定向和普通的超链接索引是在服务器内部的文件间跑来跑去,但如果是转发,则是站在服务器全局的角度来看待自己的这些文件,所以要在路径前面加"/"符号

JavaWeb中的关于html、jsp、servlet下的路径问题的更多相关文章

  1. JSP中使用的模式——JSP+Servlet+JavaBean

    上一篇博文写到模式一:JSP+JavaBean 链接地址:http://wxmimperio.coding.io/?p=155 JSP中两种模式的总结 链接地址:http://wxmimperio.c ...

  2. java中获取项目在tomcat目录下的路径方法

    HttpServletRequest request //获取的是ROOT项目在tomcat下的路径 方法1: String path = request.getSession().getServle ...

  3. HTML JSP Servlet 的 相对路径 绝对路径

    HTML 相对路径 - 没有最前面的 /: 相对于当前文件,和OS一样 绝对路径 - 前面带 / : 相对于  http://<host>:port/ Servlet 相对路径 - 相对于 ...

  4. 在javaweb中通过servlet类和普通类读取资源文件

    javaweb有两种方式读取资源文件 在Servlet中读取,可以使用servletContext,servletContext可以拿到web所有的资源文件,然后随便读,但是这种方法不常用,尽量少在S ...

  5. 软件架构设计学习总结(18):MVC三层架构在各框架(jsp+servlet + Struts1+ Struts2+ springMVC)中的特征

    1.基于web开发中最原始的jsp+Servlet   图形化理解jsp+servlet结构: 1.从结构上分析jsp+servlet图解原理: 在基于mvc设计模式下的最原始的jsp+Servlet ...

  6. JSP Servlet WEB生命周期

    [转载] JavaWeb的生命周期是由Servlet容器来控制的总的来说分为三个阶段1.启动阶段:加载web应用相关数据,创建ServletContext对象,对Filter和servlet进行初始化 ...

  7. windows7_下Eclipse中部署tomcat7.0进行JSP+servlet开发

    环境:windows 7+EclipseJava EE IDE for Web Developers +tomcat 7.02 插件:tomcatPluginV321.zip(百度搜索下载即可) 一. ...

  8. JavaWeb中Servlet和Jsp跳转路径的写法

    最近学习时,常常要写一些页面之间的跳转或者前台和后端之间的跳转 下面总结一下自己对于这些跳转路径的写法 声明:以下讲到的jsp文件都默认在WebRoot目录下 1.表单(Jsp)->Servle ...

  9. Intellij idea创建javaWeb:实现JSP/Servlet(转)

    转自:https://www.jianshu.com/p/9684e90cf7b5 Intellij idea创建javaWeb:实现JSP/Servlet by_love唯念 关注 2016.12. ...

随机推荐

  1. Spring学习(一)--Spring的设计与整体架构

    之前只是在学校里大概的学习了一下Spring框架的使用以及一些最基本.浅显的原理,并没有做出深入的学习,等到工作之后想提升自己的时候发现所掌握的Spring框架的简直烂如狗屎,为监督自己的学习进度,立 ...

  2. Python-对迭代器进行切片操作-itertools模块

    案例: 对于某个文件,我只想读取到其中100~200行之间的内容,是否可以通过切片的方式进行读取? 我想: f = open() f[100:200] 可行? 如何解决这个问题? 方法1: 全部读取到 ...

  3. 屯点自用CTF网站

    尚且杂乱,刚刚准备搬运东西到博客来,慢慢收拾. 芜湖,起飞  --大司 16进制转换文本 Base64编码转换 quipqiup词频分析 Brainfuck/Ook! Obfuscation/Enco ...

  4. RHSA-2017:1931-中危: bash 安全和BUG修复更新(代码执行)

    [root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) 修复命令: 使用root账号登陆She ...

  5. 2014年 实验二 B2C网上购物

    实验二 B2C网上购物 [实验目的] ⑴.熟悉虚拟银行和网上支付的应用 ⑵.熟悉并掌握消费者B2C网上购物和商家的销售处理 [实验条件] ⑴.个人计算机一台 ⑵.计算机通过局域网形式接入互联网 (3) ...

  6. 多测师讲解unittest介绍及自动化测试实现流程_高级讲师肖sir

    unittest框架介绍 unittest框架是python中一个标准的库中的一个模块,该模块包括许多的类如 test case类.test suit类.texttest runner类.textte ...

  7. docker启动服务---------------redis

    1. docker拉取镜像 docker pull redis 2 建立配置目录和准备配置文件 mkdir -p /usr/local/docker-redis && cd /usr/ ...

  8. Ubuntu安装zookeeper问题

    在Ubuntu系统安装zookeeper后,启动报错: root@host8:/usr/solrcould/service1/zookeeper-3.5.0-alpha# sh bin/zkServe ...

  9. linux磁盘空间满了

    df-h 看到根目录已经用满了! find / -size +100M |xargs ls -lh列出系统内大于100M的文件 du --max-depth=1 -h 查看当前目录内文件夹的大小 看一 ...

  10. tensorflow 出现KeyError: 'tulips\\8689672277_b289909f97_n.jpg'报错

    在学习tensorflow基础教程-图像章节过程中,按照官网教程学习的时候出现了以下报错 一开始很迷茫,按着教程走怎么会这样呢 ,上网查资料也没找到找到,没办法,只好自己找原因,根据提示KeyErro ...