You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MVC架构下:如何检测调用控制器Servlet的JSP页面?

检测调用通用Servlet的JSP页面的几种方法

这是MVC架构里很常见的需求,我整理了几个实用的方案,你可以根据具体场景选择:

  • 隐藏表单字段(最推荐)
    在每个JSP的表单里添加一个隐藏输入字段,明确标记当前页面的标识:

    <!-- userForm.jsp中的表单示例 -->
    <form action="CommonController" method="post">
        <input type="hidden" name="sourcePage" value="userForm.jsp">
        <!-- 其他业务表单字段 -->
        <button type="submit">提交请求</button>
    </form>
    

    然后在你的通用Servlet里,直接获取这个参数做判断:

    String sourcePage = request.getParameter("sourcePage");
    if ("userForm.jsp".equals(sourcePage)) {
        // 处理来自userForm.jsp的请求逻辑
    } else if ("productForm.jsp".equals(sourcePage)) {
        // 处理来自productForm.jsp的请求逻辑
    }
    

    优点:完全可控,不受浏览器设置或请求方式限制,可靠性最高,是生产环境最常用的方案。

  • URL请求参数(适合GET请求场景)
    如果是通过<a>标签跳转发起的GET请求,可以在URL里携带来源页面的参数:

    <!-- productList.jsp中的链接示例 -->
    <a href="CommonController?source=productList.jsp">点击处理商品列表请求</a>
    

    Servlet里同样通过request.getParameter("source")获取标识,逻辑和隐藏字段一致,适合无表单的跳转场景。

  • HTTP Referer请求头(仅作辅助手段)
    你可以通过请求头里的Referer字段获取来源URL,再从中解析出JSP页面名称:

    String referer = request.getHeader("Referer");
    if (referer != null) {
        // 从URL中截取最后一段作为页面标识
        String sourcePage = referer.substring(referer.lastIndexOf("/") + 1);
    }
    

    注意:这个方法可靠性较低——部分浏览器可能禁用Referer头,用户直接在地址栏输入Servlet地址时也不会有该字段,所以只能作为补充方案,不能单独依赖。

  • 会话属性(适合页面跳转场景)
    如果是通过request.getRequestDispatcher().forward()或<jsp:forward>跳转至Servlet,可以在跳转前的JSP里设置会话属性:

    <%-- cart.jsp中的跳转逻辑示例 --%>
    <% session.setAttribute("sourcePage", "cart.jsp"); %>
    <jsp:forward page="CommonController" />
    

    然后在Servlet中读取该属性,用完记得及时清除避免混淆:

    String sourcePage = (String) request.getSession().getAttribute("sourcePage");
    // 执行对应逻辑后清除属性
    request.getSession().removeAttribute("sourcePage");
    

    缺点:会话属性会在整个会话周期留存,必须手动清除,否则可能导致后续请求的判断错误,适合特定的跳转场景。

内容的提问来源于stack exchange,提问作者muskan singhal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:08:32