Jsp--绝对路径,相对路径笔记


前几天在学习web基础项目时,在文件部署或者图片调用时,遇到了部分引用文件路径错误问题.

例如:第一种这样的直接在同级别部署没有问题;在login.jsp中引用同级别的JS文件夹中的jQuery部署文件,

在这里插入图片描述

而如果不是同级别目录,之前直接调用不到;

在这里插入图片描述

而如果在调用路径加上../ ;即可正常调用
../”:表示上一层目录。

而如果,在student文件夹下还有一个文件夹;也需要部署上级student的上级web中的js文件夹下的jQuery

就需要用../../

<script src="../../js/jquery.1.8.3.min.js" type="text/javascript"></script>

JSP使用相对路径,前面的路径会自动补全,


使用相对路径回退到调用目录

相对于当前文件的路径

./ 当前的目录
/ 根目录
. ./ 上层目录


或者直接使用绝对路径

方式1:直接用服务器地址作为调用处,也就是文件真正的地址

但是ip或者项目名改变时,这个文件也就调用不到了,需要每个都去更改.

<script src="http://127.0.0.1:8080/xiaozhi/js/jquery.1.8.3.min.js" type="text/javascript"></script>

方式2:直接通过请求获取项目根路径

${pageContext.request.contextPath}

<script src="${pageContext.request.contextPath}/js/jquery.1.8.3.min.js" type="text/javascript"></script>

若出现错误情况,可能是EL表达式被忽略了;
在page指令中指定<%@page isELIgnored="false" %>

方式3:获取到项目的根地址名称,使用el表达式将根目录添加到调用处;

首先使用监听器,获取到项目的根地址名称;且将这个名称放到一个指定属性中;

创建监听器类;

 //监听器;  ServletContext ;  服务器启动时创建 ; 服务器关闭时销毁;
public class MyContextLinster  implements ServletContextListener {

    //初始化方法;
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("创建上下文监听ServletContext");
        //获取ServletContext对象
        ServletContext servletContext = sce.getServletContext();
        //控制台查看项目根目录;
        System.out.println(servletContext.getContextPath());
        //设置属性名为path;值为项目根目录名
        servletContext.setAttribute("path",servletContext.getContextPath());
    }
}

web.xml文件中配置监听器

 <!--配置项目的监听器-->
    <listener>
        <listener-class>com.xiaozhi.linster.MyContextLinster</listener-class>
    </listener>

jsp中需要调用资源时,使用El表达式先将项目的根目录名获取,添加到调用之前;
例如:调用需要的jQuery文件

<script src="${path}/js/jquery.1.8.3.min.js" type="text/javascript"></script>

启动服务器,可以看到控制台有项目根目录名称;

在这里插入图片描述

且在打开的网页查看页面源码;已经自动地将项目根目录名称添加上去了

在这里插入图片描述


在servlet中也可以使用这样的方式指定根目录;
使用请求对象request中的方法getContextPath()

例如:

@WebServlet(name = "login",urlPatterns = "/login")
public class LoginServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //执行退出; 强制销毁session会话对象;
        req.getSession().invalidate();
        //重定向页面;
        resp.sendRedirect(req.getContextPath()+"/login.jsp");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //执行登录;
        try {
            String account = req.getParameter("account");
            String password = req.getParameter("password");
            //记住密码的选项框提交数据;
            String remember = req.getParameter("remember");

            HttpSession session;
             UserDao userDao=new UserDao();
            //根据账号密码--查询到管理员;
             User adminByAccount = userDao.findAdminByAccount(account, password);
             //判断是否与数据库中的用户相同;
                if (adminByAccount!=null) {
                    if (remember != null) {
                        //存储到cookie中,
                        Cookie accountCK = new Cookie("accountCK", account);
                        Cookie passwordCK = new Cookie("passwordCK", password);
                        //手动设置cookie缓存时间为一年;
                        accountCK.setMaxAge(3600 * 24 * 365);
                        passwordCK.setMaxAge(3600 * 24 * 365);
                        //将cookie对象数据添加到客户端;
                        resp.addCookie(accountCK);
                        resp.addCookie(passwordCK);
                    }
                    //获得session对象;
                    session = req.getSession();
                    //将登录人信息传入session对象; 这里传输的是对象;包含着Id和账户名;
                    session.setAttribute("adminByAccount", adminByAccount);

                    //登陆时保存日志:
                    UserLog userLog=new UserLog();
                    userLog.setAdminName(account);
                    userLog.setIp(req.getRemoteAddr());
                    userLog.setLogin_time(new Date());
                    userDao.saveLog(userLog);
                    //重定向到页面;
                    resp.sendRedirect(req.getContextPath()+"/success.jsp");
                } else {
                    session = req.getSession();
                    session.setAttribute("errorMsg", "账号or密码错误");
                    //将页面重定向到login.jsp;
                    resp.sendRedirect(req.getContextPath()+"/login.jsp");
                }
        }catch (Exception e){
            e.printStackTrace();
            //出现异常就重定向到404页面;
            resp.sendRedirect(req.getContextPath()+"/404.jsp");
        }
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小智RE0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值