JSP中四种传递参数的方法

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

1、form表单

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

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

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

             <!--在爱好前空一个空格,是为了排版好看些-->  

            &nbsp;爱好:<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:

 1 <%@page language="java" import="java.util.*" pageEncoding="GB2312"%>
 2 <html>
 3     <head>
 4         <title>
 5             result.jsp file
 6         </title>
 7     </head>
 8
 9     <body bgcolor="ffffff">
10         <%
11           request.setCharacterEncoding("GB2312");
12
13           String name=request.getParameter("name");
14           name=new String(name.getBytes("iso-8859-1"),"GB2312");
15
16           String pwd=request.getParameter("password");
17           String[] hobby=request.getParameterValues("hobby");//注意这里的函数是getParameterValues()接受一个数组的数据
18
19         %>
20
21         <%
22             if(!name.equals("") && !pwd.equals(""))
23             {
24         %>
25
26                 您好!登录成功!<br/>
27                 姓名:<%=name%><br/>
28                 密码:<%=pwd%><br/>
29                 爱好:<%
30                          for(String ho: hobby)
31                          {
32                             ho=new String(ho.getBytes("iso-8859-1"),"GB2312");
33                             out.print(ho+" ");
34                          }
35                        %>
36         <%
37             }
38             else
39             {
40         %>
41                     请输入姓名或密码!
42         <%
43             }
44         %>
45     </body>
46 </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="getHerf.jsp?name=心雨&password=123">传递参数</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>传递的参数本身就是在服务器端的,不需要经历由客户 端到服务端这么一个过程,但是服务器里的参数传递是这么回事呢?这个问题,我不知道了!真是知识是一个扩大的圆圈,你知道的越多,那么不知道的就越多!努 力吧!

时间: 2024-09-30 15:46:11

JSP中四种传递参数的方法的相关文章

jsp中四种范围的使用

///////////////////////////jsp中四种范围中的值的获取////////////////////////////////在pageContext,request,session,application四种范围中设置setAttribute()时:1.pageContext:pageContext.setAttribute(),只能在其本页面中取得值,pageContext.getAttribute() 2.request:request.setAttribute(),在

Java中四种遍历List的方法

1 package com.ietree.basic.collection.loop; 2 3 import java.util.ArrayList; 4 import java.util.Iterator; 5 import java.util.List; 6 7 /** 8 * List遍历 9 * 10 * @author Dylan 11 */ 12 public class ListLoop { 13 14 public static void main(String[] args)

JSP中四种属性保存范围(2)

1.session 1 <%@ page language="java" contentType="text/html" pageEncoding="UTF-8"%> 2 <!DOCTYPE html> 3 <html> 4 <head> 5 <title>Insert title here</title> 6 </head> 7 <body> 8 &

android在代码中四种设置控件背景颜色的方法(包括RGB)

转载请注明出处: http://blog.csdn.net/fth826595345/article/details/9208771  TextView tText=(TextView) findViewById(R.id.textv_name); //第1种: tText.setTextColor(android.graphics.Color.RED);//系统自带的颜色类 // 第2种: tText.setTextColor(0xffff00ff);//0xffff00ff是int类型的数据

android传递参数的方法

Android由众多Activity组成,每个Activity对应不同的功能和UI,但是每个Activity都是一个单独的类,所以需要传递参数.一般来讲,Android中传递参数是在不同的Activity中.大致上有5类方案: 1 静态 static 定义方法: 1 public class MainActivity extends TabActivity { 2 public static DatabaseHelper mHelper; 3 public static SQLiteDataba

四种会话跟踪技术,JSP的四种范围

这两个问题在网上搜答案是一样的,但是我的宝典里标明这是两个问题,有不同的答案,所以在这里注释一下. 四种会话跟踪技术 cookie,url重写,session,隐藏域 Cookie:服务器在一个应答首部传递给浏览器的名称/值对.浏览器保存的时间由cookie的过期时间属性来指定.当浏览器向某个服务器发送一个请求时,它会检查其保存的cookie,并在请求首部中包含从同一台服务器上接收到的所有cookie. 首次都是通过URL传递的,即在URL后跟一个ID标识.然后会判断客户端是否接受cookie,

ASP.NET 页面间传递参数的方法

这个新特性意味着ASP.NET2.0开发人员目前有三种可供选择的技术来将数据从一个web页面传送到另外一个页面.这三种方法是:响应重定向,服务端传输和新的跨网页提交特性.我们可以已经熟悉前两种技术了,因此,我们只是简要地复习一下它们,然后我们会将主要精力放到学习如何使用跨网页提交特性,以及阐述一下这种方法和响应重定向以及服务传输方式有什么不同. 一.响应重定向方法 响应重定向方法是目前为止将一个网页重定向到另一个网页的最简单的方法的最简单的方法.当Web服务器接到一个重定向请求后,它会将一个响应

ASP.NET 页面间传递参数的方法(转)

ASP.NET 页面间传递参数的方法 http://www.cnblogs.com/eoiioe/archive/2008/04/08/1142247.html 这个新特性意味着ASP.NET2.0开发人员目前有三种可供选择的技术来将数据从一个web页面传送到另外一个页面.这三种方法是:响应重定向,服务端传输和新的跨网页提交特性.我们可以已经熟悉前两种技术了,因此,我们只是简要地复习一下它们,然后我们会将主要精力放到学习如何使用跨网页提交特性,以及阐述一下这种方法和响应重定向以及服务传输方式有什

Linux中四种进程或线程同步互斥控制方法

原文地址:http://blog.itpub.net/10697500/viewspace-612045/ 一.Linux中 四种进程或线程同步互斥的控制方法: 1.临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问. 2.互斥量:为协调共同对一个共享资源的单独访问而设计的. 3.信号量:为控制一个具有有限数量用户资源而设计. 4.事 件:用来通知线程有一些事件已发生,从而启动后继任务的开始. 二.临界区(Critical Section) 保证在某一时刻只有一个线程