Web开发模式--MVC设计模式应用

以Servlet为主体展开,由Servlet接收所有的客户端请求,然后根据请求调用相应的JavaBean,并将所有的显示结果交给JSP完成。通过MVC模式可以增加代码的弹性。

1、mysql数据库已经创建了一个user表,userid,name,password。

2、按照DAO设计标准,首先应该定义出VO类,VO类中的属性与表中的列一一对应。

package cn.edu.lyu.mvcdemo.vo;

public class User//定义VO类--User.java

{

private String userid;

private String name;

private String password;

public String getUserid()

{

return userid;

}

public void setUserid(String userid)

{

this.userid = userid;

}

public String getName()

{

return name;

}

public void setName(String name)

{

this.name = name;

}

public String getPassword()

{

return password;

}

public void setPassword(String password)

{

this.password = password;

}

}

3、在DAO中需要进行数据库的连接操作,定义数据库操作类--DatabaseConnection.java
package cn.edu.lyu.mvcdemo.dbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;


public class DatabaseConnection
{
private static final String DBDRIVER = "com.mysql.jdbc.Driver";
private static final String DBURL = "jdbc:mysql://localhost:3306/zlx";
private static final String DBUSER = "root";
private static final String DBPASSWORD = "123456";
private Connection conn = null;

public DatabaseConnection()
{
try {
Class.forName(DBDRIVER);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
this.conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public Connection getConnection()
{
return this.conn;
}

public void close()
{
if(this.conn != null)
{
try {
this.conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

4、由于本程序的核心功能是完成用户的登录验证,所以在定义DAO接口时,只需定义一个登录验证的方法即可。
定义DAO接口---IUserDAO.java

package cn.edu.lyu.mvcdemo.dao;


import cn.edu.lyu.mvcdemo.vo.User;


public interface IUserDAO

{

public boolean findLogin(User user) throws Exception;

}



5、定义DAO实现类---UserDAOImpl.java

package cn.edu.lyu.mvcdemo.dao.impl;


import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;


import cn.edu.lyu.mvcdemo.dao.IUserDAO;
import cn.edu.lyu.mvcdemo.vo.User;


public class UserDAOImpl implements IUserDAO//定义DAO实现类-UserDAOImpl.java
{
private Connection conn = null;
private PreparedStatement pstmt = null;
public UserDAOImpl(Connection conn)
{
this.conn = conn;
}
public boolean findLogin(User user) throws Exception
{
boolean flag = false;
String sql = "select name from user where userid=? and password=?";
this.pstmt = this.conn.prepareStatement(sql);
this.pstmt.setString(1, user.getUserid());
this.pstmt.setString(2, user.getPassword());
ResultSet rs = this.pstmt.executeQuery();
if(rs.next())
{
user.setName(rs.getString(1));//取得姓名
flag = true;//登录成功
}
if(this.pstmt != null)
{
this.pstmt.close();
}
return flag;
}
}

6、定义DAO代理操作类---UserDAOProxy.java

package cn.edu.lyu.mvcdemo.dao.proxy;


import cn.edu.lyu.mvcdemo.dao.IUserDAO;
import cn.edu.lyu.mvcdemo.dao.impl.UserDAOImpl;
import cn.edu.lyu.mvcdemo.dbc.DatabaseConnection;
import cn.edu.lyu.mvcdemo.vo.User;


public class UserDAOProxy implements IUserDAO//定义DAO代理操作类--UserDAOProxy.java
{
private DatabaseConnection dbc = null;
private IUserDAO dao = null;
public UserDAOProxy()
{
this.dbc = new DatabaseConnection();//实例化数据库连接
this.dao = new UserDAOImpl(this.dbc.getConnection());
}

public boolean findLogin(User user) throws Exception
{
boolean flag = false;
flag = this.dao.findLogin(user);//调用真实主题
this.dbc.close();
return flag;
}
}

7、定义工厂类,取得DAO实例---DAOFactory.java

package cn.edu.lyu.mvcdemo.factory;


import cn.edu.lyu.mvcdemo.dao.IUserDAO;
import cn.edu.lyu.mvcdemo.dao.proxy.UserDAOProxy;


public class DAOFactory//定义工厂类,取得DAO实例--DAOFactory.java
{
public static IUserDAO getIUserDAOInstance()   //取得DAO实例
{
return new UserDAOProxy();  //返回代理实例
}
}

8、DAO的操作完成只是数据层的操作,现在需要编写Servlet,在Servlet中要接收客户端发来的输入数据,同时要调用DAO,并且要根据DAO的结果返回相应的信息。

定义Servlet---LoginServlet.java

package cn.edu.lyu.mvcdemo.servlet;


import java.io.IOException;
import java.util.ArrayList;
import java.util.List;


import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


import cn.edu.lyu.mvcdemo.factory.DAOFactory;
import cn.edu.lyu.mvcdemo.vo.User;


public class LoginServlet extends HttpServlet //定义Servlet--LoginServlet.java
{

    public LoginServlet() 
    {
        super();
    }
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
{
String path = "login.jsp";
String userid = request.getParameter("userid");
String userpass = request.getParameter("userpass");
List<String> info = new ArrayList<String>();

if(userid == null || "".equals(userid))
{
info.add("用户id不能为空!");
}
if(userpass == null || "".equals(userpass))
{
info.add("密码不能为空!");
}
if(info.size() == 0)//用户名和密码验证通过
{
User user = new User();//实例化VO
user.setUserid(userid);
user.setPassword(userpass);

try {
if(DAOFactory.getIUserDAOInstance().findLogin(user))//验证通过
{
info.add("用户登录成功,欢迎"+user.getName()+"光临!");
}
else
{
info.add("用户登录失败,错误的用户名和密码!");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
request.setAttribute("info", info);//保存错误信息
request.getRequestDispatcher(path).forward(request, response);//跳转
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
doGet(request, response);
}
}

9、登录页----login.jsp

<%@ page contentType = "text/html; charset = utf-8" import = "java.util.*"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>张龙翔JAVA高端培训</title>

</head>

<script language = "JavaScript">

function validate(f)

{

if(!(/^\w{4,15}$/.test(f.userid.value)))

{

  alert("用户ID必须是4~15位!") ;

  f.userid.focus() ;

  return false ;

}

if(!(/^\w{5,15}$/.test(f.userpass.value)))

{

  alert("密码必须是5~15位!") ;

  f.userpass.focus() ;

  return false ;

}

return true;

}

</script>

<body>

<h2>用户登录程序</h2>

<%

List<String> info = (List<String>)request.getAttribute("info");

if(info != null)

{

Iterator<String> iter = info.iterator();

while(iter.hasNext()){

%>

<h4><%=iter.next()%></h4>

<%

}

}

%>


<form action = "LoginServlet" method = "post" onSubmit = "return validate(this)">

用户ID:<input type = "text" name = "userid"><br>

&nbsp;&nbsp;码:<input type = "password" name = "userpass"><br>

<input type = "submit" value = "登录">

<input type = "reset" value = "重置">

</form>

</body>

</html>

10、配置web.xml文件

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" metadata-complete="true" version="3.0">

  

  <servlet>

  <servlet-name>login</servlet-name>

  <servlet-class>cn.edu.lyu.mvcdemo.servlet.LoginServlet</servlet-class>

  </servlet>

  

  <servlet-mapping>

  <servlet-name>login</servlet-name>

  <url-pattern>/LoginServlet</url-pattern>

  </servlet-mapping>

</web-app>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值