Serlvet的表单处理
下面通过大多数应用中最普遍的用户登录验证的例子来说明Servlet的表单处理方法。
1.登录页面
login.html
<HTML>
<BODY>
<H2>Login Page</H2>
<FORM ACTION="/demo/test" METHOD="POST">
<TABLE>
<TR>
<TD>Name:</TD>
<TD><INPUT TYPE='text' NAME='userid'></TD>
</TR>
<TR>
<TD>Password:</TD>
<TD><INPUT TYPE='password' NAME='passwd'></TD>
</TR>
</TABLE>
<INPUT TYPE='submit' value="submit">
</FORM>
</BODY>
</HTML>
这是登录页面,在此处要注意表单中各组件的变量命名,该命名关联到后面程序的取值,所以务必要遵循Java的命令规范。另外,还要注意这里form表单action属性的值,如果以“/”开头,则由工程名+URL组成,也可以不加“/”直接用URL即可。
2.Web工程配置文件
web.xml
<?xml version="5.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
…
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>bean.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/test</url-pattern>
</servlet-mapping>
</web-app>
这是Web程序的配置程序,前面介绍过它的重要性,一定要注意servlet元素和servlet-mapping元素的前后顺序,还要注意url-pattern元素值一定要以“/”开头,其后面的变量名即可访问的URL值。
web.xml文件说明如下。
(1)文件的位置。该文件总是放置在WEB-INF中。
(2)基本格式。该文件的开头是XML标头和DOCTYPE声明,并且含有一个web-app元素。
(3)给servlet命名。使用servlet及其子元素servlet-name和servlet-class。
(4)给servlet指定URL。使用servlet-mapping 及其子元素servlet-name和url-pattern。
(5)xml加载。服务器在启动时读取web.xml文件,代码如下所示:
<?xml version="5.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
// ------------------------ 要修改的部分 --------------------------------- //
<servlet>
<servlet-name>在此处给servlet程序取个名字</servlet-name>
<servlet-class>在此处采用包名.类名</servlet-class> //一定要写包名
</servlet>
<servlet-mapping>
<servlet-name>此处的servlet名字与上面取的servlet名字一致</servlet-name>
<url-pattern>/别名</url-pattern> //此处是为servlet取的别名,前面加上'/'; 如: /hello (在浏览器中输入为 ---项目目录/hello)
</servlet-mapping>
</web-app>
注意:修改一次web.xml配置必须重启服务器,否则达不到修改后的效果,必须将所有的Servlet元素放置在任何servlet-mapping元素之前,不能相互混合。
3.Servlet处理表单提交的类
LoginServlet.java
package bean;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
public class LoginServlet extends HttpServlet {
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws IOException {
String userid = request.getParameter("userid");
//从页面login.html中得到提交过来的参数值
String passwd = request.getParameter("passwd");
response.setContentType("text/html; charset=GB2312");
PrintWriter out = response.getWriter();
if (passwd.equals("scwcd")) {
out.println("<HTML>");
out.println("<TITLE>Login Servlet</TITLE>");
out.println("<BODY>");
out.println(" Welcome, " + userid);
out.println("</BODY>");
out.println("</HTML>");
}else {
out.println("<HTML>");
out.println("<TITLE>Login Servlet</TITLE>");
out.println("<BODY>");
out.println(" Login Falure!!");
out.println("</BODY>");
out.println("</HTML>");
}
}
}
从请求中获取值,使用了HttpServletRequest对象的getParameter方法,它的返回类型为String类型,所以如果涉及到类型转换,需要首先判断是否为Null值,应该避免空指针问题。