JSP 页面中的 路径问题
时间:2022-07-22
本文章向大家介绍JSP 页面中的 路径问题,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
一、关于 jsp
中的超链接路径问题
我们假设你的项目路径
也就是 web应用程序的根目录为 /webapp
<a href="/webapp/login.jsp"></a>
<a href="login.jsp"></a>
上面两种写法是相同的,都是指向 webapp
应用程序下的 login.jsp
页面。
- 如果以"
/
"开头,代表相对于web服务器
的根目录 - 如果不以"
/
"开头,代表相对于webapp
应用程序的根目录
我们知道,web服务器可以包含多个 web应用程序,而/
代表服务器的根目录,也就是Tomcat
的根目录,加上webapp
就是告诉它我要访问的是哪一个应用程序,如果不加就默认是当前的应用程序。
二、关于 jsp
中请求路径的问题
一般我们会在 jsp 页面中放一个 form 表单,这样当我们启动项目的时候请求可以直接跳转到指定的请求路径上面去,这里的规则和超链接一样,只不过要重点注意 Servlet 的路径。
例如:
如果你的 jsp 页面直接在项目的根目录下的话,表单跳转如下:
<form action="customer.do" method="post">
<table border="1">
<tr>
<td>客户姓名</td>
<td><input type="text" name="name"></td>
</tr>
<tr>
<td>邮箱地址</td>
<td><input type="text" name="email"></td>
</tr>
<tr>
<td>联系电话</td>
<td><input type="text" name="phone"></td>
</tr>
<tr>
<td><input type="submit" value="提交"></td>
<td><input type="reset" value="重置"></td>
</tr>
</table>
</form>
对用的 Servlet 接口:
@WebServlet(urlPatterns = "/customer.do")
public class Servlet01 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String name = request.getParameter("name");
String email = request.getParameter("email");
String phone = request.getParameter("phone");
Customer customer = new Customer(name, email, phone);
HttpSession session = request.getSession();
synchronized (session) {
session.setAttribute("customer", customer);
}
request.getRequestDispatcher("/demo/displayCustomer.jsp").forward(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
但是如果你的项目结构是这样的:
也就是说 jsp 文件在项目的根目录下的一个包下。
<form action="customer.do" method="post">
<table border="1">
<tr>
<td>客户姓名</td>
<td><input type="text" name="name"></td>
</tr>
<tr>
<td>邮箱地址</td>
<td><input type="text" name="email"></td>
</tr>
<tr>
<td>联系电话</td>
<td><input type="text" name="phone"></td>
</tr>
<tr>
<td><input type="submit" value="提交"></td>
<td><input type="reset" value="重置"></td>
</tr>
</table>
</form>
对应的 Servlet 接口:
@WebServlet(urlPatterns = "/demo/customer.do")
public class Servlet01 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String name = request.getParameter("name");
String email = request.getParameter("email");
String phone = request.getParameter("phone");
Customer customer = new Customer(name, email, phone);
HttpSession session = request.getSession();
synchronized (session) {
session.setAttribute("customer", customer);
}
request.getRequestDispatcher("/demo/displayCustomer.jsp").forward(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
三、总结
需要填写路径的地方有四处:
- 链接地址:
<a href=" "></a>
- 表单地址:
<form action=" ">
- 重定向地址:
response.sendRedirect(" ");
- 转发地址:
request.getRequestDispatcher(" ");
相对路径:
- 不以
/
开头
绝对路径:
- 以
/
开头
两种都可以,相对路径是相对于当前项目所在的目录,如果是 Servlet 的话就是相对于 @WebServlet(urlPatterns = "/demo/customer")
这里的地址。
随便拿一个 JSP 和 Servlet 举例子:
- jsp 页面中的 form 表单的 action 指向直接写:
servlet.do
- Servlet 的
urlPatterns
的值必须是对应的 jsp 页面相对于应用根目录的绝对路径,也就是要加上jsp
页面所在的包名,如:/demo/servlet.do
- 注意这里不用管 Servlet 在那个包下,只需要弄清楚发请求的 jsp 在哪个包下。
- 然后如果 Servlet 中有重定向或者转发都是根据
请求发来的路径
决定的,也就是相对于请求的路径(即urlPatterns
中的发来的请求的jsp
页面的路径),而不是相对于 Servlet 的存放路径。
- Windows Live Writer插入代码vs2010插件
- 分布式队列编程优化篇
- 基于机器学习方法的POI品类推荐算法
- 【Scikit-Learn 中文文档】多类和多标签算法 - 监督学习 - 用户指南 | ApacheCN
- 【Scikit-Learn 中文文档】新异类和异常值检测 - 无监督学习 - 用户指南 | ApacheCN
- Golang中使用echo框架、MongoDB、JWT搭建REST API
- 在对象的原型上添加方法?
- KMeans聚类算法思想与可视化
- 控制台断点调试
- 函数声明与表达式的区别
- 揭开身份证验证的神秘面纱
- return语句的用法
- JavaScript基础讲解 - 函数与参数
- Go实战--golang中使用RethinkDB(gorethink/gorethink.v3)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- C语言二级指针用法之模拟句柄用途
- Linux解压缩文件
- C++核心准则T.11:只要可能就使用标准概念
- 给pugjs的stun主题添加canvas时钟
- C++核心准则T.12:声明局部变量类型时,概念比auto更好
- Arch Linux切换rEFInd开机引导程序
- C++核心准则T.13:对于简单的,单类型参数概念,使用缩略记法更好
- VBA编写Ribbon Custom UI编辑器08——实现ZIP的写入
- 用 Python 写个七夕表白神器
- 3分钟短文 | Laravel 用户授权原来内置了这么多方法
- E0144"const char *" 类型的值不能用于初始化 "char *" 类型的实体的三种解决方法
- 数据采集面对JS加密无所适从?善用这3个工具,搞定一大半的JS逆向!
- 点赞功能设计与实现
- [推荐]Linux入门系列(一)换个角度看Linux其实很简单,带你一起入门
- (建议收藏)Java基础知识笔记(详细)