绝对路径,根路径,相对路径

<%--
  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存储数据需要使用重定向
     跳转到同一个应用,哪种方式更好
        使用转发效率高,尽量使用转发
        使用转发需要解决重复提交问题,尤其是添加操作
        注销之后一般用重定向
        连续表单页面之间建议使用重定向,避免属性冲突
     转发和重定向是服务器端的跳转还是客户端跳转
       转发:服务器
       重定向:客户端跳转,由服务器端的程序控制的
        点击超链接、提交表单也是客户端跳转,由用户控制
 */

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值