016、相对路径和绝对路径的使用场景

路径写法:
1. 路径分类
    1. 相对路径:通过相对路径不可以确定唯一资源
        * 如:./index.html
        * 不以/开头,以.开头路径

        * 规则:找到当前资源和目标资源之间的相对位置关系
            * ./:当前目录  注意:./资源名  可以省略./直接写成   资源名
            * ../:后退一级目录
    2. 绝对路径:通过绝对路径可以确定唯一资源
        * 如:http://localhost/day15/responseDemo2    一般写成/day15/responseDemo2
        * 以/开头的路径

        * 规则:判断定义的路径是给谁用的?(通过判断请求将来从哪儿发出就知道路径给谁用,比如说:页面点击链接按钮和重定向就是给客户端用,内部转发就是给服务器用)
            * 给客户端浏览器使用:需要加虚拟目录(项目的访问路径)
                * 建议虚拟目录动态获取:request.getContextPath()
                * <a> , <form> 重定向...
            * 给服务器使用:不需要加虚拟目录
                * 转发路径

ResponseDemo01.java

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/ResponseDemo01")
public class ResponseDemo01 extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req,resp);
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("Demo01...");
        //方式一、
        //设置状态为重定向
        resp.setStatus(302);
        //设置响应头,重写是客户端请求,因此要写绝对路径(虚拟路径+资源路径)
        //resp.setHeader("Location","/loginServlet/ResponseDemo02");
        //可以使用方法getContextPath获取虚拟路径
        String contextPath = req.getContextPath();
        System.out.println(contextPath);
        resp.setHeader("Location",contextPath+"/ResponseDemo02");

        //方式二,使用简便方式,不用写状态302和Location类响应头
        //resp.sendRedirect("ResponseDemo02");

        //内部转发发送的对象是服务器,因此使用相对路径
        //req.getRequestDispatcher("ResponseDemo02").forward(req,resp);
    }
}

ResponseDemo02.java

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/ResponseDemo02")
public class ResponseDemo02 extends HttpServlet{

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //方式一
//        resp.setStatus(302);
//        resp.setHeader("Location","http://www.baidu.com");


        //方式二:因为返回状态和响应头都是不变的,因此Response对象有一个方法可以简化操作。
        System.out.println("demo02...1...");

        resp.sendRedirect("http://www.baidu.com");

        //放在这里不能打印
        System.out.println("demo02...2...");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req,resp);
    }
}
发布了285 篇原创文章 · 获赞 5 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/l0510402015/article/details/104738881