6.5.3 <jsp:param>标签

优质
小牛编辑
127浏览
2023-12-01

当使用<jsp:include>和<jsp:forward>标签引入或转发的Web资源需要请求参数时,可以通过<jsp:param>标签进行传递。<jsp:param>标签的语法格式如下:

<jsp:param name="parameterName" value="parameterValue | <%= expression %> | EL"/>

下面的代码通过<jsp:param>标签向<jsp:include>标签引用的included.jsp标签传递一个name请求参数:

<%@ page language="java" pageEncoding="UTF-8"%>
<jsp:include page="included.jsp">
    <jsp:param name="name" value="bill" />
</jsp:include>

可以在included.jsp页面中使用${param.name}来获得name请求参数的值。

需要注意的是,如果使用<jsp:param>标签传递中文请求参数时,在默认情况下,将会输出“??”。如下面的代码所示:

<%@ page language="java" pageEncoding="UTF-8"%>

<jsp:include page="included.jsp">

    <jsp:param name="name" value="比尔" />

</jsp:include>

发生这种情况的原因也很简单,就是<jsp:param>标签在被翻译成的Java代码中的参数名和参数值时按着URL的编码格式进行编码了,所使用的字符集编码是通过request.getCharacterEncoding方法获得的,在默认情况下,通过该方法获得的字符集编码是ISO-8859-1,该字符集编码不支持中文字符,因此会输出“?”。

如果要解决这个问题,可以使用setCharacterEncoding方法将字符集编码设成UTF-8。如下面的代码所示:

<%@ page language="java" pageEncoding="UTF-8"%>
<%
    request.setCharacterEncoding("UTF-8");
%>

<jsp:include page="included.jsp">
    <jsp:param name="name" value="比尔" />
</jsp:include>

<jsp:param>标签在<jsp:forward>标签中的使用方法和<jsp:include>标签完全一样。