写点什么

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

作者:Java高工P7
  • 2021 年 11 月 11 日
  • 本文字数:1864 字

    阅读完需:约 6 分钟

**需注意的是:**在上述的三种传参方式中,方式 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 表单传参


==========


表单界面代码:


<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>


表单界面效果:



接收界面代码:


<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>


效果如下:



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


【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


代码如下:**


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


三、网址或超链接传参


==========


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


<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 的类型决定。


参数传递界面代码:

用户头像

Java高工P7

关注

还未添加个人签名 2021.11.08 加入

还未添加个人简介

评论

发布
暂无评论
JSP“三大请求传参方式”及“中文乱码问题解决方案”详解