Without actually running the code, it looks to me like you've got too much inside of the central
for loop, so that it generates something like:
<html>
<body>
<form>
<input ... value='User' name='user' />Tom</input>
</form>
</body>
</html>
<html>
<body>
<form>
<input ... value='User[i]' name='user' />Dick</input>
</form>
</body>
</html>
<html>
<body>
<form>
<input ... value='User[i]' name='user' />Harry</input>
</form>
</body>
</html>
and so on. This is clearly wrong.
An HTML document should have only one html element and only one body element. Anything else is undefined. Note that input elements do not have closing tags, but that doesn't matter here because there's no connection between the checkbox input elements and the form that contains the submit buttons.
You should add a input statement to that form, something like:
<input type="hidden" name="username" value="" />
Then, your checkboxes can look something like this (without the extra, html, body and form tags):
out.println("<input type='checkbox' value='"+User[i]+"' onclick='document.add.username.value+=this.value+\',\';' /> "+User[i]);
When a submit button is clicked, the hidden value should be a list of comma separated list of user names (possibly with duplicates) and a trailing comma.
Also note that, with the exception of radio buttons, input elements should have unique names. Yet, I don't see why there's a need to name the input statements at all in your code since the necessary info is passed by using the [i]this variable.
hth - Larry