java - 在java web中定向时如何走出文件夹
问题描述
我有一个 JSP 页面,我正在检查而不是用户,有一个有效的用户会话以访问客户页面,问题是当我尝试将客户重定向到我的索引/登录页面时,它包括我的 WEB -INF 文件夹,我的所有其他文件或所在的位置。
这是我的 isValidUser.jsp:
<html>
<%
User u = (User) session.getAttribute("user");
if(u == null){
request.getRequestDispatcher("index.jsp").forward(request, response);
}
%>
</html>
这是我包含它的方式:
<html>
<head>
<link rel="stylesheet" type="text/css" href="main.css" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Find carport</title>
</head>
<body>
<%@include file ="header.jsp" %>
<%@include file="isValidUser.jsp" %>
<h1>Start din ordre</h1><br>
</body>
</html>
它给出了错误:"HTTP Status 404 - /LogInSample/WEB-INF/index.jsp"
因为它认为我的索引页在我的 WEB-INF 文件夹中,我该如何防止这种情况发生?
解决方案
您正在使用相对于您的 servlet 的路径。
从ServletRequest#getRequestDispatcher的文档中:
指定的路径名可以是相对的,尽管它不能扩展到当前 servlet 上下文之外。如果路径以“/”开头,则将其解释为相对于当前上下文根。如果 servlet 容器无法返回 RequestDispatcher,则此方法返回 null。
这就是你需要的
request.getRequestDispatcher("/index.jsp").forward(request, response);
编译后的所有 servlet 都转到WEB-INF/classes,因此您的代码试图在 WEB-INF 文件夹下找到您的index.jsp,因为它与您的 servlet 而不是上下文根相关。
PS:我假设您的 index.jsp 位于上下文根目录下,但如果它位于上下文根目录下的某个文件夹中,您也需要在路径中指定文件夹。
推荐阅读
- neo4j - Spring Data Neo4j Repository Save 方法正在执行 UNWIND MATCH 插入 UNWIND CREATE
- computer-vision - 定义一个物体并检测同一张图片中的相似物体
- ios - 测试运行程序未能加载测试包
- python - Python:从文件列表中读取变量以计算方程
- spring - 在 application.properties spring boot 中分配 jenkins 变量
- python - 根据另一列中的数据从 csv 文件中的列中提取数据
- r - plotly 中的下拉过滤器,r - 不显示“全部”
- powershell - Powershell 隐藏选项卡到 HTML 邮件中的空格
- node.js - 无法使用 ReplyKeyboardRemove 删除 Telegram 键盘
- mysql - MySQL 复杂查询 - 使用 UNION ALL 和内部 JOIN 对多个数据库求和