关于路径<%=request.getContextPath()%>和${pageContext.request.contextPath}的问题

项目出现了很奇怪的问题,在引入css文件时,发现:




1、${pageContext.request.contextPath}

 <link href="${pageContext.request.contextPath}/resource/css/bootstrap.css" rel="stylesheet">
 <link href="${pageContext.request.contextPath}/resource/css/bootstrap-theme.css" rel="stylesheet">
 <link href="${pageContext.request.contextPath}/resource/css/login.css" rel="stylesheet">

会导致页面无法引入文件。下图是html源码显示

2、改用<%=request.getContextPath()%>后,就可以正常引入了

 <link href="<%=request.getContextPath()%>/resource/css/bootstrap.css" rel="stylesheet">
 <link href="<%=request.getContextPath()%>/resource/css/bootstrap-theme.css" rel="stylesheet">
 <link href="<%=request.getContextPath()%>/resource/css/login.css" rel="stylesheet">

下图是html源码显示

对比2者发现完全没有区别,目前也没有发现原因是什么。


------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

${pageContext.request.contextPath}是el表达式版

<%=request.getContextPath()%>是javascript版

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

${pageContext.request.contextPath}, <%=request.getContextPath()%><br/> 获取到具体值到底是什么,他没有获取我想要的http://localName.com:port/项目名称(上下文)吗??通过实验我发现,只是简单做个测试,代码不规范:

  

?
1
2
"request.getContextPath()的值是   "<%=request.getContextPath()%>< br />
"pageContext.request.contextPath的值是"${pageContext.request.contextPath}< br />

  

通过运行我们发现了<%=request.getContextPath()%>和${pageContext.request.contextPath}获取的结果都是项目名(上下文),而不是我们想要的那个结果,可是如果我们想要获取项目的绝对路径和端口号我们有什么办法呢

  

<%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

通过运行结果可知<%=basePath%>可知结果是

  

 我们获取了我们想要的结果又完整的路径和端口号还有项目的上下文环境。推荐把项目中的${pageContext.request.contextPath}都替换成了<%=basePath%>。

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Java Web应用中,通常会使用Servlet来处理HTTP请求和响应,这里的`bookServlet`也是一个自定义的Servlet。以下是一个简单的`bookServlet`的源码编写示例: ```java import java.io.IOException; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class BookServlet extends HttpServlet { private BookDao bookDao; @Override public void init() throws ServletException { super.init(); bookDao = new BookDao(); } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String action = request.getParameter("action"); if ("addUI".equals(action)) { request.getRequestDispatcher("/bookAdd.jsp").forward(request, response); } else if ("list".equals(action)) { List<Book> bookList = bookDao.findAll(); request.setAttribute("bookList", bookList); request.getRequestDispatcher("/bookList.jsp").forward(request, response); } else { response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Invalid action"); } } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String action = request.getParameter("action"); if ("add".equals(action)) { String title = request.getParameter("title"); String author = request.getParameter("author"); int price = Integer.parseInt(request.getParameter("price")); Book book = new Book(title, author, price); bookDao.save(book); response.sendRedirect(request.getContextPath() + "/bookServlet?action=list"); } else { response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Invalid action"); } } } ``` 这个`bookServlet`处理了两个请求,分别是添加图书和图书列表,根据不同的请求参数做出不同的响应。其中,`BookDao`是一个简单的数据访问对象,用于访问数据库中的图书表。这个`bookServlet`使用了JSP模板来展示数据,并且在添加图书后重定向到图书列表页面。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值