HTTP协议基本的两个请求方式为GET与POST,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="控件型态">
其中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="text" name="id"> Password: <input="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> <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">女 <!-- 复选框 --> <input type="checkbox" name="skills" value="c++">C++ <input type="checkbox" name="skills" value="java"> Java <input type="checkbox" name="skills" value="c#">C# <!-- 送出与重清 --> <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,主要是用来隐藏一些信息,在下一次发送请求时,一并将隐藏的信息发送给服务器。