Form 中action ="formservlet" 此servlet给出验证的方式,类似客户端验证的js代码段。首先要处理的就是如何从form中获取参数的问题。Servlet 继承HttpServlet接口,有response对象和request对象。这样可以通过response对象的getparameter()方法获取某一个name值,如文本框的值。而按钮可通过getparameterValues()方法获得并存入字符串数组,再计算数组长度就可以得知有没有点击性别按钮。而多选框如兴趣选项,可以计算字符串的长度得知。
接下来就是如何显示结果的问题。有重定向方法和转发两种方式,可以直接转到一个servlet或者jsp。HttpServletResponse 类的重定向方法response对象的 SendRedirect() 和request对象的RequestDistpacher类的转发方法forward(),实现机制不同,查看地址栏显示时不同。
在显示结果的jsp页面中,仍要处理怎么从servlet获取参数。request对象的getAttribute()和setAttribute()方法成对出现,解决客户端信息和服务器端信息的传递。request对象的getParameter()可以直接获取客户端信息。当得到参数后,该是展示jsp 的html特色的时候了。
遇到问题:
1.servlet 中判断文本框是否有值代码为:if(username == null || "".equals(username)) ,因为此username是request对象的getParameter("username")方法获得。一种可能是此对象没有成功获取,即对象不存在;另一种可能是此对象存在,但是值为空。
2.protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {} 把doPost改成dopost出现405错误
3.formservlet中的list不通过request对象的setAttribute是不能传给JSP页面的。
public String getParameter(String name)返回由name指定的请求参数值,如果指定参数不存在,则返回null值。若指定参数存在,则返回空字符串。使用该方法必须保证指定的参数值只有一个。
public String[] getParameterValues(String name)返回由指定参数name所包含的所有值,返回值是一个String数组。如果指定的参数不存在,则返回null。该方法适用于参数有多个值的情况。如果参数只有一个值,则返回的数组长度为一。
public Enumeration getParameterNames()返回一个Enumeration对象,它包含请求中所有的请求参数名,元素是String类型的。如果没有请求参数,则返回一个空的Enumeration对象。可以在enumeration对象上迭代得到每个请求参数名,然后再调用请求对象的getParameter()或getParameterValues()方法得到每个参数值。
4.RequestDispatcher对象是一个web资源的包装器,可以用来把当前的请求转发到该资源。这种转发时服务器端控制权的转向,客户端发来的请求将交由新的页面来处理。使用响应对象的sendRedirect()方法实际是服务器向浏览器发送一个特殊的响应头。它命令浏览器连接到新的位置。重定向是作为不同请求来看待的。因此所有请求作用域的参数在重定向到下一个页面时都会失效。另外,使用sendRedirect()方法重定向时,资源不能位于web-inf中。在调用sendRedirect()方法之前,主页面不能有内容输出。在调用sendRedirect()之后应该有一个return语句。所以在此servlet不能采用重定向方法,也不能使用getParameterValues()获取参数。
附上代码:
formservlet.java
public class formservlet extends HttpServlet {
protected void dopost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String username = req.getParameter("username");
String password = req.getParameter("password");
String gender = req.getParameter("gender");
String[] interest = req.getParameterValues("interest");
String address = req.getParameter("address");
String instruction = req.getParameter("instruction");
username = new String(username.getBytes("iso-8859-1"),"utf-8");
password = new String(password.getBytes("iso-8859-1"),"utf-8");
address = new String(address.getBytes("iso-8859-1"),"utf-8");
gender = new String(gender.getBytes("iso-8859-1"),"utf-8");
instruction = new String(instruction.getBytes("iso-8859-1"),"utf-8");
List<String> list = new ArrayList<String>();
if(username == null || "".equals(username)){
list.add("username is blank 空!");
}
else if(username.length() < 4 ){
list.add("the length of username is short!");
}
else if(username.length() > 10){
list.add("the length of username is long!");
}
if(password == null || "".equals("password")){
list.add("password is blank!");
}
else if(password.length() < 4 ){
list.add("the length of password is short!");
}
else if( password.length() > 10){
list.add("the length of password is long!");
}
if(gender == null ){
list.add("gender is blank!");
}
if(interest == null){
list.add("the length of interest is blank!");
}
else if(interest.length > 3){
list.add("the length of interest is blank!");
}
if(instruction == null || "".equals("instruction")){
list.add("you should have some description!");
}
if(list.isEmpty()){
req.setAttribute("username", username);
req.setAttribute("password", password);
req.setAttribute("gender", gender);
req.setAttribute("interest", interest);
req.setAttribute("address", address);
req.setAttribute("instruction", instruction);
req.getRequestDispatcher("success.jsp").forward(req, resp);
}
else {
req.setAttribute("error", list);
req.getRequestDispatcher("error.jsp").forward(req,resp);
}
}
}
error.jsp:
<body>提交表单失败!<br>
<% List<String> list = (List<String> )request.getAttribute("error");
for(String str: list){
%>
<ul>
<li><font color="#ff0000"> </font>
<%=str %>
</li>
</ul>
<%} %>
</body>
succes.jsp:
用户名 <%= request.getAttribute("username") %><br>
密码<%= request.getAttribute("password") %><br>
性别<%= request.getAttribute("gender") %><br>
兴趣<% String[] interest = (String[])request.getAttribute("interest");
for(String str : interest){
%>
<%= str %>
<%} %>
<br>
地址<%= request.getAttribute("address") %><br>
说明<%= request.getAttribute("instruction") %>
</body>