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

  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 字符串变量 = request.getParameter(“客户端提供参数的name属性名”);

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

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

二、form表单传参

==========

表单界面代码:

姓名:

电话:

表单界面效果:

接收界面代码:

<%

String name = request.getParameter(“name”);

String tel = request.getParameter(“tel”);

%>

获取到的信息是:

姓名:<%=name %>

电话:<%=tel %>

接收界面效果:

中文乱码解决


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

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

request.setCharacterEncoding(“utf-8”);

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

现在再来看一下:

<%

request.setCharacterEncoding(“utf-8”);

String name = request.getParameter(“name”);

String tel = request.getParameter(“tel”);

%>

获取到的信息是:

姓名:<%=name %>

电话:<%=tel %>

效果如下:

3、在传递过来的中文参数中存在乱码问题,原因是中文参数采用了页面原有的“ISO-8859-1”编码,因此我们可能需要将传递过来的参数的编码格式修改为“UTF-8”格式,格式转换的代码如下:

String name = new String(request.getParameter(“name”).getBytes(“ISO-8859-1”),“UTF-8”);

三、网址或超链接传参

==========

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

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

传值界面代码:

点击传值

传值界面效果如下:

接收界面代码:

<%

String name = request.getParameter(“name”);

String tel = request.getParameter(“tel”);

%>

获取到的信息是:

姓名:<%=name %>

电话:<%=tel %>

接收界面效果:

中文错误解决


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

点击传值

点击传值出现如下界面:

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

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

提交界面代码如下:

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

接收界面代码不变:

效果如下:

四、JSP子动作传参

==========

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

具体的使用方法如下:

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

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

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
Lh-1715485091623)]

[外链图片转存中…(img-GjhwA9UD-1715485091623)]

[外链图片转存中…(img-LLyClbce-1715485091624)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值