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的IOC

    1.BeanFactory和FactoryBean BeanFactory是一个接口类,定义了IOC容器最基本的形式,提供了IOC容器所应该遵守的基本服务契约. FactoryBean是一个能产生或者 ...

  2. 玩转Libmodbus(一) 搭建开发环境

    这篇文章是转载的,我主要是参考了其搭建环境的部分. 转载自: https://blog.csdn.net/qq_40452910/article/details/88560310 一.源码下载 1.l ...

  3. 实验 5:OpenFlow 协议分析和 OpenDaylight 安装

    一.实验目的 回顾 JDK 安装配置,了解 OpenDaylight 控制的安装,以及 Mininet 如何连接;通过抓包获取 OpenFlow 协议,验证 OpenFlow 协议和版本,了解协议内容 ...

  4. C++中头文件简介(stdio.h & chrono)

    参考: 1. https://baike.baidu.com/item/stdio.h 2. https://www.cnblogs.com/jwk000/p/3560086.html 1. stdi ...

  5. P5911 [POI2004]PRZ (状态压缩dp+枚举子集)

    题目背景 一只队伍在爬山时碰到了雪崩,他们在逃跑时遇到了一座桥,他们要尽快的过桥. 题目描述 桥已经很旧了, 所以它不能承受太重的东西.任何时候队伍在桥上的人都不能超过一定的限制. 所以这只队伍过桥时 ...

  6. 序列化的JavaScript

    下载 序列化的JavaScript序列化的JavaScript 将JavaScript序列化为包含正则表达式.日期和函数的JSON超集. 概述 这个包中的代码最初是作为表示状态的内部模块.为了扩展它的 ...

  7. ubuntu20 使用命令安装 rabbitmq

    安装 rabbitmq sudo apt-get install erlang-nox -y sudo apt-get update sudo apt-get install rabbitmq-ser ...

  8. 用 Java 实现的八种常用排序算法

    八种排序算法可以按照如图分类 交换排序 所谓交换,就是序列中任意两个元素进行比较,根据比较结果来交换各自在序列中的位置,以此达到排序的目的. 1. 冒泡排序 冒泡排序是一种简单的交换排序算法,以升序排 ...

  9. 开始接触flex

    flex框架使用的是.mxml后缀的文件,可以在Eclipse导入flex开发的插件.代码写完之后需要进行编译成为.swf文件成功之后才可以正常运行.现在刚开始接触金融的项目,需求什么的还有很多不是理 ...

  10. git 查看本地分支和切换本地分支的命令

    查看本地分支,和当前所在的分支 git branch -vv git checkout developer 切换到developer分支