在jsp文件中添加参数

Posted

技术标签:

【中文标题】在jsp文件中添加参数【英文标题】:Adding parameters in jsp file 【发布时间】:2012-04-25 19:56:03 【问题描述】:

有没有办法在 servlet 或 jsp 中添加参数?因为据我搜索,参数只能在表单中设置。 为什么java中没有手动添加参数的命令? 我的另一个疑问是,当从一个 jsp 页面转发到另一个页面时,输入请求(带有参数、属性等)是否被转发到下一个 jsp 页面? 如果我不想转发某些参数或属性怎么办?

【问题讨论】:

您可以使用 Wrappers 来执行此操作 - 看看 ***.com/questions/1413129/… 【参考方案1】:

有没有办法在 servlet 或 jsp 中添加参数?

-- 将其附加到 URL。如果您正在考虑一些假设的功能,例如request.setParameter,那么没有提供这样的方法。你不认为那会是安全漏洞吗?

【讨论】:

好的.. 但是 user1310285 已经回答说可以做到。他使用过 是的,你可以传递参数....但是你不能在jsp里面给同一个请求添加参数......【参考方案2】:

可以使用<jsp: param>传递请求参数

这个标签包含两个属性:

    姓名 值。

例如:

<jsp: param name="myParam" value="Amar Patel"/>

此标记用作&lt;jsp:forward&gt;&lt;jsp:include&gt; 块内的嵌套标记。

例如:

<jsp: forward page="ssParameters.jsp">
  <jsp: param name="myParam" value="Amar Patel"/>
  <jsp: param name="Age" value="15"/>
</jsp: forward>

【讨论】:

@user1310825 : 这会添加新参数吗? @Ashwin 是的,它将添加新参数,这些参数在转发或包含的页面中可见。在目标页面上,您可以调用 request.getParameter("myParam") 之类的内容来获取附加参数。【参考方案3】:

有没有办法在servlet或jsp中添加参数?

是的。如果可以使用RequestDispatcher.forward(ServletRequest, ServletResponse)RequestDispatcher.include(ServletRequest, ServletResponse),您可以使用HttpServletRequestWrapper 添加或过滤请求参数

// assuming this code is part of a Servlet or JSP
HttpServletRequest request = ...;
final Map<String,String> additionalParameters = ...;

RequestDispatcher dispatcher = this.getServletConfig().getServletContext().getRequestDispatcher("/");

dispatcher.forward(new HttpServletRequestWrapper(request)

    public String getRequestParameter(String parameterName) 
        if (additionalParameters.contains(parameterName)) 
           return additionalParameters.get(parameterName);
         else 
           if (!"filteredParameter".equals(parameterName)) 
              return super.getParameterMap().get(parameterName());
            else 
              return null;
            
        
    

, response);

如果您只想将额外的“参数”传递给转发/包含的页面/servlet 建议使用ServletRequest.setAttribute(String, Object)。 ServletRequest 属性可以在处理请求期间添加/删除,并允许在使用请求参数时添加完整的 java 对象而不是字符串。

为什么java中没有手动添加参数的命令?

ServletRequest 请求参数通常应该被视为不可修改,因为它是从客户端发送到服务器的请求的 Warpper。如果要添加参数,请使用请求属性。

我的另一个疑问是,当从一个 jsp 页面转发到 其他,是输入请求(带有参数,属性等) 转发到下一个jsp页面?

大多数时候原始HttpServletRequest 被传递到转发的页面/servlet。但正如我的片段所示,也可以将不同的 ServletRequest 传递给转发/包含的 servlet/jsp。

如果我不想转发某些参数或属性怎么办?

参见上面的代码 sn-p。您可以使用自己的HttpServletRequestWrapper过滤转发的参数或属性

【讨论】:

【参考方案4】:

您可以通过在您的网址中使用它来传递您的参数。关于您对请求的问题。如果您转发到另一个 jsp/servlet,您的所有参数和属性都将在请求中。如果您不想在那里看到它,那么您应该改用重定向 (response.sendRedirect(url))

【讨论】:

您可以使用HttpServletRequestWrapper 来添加或删除请求参数。如果目标在同一个 WebContext 中,您总是可以使用request.setAttribute(String, Object)为目标添加额外的“参数”。如果您使用 Http 重定向 (HTTP 302),则必须从原始请求中复制表单参数。此外,您还必须记住,InternetExplorer 默认的 URL 长度限制约为 2058 个字符。

以上是关于在jsp文件中添加参数的主要内容,如果未能解决你的问题,请参考以下文章

JSP(Java Server Pages)内置对象

swfupload上传文件时出现302错误,请教解决办法(jsp)。非常感谢!

idea中运行jsp文件没有生成jsp脚本

使用 <jsp:include> 标记将参数传递给另一个 JSP 文件

intellij idea中,右键新建文件中添加jsp格式的文件

jsp文件中出现的错误