JSP“三大请求传参方式”及“中文乱码问题解决方案”详解

在Web应用程序中,经常需要完成客户端与服务器之间的信息交互,这就需要页面之间的参数传递,这篇文章将会和大家分享JSP常用的三种传参方式及中文乱码的解决方案

请求参数的传递方法

javaweb中进行值传递的方法常用的有三种,分别是:

  1. 使用JSP的forward或include动作,利用传参数子动作实现参数的传递,‘
  2. 在JSP或HTML页面中,利用表单传递参数,
  3. 利用追加在网址后的参数传递或追加在超链接后的参数传递

需注意的是:在上述的三种传参方式中,方式1和方式3属于get类型的参数提交方式,而方式2属于get或post方式的参数提交方式,它可以通过form的method属性进行参数的选择

get请求与post请求的不同之处是前者参数会显示在地址栏。

get请求:

post请求:

一、访问请求参数的方法

同时,request对象的getParameter()方法可以接收不同的来自于JSP页面或JSP动作传递给request对象的参数信息。该方法的使用格式如下:

String value = request.getParameter("name");

其中需要注意的是:参数name与客户端提供参数的name属性名应该相同,同时request对象的getParameter()方法返回的是string类型的参数,如果参数name的值不存在,则会返回空值null

接下来分别对这三种传参方式进行介绍:

二、form表单传参

前端

<body>
    <form action="myjsp.jsp" method="post">
     姓名:<input type="text" name="name"><br>
     电话:<input type="text" name="tel"><br>
     <input type="submit" value="提交">
     </form>
</body>

表单界面效果:

接收界面(处理请求的JSP)代码:

 <body>
<%
String name = request.getParameter("name");
    String tel = request.getParameter("tel");
     %>
     <font facr="楷体" size=5>
     获取到的信息是:<br>
     姓名:<%=name %>
     电话:<%=tel %>
     </font>
</body>

接收界面效果:

中文乱码解决

如上我们可以看出,在我们传递了中文“张三”之后,在接收页面出现了乱码问题,解决办法如下:

1、在接收界面的代码中,在获取参数值之前增加如下代码:

request.setCharacterEncoding("utf-8");

2、在提交表单的action后的method属性需设置为“post”:

 <body>
    <%
    request.setCharacterEncoding("utf-8");
    String name = request.getParameter("name");
    String tel = request.getParameter("tel");
     %>
     <font facr="楷体" size=5>
     获取到的信息是:<br>
     姓名:<%=name %>
     电话:<%=tel %>
     </font>
  </body>

效果如下:

三、网址或超链接传参

利用网址或超链接传参的格式如下:

<a href=”超链接或网址?参数名1=参数值1&参数名2=参数值2....”>点击跳转</a>

传值界面代码:

 <body>
   <a href="myjsp.jsp?name=zhangsan&tel=123456">点击传值</a>
 </body>

传值界面效果如下:

接收界面代码:

 <body>
<%
    String name = request.getParameter("name");
    String tel = request.getParameter("tel");
     %>
     <font facr="楷体" size=5>
     获取到的信息是:<br>
     姓名:<%=name %>
     电话:<%=tel %>
     </font>
  </body>

接收界面效果:

中文错误解决

但是当我们将传递的name值改为中文“张三”后,

<body>
   <a href="myjsp.jsp?name=张三&tel=123456">点击传值</a>
  </body>

点击传值出现如下界面:

原因是因为在超链接或网址传参中,参数属于网址的一部分,同时这一部分是属于URL编码的,不支持中文的utf-8,因此在传递中文时会显示网址错误,解决办法是将我们要传递的中文转成URL编码即可:

java.net.URLEncoder.encode("中文","utf-8")将中文转换成URL编码

提交界面代码如下:

<body>
   <a href="myjsp.jsp?name=<%=java.net.URLEncoder.encode("张三","utf-8") %>&tel=123456">点击传值</a>
  </body>

接收界面代码不变:

效果如下:

四、JSP子动作传参

使用JSP的forward或include动作,利用传参数子动作实现参数的传递的方式,较其他两种方式有所不同,在该方式中用户可以根据需要在request对象中添加属性,然后在另一个JSP程序中获取到添加的数据,

具体的使用方法如下:

在传值页面使用request对象的setAttribute(“name”,obj)方法,可以把数据设定在request范围内,设置数据的方法格式为:

void request.setAttribute(“key”,object);

其中key为键,string类型,是要保存的数值的属性名。Object是要保存的参数值,属于object类型,

使用上面的方法在传值页面进行请求转发之后,在接收页面使用getAttribute(“name”)方法就可以获取到name属性下的值,获取数据的方法格式如下:

Object request.getAttribute(string name);

其中的参数name表示键名,与setAttribute(“name”,obj)方法中的name相对应,获取的参数类型由obj的类型决定。

参数传递界面代码:

 <body>
  <%
  request.setAttribute("name", "李四");
  request.setAttribute("age", 18);
   %>
   <jsp:forward page="myjsp.jsp"></jsp:forward>
  </body>

在使用该方式传参时,页面会自动跳转到指定页面。

获取参数页面代码:

<body>
    <%
    String name = (String)request.getAttribute("name");
    int age = (int)request.getAttribute("age");
     %>
     <font facr="楷体" size=5>
     获取到的信息是:<br>
     姓名:<%=name %>
     年龄:<%=age %>
     </font>
 </body>

效果如下:

使用该方式进行参数的传递时可以直接传递中文,并没有出现中文乱码的情况,

中文乱码解决

但是要在页面的最前端将整个页面的编码设置为“UTF-8”的编码格式,

好了,关于JSP页面常用的三种传参方式以及中文乱码的解决方案,就和大家分享到这里,小伙伴们在实际操作过程中遇到新的问题也可以一起讨论学习。之后也会在这里继续更新其他可能出现的问题的解决方案。


原文:https://blog.csdn.net/weixin_44985880/article/details/108995452
作者: 灰小猿