JavaWeb中的关于html、jsp、servlet下的路径问题
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下的路径问题的更多相关文章
- JSP中使用的模式——JSP+Servlet+JavaBean
上一篇博文写到模式一:JSP+JavaBean 链接地址:http://wxmimperio.coding.io/?p=155 JSP中两种模式的总结 链接地址:http://wxmimperio.c ...
- java中获取项目在tomcat目录下的路径方法
HttpServletRequest request //获取的是ROOT项目在tomcat下的路径 方法1: String path = request.getSession().getServle ...
- HTML JSP Servlet 的 相对路径 绝对路径
HTML 相对路径 - 没有最前面的 /: 相对于当前文件,和OS一样 绝对路径 - 前面带 / : 相对于 http://<host>:port/ Servlet 相对路径 - 相对于 ...
- 在javaweb中通过servlet类和普通类读取资源文件
javaweb有两种方式读取资源文件 在Servlet中读取,可以使用servletContext,servletContext可以拿到web所有的资源文件,然后随便读,但是这种方法不常用,尽量少在S ...
- 软件架构设计学习总结(18):MVC三层架构在各框架(jsp+servlet + Struts1+ Struts2+ springMVC)中的特征
1.基于web开发中最原始的jsp+Servlet 图形化理解jsp+servlet结构: 1.从结构上分析jsp+servlet图解原理: 在基于mvc设计模式下的最原始的jsp+Servlet ...
- JSP Servlet WEB生命周期
[转载] JavaWeb的生命周期是由Servlet容器来控制的总的来说分为三个阶段1.启动阶段:加载web应用相关数据,创建ServletContext对象,对Filter和servlet进行初始化 ...
- windows7_下Eclipse中部署tomcat7.0进行JSP+servlet开发
环境:windows 7+EclipseJava EE IDE for Web Developers +tomcat 7.02 插件:tomcatPluginV321.zip(百度搜索下载即可) 一. ...
- JavaWeb中Servlet和Jsp跳转路径的写法
最近学习时,常常要写一些页面之间的跳转或者前台和后端之间的跳转 下面总结一下自己对于这些跳转路径的写法 声明:以下讲到的jsp文件都默认在WebRoot目录下 1.表单(Jsp)->Servle ...
- Intellij idea创建javaWeb:实现JSP/Servlet(转)
转自:https://www.jianshu.com/p/9684e90cf7b5 Intellij idea创建javaWeb:实现JSP/Servlet by_love唯念 关注 2016.12. ...
随机推荐
- 微信小程序-简介
微信小程序定位 1. 不需要下载安装即可使用 2. 用户用完即走,不用关系是否安装太多应用 3. 应用无处不在,随时可用 # 不要安装可使用是个伪命题,因为小程序的安装包小于1M,下载安装到使用的过程 ...
- 音频数据增强及python实现
博客作者:凌逆战 博客地址:https://www.cnblogs.com/LXP-Never/p/13404523.html 音频时域波形具有以下特征:音调,响度,质量.我们在进行数据增强时,最好只 ...
- pytest之将多个测试用例放在一个类中,生成唯一临时文件夹
将多个测试用例放在一个类中 简单来说就是将多个测试用例放到类中,通过pytest去管理,这和Testng很像.示例代码如下: """ 将多个测试用例放到一个类中执行 &q ...
- 实验 4:Open vSwitch 实验——Mininet 中使用 OVS 命令
一.安装目的 Mininet 安装之后,会连带安装 Open vSwitch,可以直接通过 Python 脚本调用Open vSwitch 命令,从而直接控制 Open vSwitch,通过实验了解调 ...
- 485hub
485hub 485hub ZLAN9480A是一款可通过一路RS485主口扩展出8路RS485从口的工业级隔离型8口RS485集线器.可以有效的实现RS485网络的中继.扩展与隔离. ZLAN948 ...
- 数组的高级应用含ES6 for of 用法
// 在ES5中常用的10种数组遍历方法: // 1. 原始的for循环语句 // 2. Array.prototype.forEach数组对象内置方法 // 3. Array.prototype.m ...
- python中jsonpath模块运用
原文链接:https://www.cnblogs.com/denise1108/p/10265911.html 1. jsonpath介绍用来解析多层嵌套的json数据;JsonPath 是一种信息抽 ...
- 扫描仪扫描文件处理-富士通ix500参数
纸张太薄不要扫,非常容易卡纸 当纸张薄的时候,每次不要放入太多,很容易因为层叠纸张压力导致滚动拉动单张力度过大,从而卡纸 卡纸第一时间叩开"滚轮盖" 去掉"自动跳过空白页 ...
- docker设置http访问
1 编辑配置文件 vim /etc/docker/daemon.json { "registry-mirrors": ["https://a4fyjv0u.mirr ...
- TCP/IP的十个问题
一.TCP/IP模型 TCP/IP协议模型(Transmission Control Protocol/Internet Protocol),包含了一系列构成互联网基础的网络协议,是Internet的 ...