绝对路径,根路径,相对路径
程序员文章站
2022-05-09 23:10:56
...
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2019/07/11
Time: 15:40
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
<%
String basePath = request.getScheme()+"://"+request.getServerName()
+":"+request.getServerPort()+request.getContextPath()+"/";
%>
<base href="<%=basePath%>">
</head>
<body>
<h3>绝对路径:以http开始,包括ip、port、上下文路径、目录路径、文件名。访问范围所有服务器的所有应用</h3>
<a href="http://127.0.0.1:8080/myservlet1/path1/insert.jsp">同一个应用同一个目录下的文件:insert.jsp</a><br>
<a href="http://127.0.0.1:8080/myservlet1/path1/sub/show.jsp">同一个应用同级目录下的文件:sub/show.jsp</a><br>
<a href="http://127.0.0.1:8080/myservlet1/path2/update.jsp">同一个应用其他目录下的文件1:path2/update.jsp</a><br>
<a href="http://127.0.0.1:8080/myservlet1/index.jsp">同一个应用其他目录下的文件2:index.jsp</a><br>
<a href="http://127.0.0.1:8080/myservlet1/servlet/FirstServlet">同一个应用的servlet FirstServlet</a><br>
<a href="http://127.0.0.1:8080/myjsp1/cart/cart.html">同一个服务器不同应用cart.html</a><br>
<a href="http://www.bjsxt.com">北京尚学堂</a><br>
<a href="https://www.bjsxt.com:443/news/11377.html">乔迁之喜!武汉尚学堂乔迁光谷,欢迎考察!</a>
<h3>根路径,以/开始,/代表当前服务器,访问范围:当前服务器的所有应用</h3>
<a href="/myservlet1/path1/insert.jsp">同一个应用同一个目录下的文件:insert.jsp</a><br>
<a href="/myservlet1/path1/sub/show.jsp">同一个应用同级目录下的文件:sub/show.jsp</a><br>
<a href="/myservlet1/path2/update.jsp">同一个应用其他目录下的文件1:path2/update.jsp</a><br>
<a href="/myservlet1/index.jsp">同一个应用其他目录下的文件2:index.jsp</a><br>
<a href="/myservlet1/servlet/FirstServlet">同一个应用的servlet FirstServlet</a><br>
<a href="/myjsp1/cart/cart.html">同一个服务器不同应用cart.html</a><br>
<h3>相对路径1:相对于当前文件自身.访问范围:当前服务器的所有应用</h3>
<a href="./insert.jsp">同一个应用同一个目录下的文件:insert.jsp</a><br>
<a href="./sub/show.jsp">同一个应用同级目录下的文件:sub/show.jsp</a><br>
<a href="../path2/update.jsp">同一个应用其他目录下的文件1:path2/update.jsp</a><br>
<a href="../index.jsp">同一个应用其他目录下的文件2:index.jsp</a><br>
<a href="../servlet/FirstServlet">同一个应用的servlet FirstServlet</a><br>
<a href="../../myjsp1/cart/cart.html">同一个服务器不同应用cart.html</a><br>
<h3>相对路径2:相对于基准路径。访问范围:当前服务器的所有应用</h3>
<a href="path1/insert.jsp">同一个应用同一个目录下的文件:insert.jsp</a><br>
<a href="path1/sub/show.jsp">同一个应用同级目录下的文件:sub/show.jsp</a><br>
<a href="path2/update.jsp">同一个应用其他目录下的文件1:path2/update.jsp</a><br>
<a href="index.jsp">同一个应用其他目录下的文件2:index.jsp</a><br>
<a href="servlet/FirstServlet">同一个应用的servlet FirstServlet</a><br>
<a href="../myjsp1/cart/cart.html">同一个服务器不同应用cart.html</a><br>
<h3>request关于路径的方法</h3>
<%=request.getScheme() %><br>
<%=request.getServerName() %><br>
<%=request.getServerPort() %><br>
<%=request.getContextPath() %><br>
<!--
路径的选择
1.访问其他服务器的资源,只能使用绝对路径
2.访问当前服务器的其他项目,建议使用根路径
3.访问当前服务器的当前项目,建议使用相对路径
建议使用相对路径2
以上路径理论的适用范围
只适用HTML标签
<a href=""></a> <img src="" alt=""> <form action=""></form>
<link rel="alternate" href="atom.xml" type="application/atom+xml" title="Atom">
<script !src=""></script>
不适用于JSP的路径
转发
重定向
文件包含
-->
</body>
</html>
package com.bjsxt.servlet;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class LoginServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//解决post表单的中文乱码问题
//request.setCharacterEncoding("utf-8");
//获取表单的数据
String username = request.getParameter("username");
//解决get请求的乱码问题
// byte [] bytes=username.getBytes("iso-8859-1");//string-- byte[]
// username = new String(bytes,"utf-8");//byte []---string
String password = request.getParameter("pwd");
//增加服务器端的格式验证
if(username == null || "".equals(username)){
request.setAttribute("nameerror","用户名不能为空(JSP)");
request.getRequestDispatcher("/admin/login.jsp").forward(request,response);
return; //不加return,后面的语句还会执行
}
if(password == null || password.length()<=6){
request.setAttribute("pwderror","密码长度要大于6(JSP)");
request.getRequestDispatcher("/admin/login.jsp").forward(request,response);
return;
}
//调用数据库判断登录是否成功
boolean flag = false;
if(username.indexOf("sxt")>=0 || username.indexOf("尚学堂")>=0){
flag = true;
}
//页面的跳转
if(flag){
//跳到成功页面
request.setAttribute("uname",username);
//response.sendRedirect("/myservlet1/admin/success.jsp");//重定向Redirect
//response.sendRedirect("http://www.bjsxt.com");
//response.sendRedirect("/myservlet1/admin/success.jsp");
//response.sendRedirect(request.getContextPath()+"/admin/success.jsp");
//http://localhost:8080/myservlet1/servlet/LoginServlet
//http://localhost:8080/myservlet1/admin/success.jsp
//http://localhost:8080/myservlet1/servlet/success.jsp
response.sendRedirect("../admin/success.jsp");
}else{
//跳回登录页面
request.setAttribute("error","用户名或者密码错误(JSP)");
//request.getRequestDispatcher("/admin/login.jsp").forward(request,response);//转发
//request.getRequestDispatcher("http://www.bjsxt.com").forward(request,response);
RequestDispatcher rd = request.getRequestDispatcher("../admin/login.jsp");
rd.forward(request,response);
//return;
}
}
}
/**
* 客户端(用户控制)跳转的两种方式(发起新请求的两种方式)
* 1.超链接
* 2.提交表单
* 本质都是:在地址栏给出请求资源的url
*
*
* 服务器端控制的两种跳转方式
* 1.转发:Dispatcher
* 2.重定向:Redirect
* 还有一种方式 include,使用很少,其实不属于跳转;
转发和重定向的共同点
都实现了跳转,并且是程序控制的
不同点
1.语句不同
转发: request.getRequestDispatcher("/login2/login.jsp").forward(request,response);
重定向 response.sendRedirect("/login2/success.jsp");
2.跳转后地址栏路径不同
转发:跳转之前的地址
重定向:跳转之后的地址 success.jsp
3.是否可以共享同一个request的数据
转发:可以共享
重定向:无法共享
4.原理的不同
转发: 110 呼叫转移
重定向: 114 忘记带手机
5.效率高低
转发效率高
6.跳转的范围
转发:只限于当前项目(最大也就是当前服务器)
重定向:可以重定向到互联网的任意位置
7.路径的不同
绝对路径
转发:不支持
重定向:支持
根路径
转发 /代表当前项目 应用
重定向 /代表当前服务器
相对路径
只能相对于当前文件自身,不能相对于基准路径
转发和重定向时使用哪个路径?
1.要跳转到其他服务器,必须使用重定向,必须使用绝对路径
2.要跳转到当前服务器,不管是当前项目还是其他项目,建议都使用根路径
重定向:建议使用request.getContextPath() 动态获取上下文路径
转发:指定在当前项目转发,/代表当前项目的根路径
跳转时到底是使用转发还是重定向
某些情况下,无可选择
希望前后两个组件共享request数据,使用转发
跳转到同一个应用的WEB-INF目录下只能用转发
跳转到不同的应用只能使用重定向
使用Cookie存储数据需要使用重定向
跳转到同一个应用,哪种方式更好
使用转发效率高,尽量使用转发
使用转发需要解决重复提交问题,尤其是添加操作
注销之后一般用重定向
连续表单页面之间建议使用重定向,避免属性冲突
转发和重定向是服务器端的跳转还是客户端跳转
转发:服务器
重定向:客户端跳转,由服务器端的程序控制的
点击超链接、提交表单也是客户端跳转,由用户控制
*/
上一篇: php基础知识:类与对象(3) 构造函数和析构函数
下一篇: Php部分常见问题总结第1/2页