侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

jsp中四种传递参数的方法

Java  /  管理员 发布于 7年前   197

今天老师讲了jsp中四种传递参数的方法,我觉得总结一下,挺好的,以备后用!

1、form表单

2、request.setAttribute();和request.getAttribute();

3、超链接:<a herf="index.jsp"?a=a&b=b&c=c>name</a>

4、<jsp:param>

下面一一举例说明:

1、form表单

form.jsp:

    <%@page contentType="text/html; charset=GB2312"%>     <html>       <head>         <title>           form.jsp file         </title>       </head>       <body style="background-color:lightblue">         <h2 style="font-family:arial;color:red;font-size:25px;text-align:center">登录页面</h2>         <form action="result.jsp" method="get" align="center">           姓名:<input type="text" name="name" size="20" value="" maxlength="20"><br/>           密码:<input type="password" name="password" size="20" value="" maxlength="20"><br/><!--在爱好前空一个空格,是为了排版好看些-->            爱好:<input type="checkbox" name="hobby" value="唱歌">唱歌  <input type="checkbox" name="hobby" value="足球">足球  <input type="checkbox" name="hobby" value="篮球">篮球<br/><br/>           <input type="submit" name="submit" value="登录">           <input type="reset" name="reset" value="重置"><br/>         </form>       </body>     </html> 

result.jsp:

    <%@page language="java" import="java.util.*" pageEncoding="GB2312"%>     <html>       <head>         <title>           result.jsp file         </title>       </head>       <body bgcolor="ffffff">         <%          request.setCharacterEncoding("GB2312");          String name=request.getParameter("name");          name=new String(name.getBytes("iso-8859-1"),"GB2312");          String pwd=request.getParameter("password");          String[] hobby=request.getParameterValues("hobby");//注意这里的函数是getParameterValues()接受一个数组的数据         %>         <%           if(!name.equals("") && !pwd.equals(""))           {         %> 您好!登录成功!<br/> 姓名:<%=name%><br/> 密码:<%=pwd%><br/> 爱好:<%      for(String ho: hobby)      {       ho=new String(ho.getBytes("iso-8859-1"),"GB2312");       out.print(ho+" ");      }     %>         <%           }           else           {         %>   请输入姓名或密码!         <%          }         %>       </body>     </html> 

注意:form表单的提交方式为get,在参数传递时会遇到中文乱码的问题,一个简单的解决方法是,将接受到的字符串先转换成一个byte数组,再用String构造一个新的编码格式的String,如:

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

2. name=new String(name.getBytes("iso-8859-1"),"GB2312"); 

如果form表单的提交方式为post,解决乱码问题的简单办法是,使用 request.setCharacterEncoding("GB2312");设置request的编码方式。

为什么会出现中文乱码问题呢?因为Tomcat服务器默认的系统编码方式为iso-8859-1,你传递参数给服务器时,使用的是默认的iso-8859-1的编码方式,但是服务器向你返回信息时,是按page指令中设置的编码方式,如:<%@page language="Java" import="java.util.*" pageEncoding="GB2312"%>,这样就混合了两种编码方式,所以会出现乱码,所以解决之道就是统一传递和接收的编码方式。

2、request.setAttribute()和request.getAttribute()

set.jsp:

    <%@page contentType="text/html; charset=GB2312"%>     <html>       <head>         <title>           set.jsp file         </title>       </head>       <body style="background-color:lightblue">         <%           request.setAttribute("name","心雨");         %>         <jsp:forward page="get.jsp"/>       </body>     </html> 

get.jsp:

    <%@page contentType="text/html; charset=GB2312"%>     <html>       <head>         <title>           get.jsp file         </title>       </head>       <body style="background-color:lightblue">         <%          out.println("传递过来的参数是:"+request.getAttribute("name"));         %>       </body>     </html> 

request.setAttribute()和request.getAttribute()是配合<jsp:forward>或是include指令来实现的。

3、超链接:<a herf="index.jsp?a=a&b=b&c=c">name</a>

href.jsp:

    <%@page contentType="text/html; charset=GB2312"%>     <html>       <head>         <title>           href.jsp file         </title>       </head>       <body style="background-color:lightblue">         <a href="https:/article/getHerf.jsp?name=心雨&password=123" rel="external nofollow" >传递参数</a>       </body>     </html> 

getHref.jsp:

    <%@page contentType="text/html; charset=GB2312"%>     <html>       <head>         <title>           getHref.jsp file         </title>       </head>       <body style="background-color:lightblue">         <%           String name=request.getParameter("name");           name=new String(name.getBytes("iso-8859-1"),"gb2312");           out.print("name:"+name);         %>         <br/>         <%           out.print("password:"+request.getParameter("password"));         %>       </body>     </html> 

这种传递参数的方法和form表单的get方式类似,是通过地址栏传递的参数,其乱码解决方法也和form 的get方式一样。

4、<jsp:param>

param.jsp:

    <%@page contentType="text/html; charset=GB2312"%>     <html>       <head>         <title>           param.jsp file         </title>       </head>       <body style="background-color:lightblue">         <%request.setCharacterEncoding("GB2312");%>         <jsp:forward page="getParam.jsp">           <jsp:param name="name" value="心雨"/>           <jsp:param name="password" value="123"/>         </jsp:forward>       </body>     </html> 

getParam.jsp:

    <%@page contentType="text/html; charset=GB2312"%>     <html>       <head>         <title>           getParam.jsp file         </title>       </head>       <body style="background-color:lightblue">         <%           String name=request.getParameter("name");           out.print("name:"+name);         %>         <br/>         <%           out.print("password:"+request.getParameter("password"));         %>       </body>     </html> 

这里发现了一个奇怪的问题,还是在中文乱码的问题上,在form表单的例子中,如果传递方式为post,则只需要在接收参数的页面设置request的编码方式就可以了,即request.setCharacterEncoding("GB2312");,注意是在接收参数的页面,如果将该句放到form表单里,那么不起作用,仍然是乱码。而在本例中,为了使传递的参数不出现乱码,却是将request.setCharacterEncoding("GB2312");放在发送参数的页面中,才会正常显示中文,放在接收参数的页面中,不起作用。也许这就是<jsp:param>和form表单传递参数不同的地方。为什么会有这个不同呢?可能是因为form表单中的参数是由客户端传送到服务端上的,需要经过一个request的打包过程,但是<jsp:param>传递的参数本身就是在服务器端的,不需要经历由客户端到服务端这么一个过程,但是服务器里的参数传递是这么回事呢?这个问题,我不知道了!真是知识是一个扩大的圆圈,你知道的越多,那么不知道的就越多!努力吧!

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!


  • 上一条:
    jsp 编程之@WebServlet详解
    下一条:
    浅谈jsp EL表达式取值过程、page和pagecontext的区别
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在java中实现的脱敏工具类代码示例分享(0个评论)
    • zookeeper安装流程步骤(0个评论)
    • 在java中你背的“八股文”可能已经过时了(2个评论)
    • 在php8.0+版本中使用属性来增加值代码示例(3个评论)
    • java 正则表达式基础,实例学习资料收集大全 原创(0个评论)
    • 近期文章
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-11
    • 2018-03
    • 2020-03
    • 2023-05
    • 2023-11
    • 2024-01
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客