HTML各种组件和Servlet的处理方法

转载地址:http://book.51cto.com/art/200811/96235.htm

2.2.4  HTML各种组件和Servlet的处理方法

本节的代码在HtmlTags目录中,它包括form1.html和ProcessForm1.java两个文件,其他文件是后面章节的代码。

运行本节例子的网址如下:

http://localhost:8080/HtmlTags/form1.html

在前面的章节中,已经演示了Servlet处理简单HTML组件(即单行输入框)的情况,HTML组件还包括诸如单选按钮、多选框(复选框)、单选菜单、多选菜单的情况,Servlet如何读取这些组件的数据,是本节的讨论主题。

form1.html是一个包含HTML组件的HTML文件,ProcessForm1.java是显示这些组件数据的Servlet。

(1) 单行输入框(含密码输入框)

对于下面这个HTML组件,读者已经知道Servlet读取其中输入数据的方法:

Input your Name:
<INPUT TYPE="TEXT" NAME="name"><br/>

下面是Servlet读取数据的代码:

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

(2) 单选按钮

下面是单选按钮的HTML代码:

Select your Gender:
<input type="radio" name="sex" value="male" checked="checked"> Male
<input type="radio" name="sex" value="female"> Female

它在浏览器中的样子如图2.4所示。

图2.4  单选按钮

在单选按钮中,只能在一组按钮中选择一项,其特点是单选按钮的name都相同。

下面是读取单选按钮的选择值的代码:

String sex = request.getParameter("sex");

其值是male或者female,即HTML标记中value属性的值,不是提示信息Male或者Female。

可见,对于单选按钮,读取其选择的代码与单行输入框相同。

(3) 不同名多选框

下面是多选框的HTML代码:

Select Your Transport1:
<input type="checkbox" name="bike" checked="checked">
I have a bike
<input type="checkbox" name="car" value="auto">
I have a car
<input type="checkbox" name="plane">
I have a plane
<br/>  

在浏览器的样子如图2.5所示。

图2.5  不同名多选框

这个多选框可以选择多种交通工具,只有name,没有value的值。要知道选择了哪个工具,由于每个选择框有自己的name,那么可以用下面的代码显示其是否被选择:

String bike = request.getParameter("bike");

如果选择了bike,那么返回值是on(不是true和bike),如果没有选择,返回值是null。

(4) 同名多选框

上面多选框中各个选择框的name不同,如果它们相同,即下面的HTML代码:

Select Your Transport2:
<input type="checkbox" name="transport" value="bike" >
I have a bike
<input type="checkbox" name="transport" value="car" checked="checked">
I have a car
<input type="checkbox" name="transport" value="plane" checked="checked">
I have a plane
<br/>

其在浏览器中的样子看起来与上一个多选框相同,如图2.6所示。

图2.6  同名多选框

但其各个选择框的name都是transport,如果用request.getParameter(“transport”),由于该方法仅返回String类型,因此最多得到其中一个选择框的值,其他选择框的值无法知道。所幸Java考虑到了这种情况,认为上面的多选框返回的是一个数组,用下面的代码得到多选框中的值:

String[] transport = request.getParameterValues("transport");
if (transport != null) {
for (int i = 0; i < transport.length; i++) {
out.println("transport:" + transport[i] + ", ");
}
out.println("<br/> ");
}

就是说,不用request.getParameter方法,而是用request.getParameterValues,它返回用同样name的HTML组件值的数组。如果选择了car和plane,那么浏览器的输出为:

transport:car, transport:plane,

即没有选择的组件值不会出现在数组中。
(5) 无默认值单选菜单
下面是一个单选菜单的HTML代码:

Select only one car you like most:
<select name="cars1">
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="fiat">Fiat</option>
<option value="audi">Audi</option>
</select>

其在浏览器中的样子如图2.7所示。

图2.7  无默认值单选菜单

由于因此只能选择一个,name为car1的值就只有一个,所以可以用下面的代码来得到选择的值:

String cars1 = request.getParameter("cars1");

注意: 它返回的是value属性的值,即小写的汽车名,不是菜单上的大写汽车名。

(6) 有默认值的单选菜单

下面是有默认值单选菜单的HTML代码:

Select only one car you like most, with fiat as default:
<select name="cars2">
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<!-- selected -->
<option value="fiat" selected="selected">Fiat</option>
<option value="audi">Audi</option>
</select>
<br/>

其在浏览器中的样子如图2.8所示。

硕大的Tech?Ed徽标

可以猜到,得到菜单选择值的代码和多选框一样:

String cars2 = request.getParameter("cars2");

(7) 有默认值多选菜单
下面是有默认值的多选菜单:

Select multiple cars you like,with Saab and audi  as default:<br/>
<select size="6" name="cars3" multiple="multiple">
<option value="volvo">Volvo</option>
<option value="saab" selected="selected">Saab</option>
<option value="fiat" >Fiat</option>
<option value="audi" selected="selected">Audi</option>
</select>

默认选择值是Saab和Audi,其在浏览器中的样子如图2.9所示。

图2.9  有默认值的多选菜单

与多选框的情况类似,得到菜单上的选择值的代码如下:

String[] cars3 = request.getParameterValues("cars3");
if (cars3 != null) {
for (int i = 0; i < cars3.length; i++) {
out.println("cars3:" + cars3[i] + ", ");
}
out.println("<br/> ");
}

(8) 菜单组
下面是菜单组的HTML代码:

<select name="books" size="10" multiple="multiple">
<optgroup label="Programming Languages">
<option value="Java" label="Java">Java</option>
<option value="C++" label="C++">C++</option>
<option value="C#" label="C#">C#</option>
</optgroup>

<optgroup label="Programming Tools">
<option value="JBuilder" label="JBuilder">JBuilder</option>
<option value="Visual Studio" label="Visual Studio">Visual Studio</option>
<option value="Eclipse" label="Eclipse">Eclipse</option>
</optgroup>
</select>

它把菜单分为Programming Languages和Programming Tools两组,其在浏览器中的样子如图2.10所示。

HTML各种组件和Servlet的处理方法_第1张图片
图2.10  菜单组

现在你应该肯定,得到菜单的选择值的代码如下:

String[] books = request.getParameterValues("books");

(9) 多行文本区
多行文本区的HTML代码如下:

<textarea name="comment" rows="10" cols="30">
Put some comment here.
</textarea>
 

其在浏览器中的样子如图2.11所示。

HTML各种组件和Servlet的处理方法_第2张图片
图2.11  多行文本区

得到其输入值的方法与单行输入框相同,即用request.getParameter方法。

从上面的代码中可以得到结论:如果HTML仅返回一个值,用request.getParameter方法,它返回字符串;如果返回几个值,用 request.getParameterValues方法,它返回这些值的数组。

读者可以还记得,用下面的代码能得到表单中所有组件的值:

Enumeration paramNames = request.getParameterNames();
out.print("<h3>Your form contained:</h3>");
while (paramNames.hasMoreElements()) {
String field = (String) paramNames.nextElement();
String value = request.getParameter(field);
out.print(field + " = " + value + "<br>");
}

但是,如果组件的输入可能包含几个值,就像多选框那样,那么上面的代码就不会显示全部的值。如何改进上面的代码,就交给读者自己研究。

 

你可能感兴趣的:(HTML各种组件和Servlet的处理方法)