ChatGPT解决这个技术问题 Extra ChatGPT

如何使用 JSP 从 URL 中获取参数

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

例如,我有一个 URL www.somesite.com/Transaction_List.jsp?accountID=5
我想获得 5。

是否有一个 request.getAttribute("accountID") 像会话或类似的东西?


P
Pascal Thivent

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

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

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

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

${param.accountID}

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

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

您需要做些什么来启用 EL 吗?我正在使用 jboss6,当我使用 ${param.accountID} 时,它被视为来自浏览器的常规文本。
@simgineer 首先,文件必须是 JSP,而不仅仅是纯 HTML。阅读以下主题:Expression language, don't show variable valueEL expressions are not evaluated in JBoss AS 4.2.2Expression Language in JSP not working
S
Sajad Bahmani

在 GET 请求中,请求参数取自查询字符串(URL 上问号后面的数据)。例如,URL http://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>!

此示例在 scriptlet 中使用查询参数的值:

<%
    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 了解替代方案。
T
Taylor Leese

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

${param.accountID}


这是否处理 URL 解码?
@vikingsteve 是的
但它不处理作为 HTML/XML 实体的重新编码,这对于 XSS 预防是必要的。使用 JSTL <c:out value="${param.accountID}" /> 来做到这一点。
L
Léa Massiot

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

<c:out value="${param.accountID}"></c:out>

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

相反,这有效:

<c:out value="${param['accountID']}"></c:out>


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

request.getParameter("accountID") 是您要查找的内容。这是 Java Servlet API 的一部分。有关详细信息,请参阅 http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/servlet/ServletRequest.html


j
johannes
String accountID = request.getParameter("accountID");

A
Ainz Ooal Gown

您想删除带有 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);
}

r
rdj7

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

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

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

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

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

希望这会有所帮助。


n
null

page 1 : Detail page 2 : <% String id = request.getParameter("userid");%> // 现在可以使用 id 进行 hsql 详细产品的 sql 查询