3、 MVC开发模式
为了实现MVC的模式,需要在JSP+DAO的模式中加入一个控制层,也就是C层的部分,这就需要我们再建立一起起控制作用的Servlet,我们先建一个包com.test.servlet,在其下建立一个LoginServlet.java,其代码如下:
package com.test.servlet;
import javax.servlet.*;
import javax.servlet.http.*;
import com.test.model.*;
import com.test.factory.*;
import java.io.*;
import java.util.*;
public class LoginServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
this.doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
// 完成验证,替换Login_success.jsp
List errors = new ArrayList();
String path = "login.jsp";
// 1、接受请求内容
String id = request.getParameter("id");
String password = request.getParameter("password");
// 2、进行数据合法性验证,是否为空,长度是否满足等
// 要将接收到的内容设置到Person对象,才能传递到DAO中操作
// 所以可以在Person中加入验证方法
Person person = new Person();
person.setId(id);
person.setPassword(password);
person.setErrors(errors);
// 3、如果合法则进行数据库验证
if (person.isValidate()) {
// 数据合法,可以进行数据库验证
if (DaoFactory.getPersonDaoInstance().isLogin(person)) {
// 登陆成功
//request.setAttribute("name", person.getName());
path = "login_success.jsp";
} else {
// 登陆ID或密码错误
errors.add("登陆ID或密码错误");
}
}
//保存用户信息
request.setAttribute("person", person);
//保存错误信息
request.setAttribute("errors", errors);
request.getRequestDispatcher(path).forward(request, response);
}
}
在这个类中覆写了HttpServlet的doGet()和doPost()方法,在doPost()方法中,通过request对象收集表单中的信息,并将收集到的信息赋予Person对象,因为只要通过Person对象才能将信息通过工厂传入Dao中进行处理。
在这里,我们可以再增加一个对用户提交表单数据合法化的验证功能,这个功能方法可以放到起数据收集作用的Bean中,那就是Person,因为在这里有收集上来的所有表单数据项,我们可以在Person类中再增加一个isLogin()方法,如下:
public boolean isValidate() {
boolean flag = true;
//验证ID
if ("".equals(this.id) || this.id == null)
{
errors.add("登陆ID不能为空");
flag = false;
}
else
{
//进行长度验证
if (this.id.length() < 3 || this.id.length() > 8)
{
errors.add("用户名的长度只能是3~8位");
flag = false;
}
}
//验证密码
if ("".equals(this.password) || this.password == null)
{
errors.add("密码不能为空");
flag = false;
}
else
{
//进行长度验证
if (this.password.length() < 3 || this.password.length() > 8)
{
errors.add("密码的长度只能是3~8位");
flag = false;
}
}
this.errors = errors;
return flag;
}
其中的errors是用来存储错误信息的,需要生命一个集合变量,并构建Setter和Getter方法:
//用于保存错误信息的属性
private List errors;
public void setErrors(List errors)
{
this.errors = errors;
}
public List getErrors()
{
return this.errors;
}
到此,我们可就构建好了MVC的C部分,现在需要部署一个这个Servlet,打开web.xml文件,增加对Servlet的部署,如下:
login
com.test.servlet.LoginServlet
login
/LoginServlet.do
这就将这个Servlet部署到了系统中,当系统拦截到LoginServlet.do的请求时就会交由com.test.servlet.LoginServlet这个类来处理。前台页面提交请求也需要作出相应的修改,那就是表单提交的Action,需要修改为:
此外对错误信息的显示,可以通过已经保存的Attribute获取,如下: