mvc模式

|
No |
页面名称 |
文件类型 |
说明 |
|
1 |
User |
javabean |
用户登录的VO操作类 |
|
2 |
DatabaseConnection |
javabean |
负责数据库的连接和关闭 |
|
3 |
IUserDAO |
javabean |
定义登录操作的DAO接口 |
|
4 |
UserDAOImpl |
javabean |
DAO接口的真是实现类,完成具体的登录验证 |
|
5 |
UserDAOProxy |
javabean |
定义代理操作,负责数据库的打开和关闭的操作并且调用真实主题 |
|
6 |
DAOFactory |
javabean |
工厂类,取得DAO接口的实例 |
|
7 |
LoginServlet |
Servlet |
接受请求参数,进行参数验证,调用DAO完成具体的登录验证,并根据DAO的验证结果返回登录信息 |
|
8 |
Login.jsp |
JSP |
提供用户输入的表单,可以显示用户登录成功或者失败的信息。 |
首先需要的就是实现在数据库中创建对应的数据表格,进行数据库的操作的时候我们可以在已知的数据库mldn的情况下,编写下面的代码,进行数据库表的设计和添加代码的操作:
代码如下所示
/*=============== 使用MLDN数据库 =======================*/
USE mldn ;
/*================= 删除user数据表 =======================*/
DROP TABLE IF EXISTS user ;
/*================== 创建user数据表 ======================*/
CREATE TABLE user(
userid VARCHAR(30) PRIMARY KEY ,
name VARCHAR(30) NOT NULL ,
password VARCHAR(32) NOT NULL
) ;
/*====================== 插入测试数据 ======================*/
INSERT INTO user (userid,name,password) VALUES ('admin','administrator','admin') ;
接着需要的是创建java类,其实质上就是javabean对应的,其中都是一些属性的设置和取得属性值的操作,代码如下所示User.java
package org.lxh.mvcdemo.vo ;
public class User {
private String userid ;
private String name ;
private String password ;
public void setUserid(String userid){
this.userid = userid ;
}
public void setName(String name){
this.name = name ;
}
public void setPassword(String password){
this.password = password ;
}
public String getUserid(){
return this.userid ;
}
public String getName(){
return this.name ;
}
public String getPassword(){
return this.password ;
}
}
接下来的操作时创建一个数据库的连接类DatabaseConnection.java
主要是负责数据库的链接和关闭的操作,代码如下所示:
package org.lxh.mvcdemo.dbc ;
import java.sql.* ;
public class DatabaseConnection {
private static final String DBDRIVER = "org.gjt.mm.mysql.Driver" ;
private static final String DBURL = "jdbc:mysql://localhost:3306/mldn" ;
private static final String DBUSER = "root" ;
private static final String DBPASSWORD = "mysqladmin" ;
private Connection conn = null ;
public DatabaseConnection() throws Exception{
try{
Class.forName(DBDRIVER) ;
this.conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD) ;
}catch(Exception e){
throw e ;
}
}
public Connection getConnection(){
return this.conn ;
}
public void close() throws Exception{
if(this.conn != null){
try{
this.conn.close() ;
}catch(Exception e){
throw e ;
}
}
}
}
下面是进行的创建接口类,统一标准操作:IUserDAO.java代码如下:
package org.lxh.mvcdemo.dao ;
import org.lxh.mvcdemo.vo.User ;
public interface IUserDAO {
// 现在完成的是登陆验证,那么登陆操作只有两种返回结果
public boolean findLogin(User user) throws Exception ;
}
实现dao类,实现接口中的标准的操作代码如下:
package org.lxh.mvcdemo.dao.impl ;
import org.lxh.mvcdemo.vo.User ;
import org.lxh.mvcdemo.dbc.* ;
import org.lxh.mvcdemo.dao.* ;
import java.sql.* ;
public class UserDAOImpl implements IUserDAO {
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 ;
}
this.pstmt.close() ;
return flag ;
}
}
下面做到是代理操作类代理其实质就是实现对真实类的调用操作,代码如下所示;
package org.lxh.mvcdemo.dao.proxy ;
import org.lxh.mvcdemo.vo.User ;
import org.lxh.mvcdemo.dbc.* ;
import org.lxh.mvcdemo.dao.* ;
import org.lxh.mvcdemo.dao.impl.* ;
import java.sql.* ;
public class UserDAOProxy implements IUserDAO {
private DatabaseConnection dbc = null;
private IUserDAO dao = null;
public UserDAOProxy(){
try{
this.dbc = new DatabaseConnection();
}catch(Exception e){
e.printStackTrace();
}
this.dao = new UserDAOImpl(dbc.getConnection());
}
public boolean findLogin(User user) throws Exception{
boolean flag = false ;
try{
flag = this.dao.findLogin(user);
//调用真实的主题完成操作。
}catch (Exception e){
throw e;
}
return flag ;
}
}
工厂类的代码DAOFactory.java,代码如下:
package org.lxh.mvcdemo.factory ;
import org.lxh.mvcdemo.dao.* ;
import org.lxh.mvcdemo.dao.proxy.*;
public class DAOFactory{
public static IUserDAO getIUserDAOInstance(){
return new UserDAOProxy();
}
}
DAO的操作主要是完成数据层的操作,但是下面在mvc的设计模式之中还有servlet也是很重要的,下面建立一个LoginServlet.java的操作类
package org.lxh.mvcdemo.servlet ;
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import org.lxh.mvcdemo.factory.*;
import org.lxh.mvcdemo.vo.*;
public class LoginServlet extends HttpServlet{
public void doGet(HttpServletRequest req,HttpServletResponse resp)throws ServletException,IOException{
String path = "login.jsp";
String userid = req.getParameter("userid");
String userpass = req.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();
user.setUserid(userid);
user.setPassword(userpass);
try{
if(DAOFactory.getIUserDAOInstance().findLogin(user)){
info.add("用户登录成功,欢迎"+user.getName()+"光临");
}else{
info.add("用户登录失败,错误的登录名或者密码。");
}
}catch(Exception e){
e.printStackTrace();
}
}
req.setAttribute("info",info);
req.getRequestDispatcher(path).forward(req,resp);
}
public void doPost(HttpServletRequest req,HttpServletResponse resp)throws ServletException,IOException{
this.doGet(req,resp);
}
}
编写表单的登录页面;
<%@ page language="java" contentType="text/html;charset=gb2312"%>
<%@ page pageEncoding="GBK" %>
<%@ page import="java.util.*"%>
<html>
<head><title>mvclogin的jsp页面</title></head>
<body>
<script language="javascript">
function validate(f){
if(!(/^\w{5,15}$/.test(f.userid.value))){
alert("用户ID必须是5~15位!") ;
f.userid.focus() ;
return false ;
}
if(!(/^\w{5,15}$/.test(f.userpass.value))){
alert("密码必须是5~15位!") ;
f.userpass.focus() ;
return false ;
}
}
</script>
<%
request.setCharacterEncoding("GBK");
%>
<%
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>
密 码:<input type="password" name="userpass"><br>
<input type="submit" value="登录">
<input type="reset" value="重置">
</form>
</body>
</html>
接着进行的是web.xml的配置问题了;
配置代码如下:
<servlet>
<servlet-name>login</servlet-name>
<servlet-class>
org.lxh.mvcdemo.servlet.LoginServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>login</servlet-name>
<url-pattern>/mvclogin/LoginServlet</url-pattern>
</servlet-mapping>
至此一个完整的mvc的设计模式就完成了。而且在这道程序中我们会发点jsp中的代码明显减少了很多。
本文来源 我爱IT技术网 http://www.52ij.com/jishu/587.html 转载请保留链接。
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
