编写3个servlet,分别为LogIn、CheckUser、Welcome,在LogIn中输入用户名和密码,点击“提交”按钮,提交到CheckUser中进行验证,验证成功显示Welcome,失败则重新返回到LogIn。
图1,业务流程
图2演示动画
代码如下:
LogIn类:
package com.test.servlet;
import java.io.*;
import javax.servlet.http.*;
import javax.servlet.*;
import javax.servlet.ServletException;
public class LogIn extends HttpServlet{
public void doGet(HttpServletRequest request, HttpServletResponse response){
try{
response.setContentType("text/html;charset = GBK");
request.setCharacterEncoding("GBK");
PrintWriter pw = response.getWriter();
pw.write("<html>");
pw.write("<head>");
pw.write("<meta http-equiv=\"content-type\" content = \"text/html; charset=GBK\">");
pw.write("</head>");
pw.write("<body>");
pw.write("<h1>欢迎登录</h1>");
pw.write("<form name = \"login\" action = \"checkuser\" method = \"post\">");
pw.write("用户名<input type = \"text\" name = \"username\" value = \"\"/><br/><br/>");
pw.write("密 码<input type = \"password\" name = \"password\" value = \"\"/><br/><br/>");
pw.write("<input type = \"submit\" name = \"submit\" value = \"提交\"/>");
pw.write("</form>");
pw.write("</body>");
pw.write("</html>");
} catch(IOException io){
io.printStackTrace();
}
}
}
CheckUser类:
package com.test.servlet;
import java.io.IOException;
import javax.servlet.http.*;
import javax.servlet.ServletException;
public class CheckUser extends HttpServlet{
public void doPost(HttpServletRequest request, HttpServletResponse response){
String strUserName = null;
String strPassword = null;
strUserName = request.getParameter("username");
strPassword = request.getParameter("password");
// 为测试方便,只要密码为123,即验证通过
if (/*strUserName.equals("admin") && */strPassword.equals("123")){
// 验证成功,进入欢迎页面
try{
response.sendRedirect("welcome?username=" + strUserName);
}catch(IOException io){
io.printStackTrace();
}
}else
{
// 验证失败,返回登录页面
try{
response.sendRedirect("login");
}catch(IOException io){
io.printStackTrace();
}
}
}
}
说明:sendRedirect()传递多个参数,response.sendRedirect("URL路径?参数1=参数1值&参数2=参数2值&参数3=参数3值&...");
Welcome类:
package com.test.servlet;
import java.io.*;
import java.io.IOException;
import javax.servlet.http.*;
import javax.servlet.ServletException;
public class Welcome extends HttpServlet{
public void doGet(HttpServletRequest request, HttpServletResponse response){
try{
response.setContentType("text/html;charset = GBK");
String strUserName = null;
// 参数传递的用户名,参数中有中文可能会乱码所以需要转码
strUserName = request.getParameter("username");
// 使用给定的字符编码将参数字符串编码到 byte 序列,并将结果存储到新的 byte 数组。
// http协议传输中默认使用的编码是iso-8859-1,所以这里getBytes()方法参数值为iso-8859-1
byte [] UserNameBefCode = strUserName.getBytes("iso-8859-1");
// 通过使用指定的编码,解码指定的 byte 数组,构造一个新的 String。
// 将参数用GBK重新解码为新的字符串
strUserName = new String(UserNameBefCode, "GBK");
PrintWriter pw = response.getWriter();
pw.write("<html>");
pw.write("<head>");
pw.write("</head>");
pw.write("<body>");
pw.write("<p><b>欢迎:</b>" + strUserName + "</p>");
pw.write("</body>");
pw.write("</html>");
} catch(IOException io){
io.printStackTrace();
}
}
}