【问题标题】:put a parameter in the servlet url在 servlet url 中放一个参数
【发布时间】:2013-02-04 10:57:06
【问题描述】:

我有这样的代码和平:

<%
ArrayList<Utente> lista=null;
try{
    lista= (ArrayList<Utente>)request.getAttribute("lista");
}catch(Exception e){
    e.printStackTrace();
}
    if(lista!=null){                    
for(int i=0;i<lista.size();i++){                                                                                        out.print("<tr>");
                        out.print("<td>"+lista.get(i).getNome()+"</td>");
                        out.print("<td>"+lista.get(i).getCognome()+"</td>");
                        out.print("<td>"+lista.get(i).getPosizione()+"</td>");
                        out.print("<td>"+lista.get(i).getTelefono()+"</td>");
                        out.print("<td><img src='imm/view.png'>&nbsp"+
                                "<a href='' id='"+lista.get(i).getIdUtente()+"' class='view'>Vedi</a>&nbsp &nbsp" 
                                +"<img src='imm/mod.png'>&nbsp"+
                                "<a href='InfoUtente&id="+lista.get(i).getIdUtente()+"' id='"+lista.get(i).getIdUtente()+"' class='mod'>Modifica   </a>&nbsp &nbsp"+
                                 "<img src='imm/del.png'>&nbsp"+
                                "<a href='' id='"+lista.get(i).getIdUtente()+"' class='del' name='"+lista.get(i).getNome()+" "+lista.get(i).getCognome()+"'>Elimina   </a></td>");
                         }

                }
                        %>

我现在要做的是在单击某个索引上的链接 Modifica 时调用 servlet InfoUtente。所以我想将 index 参数传递给 servlet。 我该怎么办?

【问题讨论】:

    标签: java jsp servlets parameter-passing


    【解决方案1】:

    就像你做的那样,除了查询字符串必须以?而不是&amp;开头:

    <a href='InfoUtente?id="+lista.get(i).getIdUtente()
                       ^-- here
    

    &amp; 用于分隔查询字符串内的参数。它必须是 HTML 转义的。因此,如果您要传递第二个参数,则需要生成以下 URL:

    <a href='InfoUtente?id=" + theId + "&amp;foo=bar"
    

    请注意,从 Java 代码生成 HTML 不是一个好习惯。它会导致难以阅读、无法维护的代码。应该避免使用小脚本。您应该使用 JSTL 标记和 JSP EL:

    <c:forEach var="utente" items="${lista}">
        <tr>
            <td><c:out value="${utente.nome}"/></td>
            <td><c:out value="${utente.cognome}"/></td>
            <td><c:out value="${utente.posizione}"/></td>
            <td><c:out value="${utente.telefono}"/></td>
            <td>
               <img src="imm/view.png"/>&nbsp;
               <a href="" id="${utente.idUtente}" class="view">Vedi</a>
               &nbsp;&nbsp;
               <img src="imm/mod.png"/>&nbsp;
               <a href="<c:url value="InfoUtente">
                            <c:param name="id" value="${utente.idUtente}"/>
                        </c:url>" class="mod">Modifica</a>
               &nbsp;&nbsp;
               <img src="imm/del.png"/>&nbsp;
               <a href="" class="del" name="<c:out value="${utente.nome} ${utente.cognome}"/>">Elimina</a>
            </td>
        </tr>
    </c:forEach>
    

    请注意结构的可读性如何。还要注意

    • &amp;nbsp; 而不是&amp;nbsp
    • 您不能有多个具有相同 ID 的元素。这是无效的。
    • &lt;c:out&gt; 允许转义特殊字符。因此,例如,如果任何属性包含 &lt;&gt;&amp;,它不会导致 HTML 无效(或更糟:导致 XSS 攻击)
    • 使用&lt;c:url&gt; 允许使用绝对路径而不是相对路径,而无需对上下文路径进行硬编码,并对参数进行URL 编码。

    【讨论】:

    • 谢谢!!!!现在它可以工作了。我不明白您的评论“请注意,从 servlet 生成 HTML 不是一个好习惯。它会导致难以阅读、无法维护的代码。您应该使用 JSP 来做到这一点。”我不明白您的意思。我正在使用 JSP..
    • 那么不要将所有这些都包含在脚本中。应该不惜一切代价避免使用 Scriptlet。我将编辑我的答案,向您展示应该如何生成它。
    【解决方案2】:

    编写一个java脚本函数并调用该函数onClick(或onSubmit等)的特定字段更改。在该函数内部构建一个类似“page.html?param=value”的字符串。并将页面重定向到那里。

    【讨论】:

    • 你已经放置了 。所以我猜这是一个jsp页面。 servlet 始终在服务器中运行。但是您显示的页面(视图)在客户端浏览器中运行。从那里没有办法调用servlet。您可以向服务器发送请求,Web 容器将分派它并将其发送到特定的 servlet。
    【解决方案3】:

    我建议您使用 jsp 执行此操作,如下所示,关于您提到的问题,您必须提出?开始查询字符串而不是 &

    检查下面的代码

    <%
    ArrayList<Utente> lista=null;
    try{
    lista= (ArrayList<Utente>)request.getAttribute("lista");
    }catch(Exception e){
    e.printStackTrace();
    }
    if(lista!=null){                    
    for(Utente utente : lista){%>                                                                                               
    <tr>
        <td><%=utente.getName()%></td>
        <td><%=utente.getCognome()%></td>
        <td><%=utente.getPosizione()%></td>
        <td><%=utente.getTelefono()%></td>
        <td>
              <img src='imm/view.png'>&nbsp
              <a href='' id='<%=utente.getIdUtente()%>' class='view'>Vedi</a>&nbsp &nbsp
               <img src='imm/mod.png'>&nbsp</a>
               <a href='InfoUtente?id=<%=utente.getIdUtente()%>' id='<%=utente.getIdUtente()%>' class='mod'>Modifica </a>&nbsp &nbsp
            <img src='imm/del.png'>&nbsp</a>  <!-- Here you have to put ? instead of & -->
             <a href='' id='<%=utente.getIdUtente()%>' class='del' name='<%=utente.getName()%>'>Elimina</a></td>
    </tr>
    <%}
    }%>
    

    【讨论】:

      猜你喜欢
      • 2017-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多