【问题标题】:How to get parameters from the URL with JSP如何使用 JSP 从 URL 中获取参数
【发布时间】:2010-12-25 19:34:02
【问题描述】:

在 JSP 中如何从 URL 中获取参数?

例如我有一个网址www.somesite.com/Transaction_List.jsp?accountID=5
我想得到 5。

是否有类似会话或类似内容的 request.getAttribute("accountID")?

【问题讨论】:

    标签: java jsp url get-method


    【解决方案1】:

    关于Unified Expression LanguageImplicit ObjectsJava EE 5 Tutorial 写道:

    隐式对象

    JSP 表达式语言定义了一组隐式对象:

    • pageContext:JSP 页面的上下文。提供对各种对象的访问,包括:
      • servletContext:JSP 页面的 servlet 和同一应用程序中包含的任何 Web 组件的上下文。请参阅访问 Web 上下文。
      • session:客户端的会话对象。请参阅维护客户端状态。
      • request:触发JSP页面执行的请求。见Getting Information from Requests
      • response:JSP 页面返回的响应。请参阅构建响应。
    • 此外,还提供了几个隐式对象,可以轻松访问以下对象:
      • param:将请求参数名称映射到单个值
      • paramValues:将请求参数名称映射到值数组
      • header:将请求头名称映射到单个值
      • headerValues:将请求头名称映射到值数组
      • cookie:将 cookie 名称映射到单个 cookie
      • initParam:将上下文初始化参数名称映射到单个值
    • 最后,有些对象允许访问使用范围对象中描述的各种范围变量。
      • pageScope:将页面范围的变量名称映射到它们的值
      • requestScope:将请求范围的变量名称映射到它们的值
      • sessionScope:将会话范围的变量名称映射到它们的值
      • applicationScope:将应用程序范围的变量名称映射到它们的值

    有趣的部分以粗体显示:)

    所以,要回答您的问题,您应该能够像这样访问它(使用 EL):

    ${param.accountID}
    

    或者,使用JSP Scriptlets(不推荐):

    <%
        String accountId = request.getParameter("accountID");
    %>
    

    【讨论】:

    【解决方案2】:

    在 GET 请求中,请求参数取自查询字符串(URL 上问号后面的数据)。例如,URLhttp://hostname.com?p1=v1&p2=v2包含两个请求参数——p1和p2。在 POST 请求中,请求参数来自查询字符串和在请求正文中编码的发布数据。

    此示例演示如何在生成的输出中包含请求参数的值:

    Hello <b><%= request.getParameter("name") %></b>!
    

    如果页面是通过 URL 访问的:

    http://hostname.com/mywebapp/mypage.jsp?name=John+Smith
    

    结果输出将是:

    Hello <b>John Smith</b>!
    

    如果查询字符串中未指定名称,则输出为:

    Hello <b>null</b>!
    

    此示例使用脚本中查询参数的值:

    <%
        if (request.getParameter("name") == null) {
            out.println("Please enter your name.");
        } else {
            out.println("Hello <b>"+request. getParameter("name")+"</b>!");
        }
    %>
    

    【讨论】:

    • Scriptlet 被认为是不好的做法。
    • 不要忘记 xmlEncode.. 这目前容易受到反射 xss 的影响
    • -1 表示 XSS 漏洞。如果我可以投票两次,当可以使用 EL 完成工作时,使用 scriptlet 也将是 -1。说真的,不要这样做
    • 在存在更好的解决方案时建议使用 scriptlet 会损害代码质量。
    • 关于“Scriptlet 被认为是不好的做法。”,请参阅 this answer in another question 了解替代方案。
    【解决方案3】:

    使用 EL(JSP 表达式语言):

    ${param.accountID}

    【讨论】:

    • 这是否处理 URL 解码?
    • @vikingsteve 是的
    • 但它不处理重新编码为 HTML/XML 实体,这对于 XSS 预防是必要的。使用 JSTL &lt;c:out value="${param.accountID}" /&gt; 来做到这一点。
    【解决方案4】:

    如果我可以在这里添加评论...

    &lt;c:out value="${param.accountID}"&gt;&lt;/c:out&gt;

    对我不起作用(它打印一个 0)。

    相反,这是可行的:

    &lt;c:out value="${param['accountID']}"&gt;&lt;/c:out&gt;

    【讨论】:

    • 值得注意的是:param 包含的值不仅仅是 URL 查询参数(例如模型映射中的值)。如果您需要特别检查值是否在 URL 查询参数中(并且,例如将作为表单提交的一部分提交),您可以查看 ${pageContext.request.queryString} - 但它没有分解为像 params 这样的好地图。
    【解决方案5】:

    request.getParameter("accountID") 是您正在寻找的。这是 Java Servlet API 的一部分。请参阅http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/servlet/ServletRequest.html 了解更多信息。

    【讨论】:

      【解决方案6】:
      String accountID = request.getParameter("accountID");
      

      【讨论】:

        【解决方案7】:

        您想删除带有 subject_id 的主题记录的示例

        @RequestMapping(value="subject_setup/delete/{subjectid}",method = RequestMethod.GET)
        public ModelAndView delete(@PathVariable int subjectid) {
            subjectsDao.delete(subjectid);
            return new ModelAndView("redirect:/subject_setup");
        }
        

        该参数将用于您的查询输入

        public int delete(int subjectid) {
            String sql = "update tbl_subject set isdeleted= '1' where id = "+subjectid+"";
            return template.update(sql);
        }
        

        【讨论】:

          【解决方案8】:

          www.somesite.com/Transaction_List.jsp?accountID=5

          对于这个URL,在java中有一个方法调用request.getParameter,如果你想在这里将一个数字转换为int,类似地将字符串值转换为string。因此,根据您的要求,只需在页面中复制以下行,

          int  accountId =(int)request.getParameter("accountID");
          

          您现在可以在整个页面中使用accountId 调用此值。

          这里accountId 是参数的名称,您也可以使用它获取多个参数,但这不起作用。如果您点击POST 请求,它将仅适用于GET 方法,那么它们将是一个错误。

          希望这有帮助。

          【讨论】:

            【解决方案9】:

            第 1 页: 细节 第2页 : // 现在您可以使用 id 进行 hsql 详细产品的 sql 查询

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2012-09-02
              • 2016-11-06
              • 2012-06-01
              • 2018-09-02
              • 2021-09-03
              • 2020-10-07
              • 2020-01-31
              相关资源
              最近更新 更多