大可制作:QQ群:31564239(asp|jsp|php|mysql)

JSP/Servlet: 关于表单(Form)

HTTP协定基本的两个请求方式为GETPOST,GET请求方式为直接在请求的网址上发送请求的相关信息,例如:
 GET /login.jsp?user=justin

GET请求方式由于是直接在网址上发送请求的相关信息,所以会在网址列上出现相关的请求信息,例如:
http://localhost:8080/myjsp/login.jsp?user=justin

使用GET来发送请求会曝露一些请求的相关信息,使用GET的时机之一是用在可bookmark的网址信息上,然而对于大量的信息传送而言,会在网址列上出现一长串内容,而且GET请求有最长数据长度 255个字节的限制,所以对于需要保密的信息而言,例如使用者登入,或是对于大量信息传送而言,例如留言讯息,通常会采用POST来发送请求,POST请求主要是在HTTP协议之后,将数据附加在请求的后端,有些类似SMTP的邮件发送,例如:

 POST /upload.jsp
 
一些表头

POST数据本体 



在设计表单的时候,可以指定发送请求的方式为GET或POST,表单的标签设定一开始是这样的:
<form name="info" method="GET" action="somepage.jsp">
    <!-- 表单控制项 -->
    <input type="控制项类型">
 
</form>
 

其中method用来指定发送请求的方式为GET或POST,而action用来指定请求的目标,请求的目标可以是JSP、ASP、PHP、CGI程序等等,表单控制项将在以下介绍几个常用的。

首先是送出按钮submit与重清按钮reset,要将表单的内容发送出去,至少一定要使用submit按钮,按钮的value值可以设定按钮上的文字,例如:
<form name="info" method="GET" action="somepage.jsp">
    <!-- 送出与重清 -->
    <input type="submit" value="送出">
    <input type="reset" value="清除">
</form>
 

本文框text与密码输入框password的外观是差不多的,差别在于密码输入框会使用字节遮罩来隐藏输入的字节,设定的例子如下:
<form name="info" method="GET" action="somepage.jsp">
    <!-- 本文框与密码输入 -->
    Login ID: <input type="text" name="id">
    Password: <input type="password" name="pwd">
 
    <!-- 送出与重清 -->
    <input type="submit" value="送出">
    <input type="reset" value="清除">
</form>
 

name属性即在JSP网页中可以用来取得请求参数的名称,另外还可以使用maxlength设定栏位最大输入字节,size可以设定框的大小,而value可以用来设定默认输入内容,可以设计一个JSP网页来测试这个表单的运作:
<%
    // id 即 text 中设定的name属性
    String name = request.getParameter("id"); 
    // pwd 即 password 中设定的 name 属性
    String password = request.getParameter("pwd");

    out.println("接收参数:" + name + ", " + password);
%>
 

当然要记得,表单是必须在HTML网页中才能运作的,记得使用<html>标签:
<html>
 <body>
<form name="login" method="GET" action="login.jsp">
    <!-- 本文框与密码输入 -->
    Login ID: <input="text" name="id">
    Password: <input="password" name="pwd">

    <!-- 送出与重清 -->
    <input type="submit" value="送出">
    <input type="reset" value="清除">
</form>
</body>
</html>
 

输入内容并按下送出键之后,由于是使用GET方法,您可以在网址看到相关的信息:
http://localhost:8080/myjsp/login.jsp?id=justin&pwd=1234

可以看到的多个参数同时发送时,使用&符号来联结。

单选钮radio与核取方块checkbox常用于提供固定的选项给使用者点选,它们都拥有checked属性表示选取,name属性表示按钮名称, value发送出去的值,即request.getParameterValues("name")所取得的值,例如:
<html>
<body>
 <form name="info" method="POST" action="info.jsp">
    <!-- 单选钮 -->
    <input type="radio" name="sex" value="male" checked>男
    <input type="radio" name="sex" value="female">女<br>

    <!-- 核取方块 -->
    <input type="checkbox" name="skills" value="c++">C++<br>
    <input type="checkbox" name="skills" value="java">
         Java<br>
    <input type="checkbox" name="skills" value="c#">C#<br>
 
    <!-- 送出与重清 -->
    <input type="submit" value="送出">
    <input type="reset" value="清除">
</form>
</body>
</html>
 

表单发送方式设定为POST,如此发送的信息就不会出现在网址列上;单选钮的name设定为相同的话,表示属于同一个群组,一次只能选择一个项目,而核取 方块的name设定,其值可以使用request.getParameters()取得,例如设计下面的程序来取得信息:
<%
    String sex = request.getParameter("sex");
    String[] skills = request.getParameterValues("skills");
 
    out.println("性别:" + sex);
    out.println("技能:");
    for(int i = 0; i < skills.length; i++) {
        out.println(skills[i] + ", ");
    }
%>
 

下拉式选单也是一个常用的输入类型,由于将选项以下拉式选单来表现,可以节省网页排版的空间,适用于大量选项可以选择的场合,一个例子如下:
<form name="info" method="POST" action="info.jsp">
    <!-- 下拉选单 -->
    <select name="salary" multiple>
        <option value="L1">20000以下</option>
        <option value="L2">20000 ~ 30000</option>
        <option value="L3">30000 ~ 40000</option>
    </select>
 
    <!-- 送出与重清 -->
    <input type="submit" value="送出">
    <input type="reset" value="清除">
</form>
 

取得下拉式选单设定值的方法,同样是使用getParameterValues(),另外下拉式选单也可以使用multiple设定为可复选,而 size 属性可以用于设定栏位的大小。

最后,输入类型中还有一个hidden类型,它不会在浏览器上显示任何组件,但可以设定name与value,主要是用来隐藏一些信息,在下一次发送请求时,一并将隐藏的信息发送给服务器。