MVC(Model -View-Controller)实例应用模式

以登录为例:

Model:User

  1. package com.keith.bean;
  2. public class TUser implements java.io.Serializable {
  3. private static final long serialVersionUID = 1L;
  4. private Integer userid;
  5. private String userName;
  6. private String pwd;
  7. public TUser() {
  8. }
  9. public Integer getUserid() {
  10. return userid;
  11. }
  12. public void setUserid(Integer userid) {
  13. this.userid = userid;
  14. }
  15. public String getUserName() {
  16. return userName;
  17. }
  18. public void setUserName(String userName) {
  19. this.userName = userName;
  20. }
  21. public String getPwd() {
  22. return pwd;
  23. }
  24. public void setPwd(String pwd) {
  25. this.pwd = pwd;
  26. }
  27. }

 

 

 

 

数据库连接类:

  1. package com.keith.util;
  2. import java.sql.Connection;
  3. import java.sql.DriverManager;
  4. import java.sql.SQLException;
  5. public class DBConn {
  6. private static final String DBDRIVER = "com.mysql.jdbc.Driver";
  7. private static final String DBURL = "jdbc:mysql://127.0.0.1:3306/login";
  8. private static final String DBUSER = "root";
  9. private static final String DBPWD = "kejianjun";
  10. private Connection conn = null;
  11. public DBConn() {
  12. try {
  13. Class.forName(DBDRIVER);
  14. conn = DriverManager.getConnection(DBURL, DBUSER, DBPWD);
  15. catch (ClassNotFoundException e) {
  16. e.printStackTrace();
  17. catch (SQLException e) {
  18. e.printStackTrace();
  19. }
  20. }
  21. public void close() throws Exception{
  22. if (this.conn != null) {
  23. try {
  24. conn.close();
  25. catch (Exception e) {
  26. e.printStackTrace();
  27. }
  28. }
  29. }
  30. public Connection getConn() {
  31. return conn;
  32. }
  33. public void setConn(Connection conn) {
  34. this.conn = conn;
  35. }
  36. }

 

View层:登录jsp页面

  1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
  2. <%
  3. String path = request.getContextPath();
  4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
  5. %>
  6. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  7. <html>
  8. <head>
  9. <base href="<%=basePath%>">
  10. <title>My JSP 'index.jsp' starting page</title>
  11. <meta http-equiv="pragma" content="no-cache">
  12. <meta http-equiv="cache-control" content="no-cache">
  13. <meta http-equiv="expires" content="0">
  14. <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
  15. <meta http-equiv="description" content="This is my page">
  16. <!--
  17. <link rel="stylesheet" type="text/css" href="styles.css">
  18. -->
  19. <script type="text/javascript">
  20. function validate(f){
  21. if (!(/^\w{4,15}$/.test(f.username.value))) {
  22. alert("用户名必须是4~16位!");
  23. f.username.focus();
  24. return false;
  25. }
  26. if (!(/^\w{4,15}$/.test(f.pwd.value))) {
  27. alert("密码必须是4~15位!");
  28. f.pwd.focus();
  29. return false;
  30. }
  31. return true;
  32. }
  33. </script>
  34. </head>
  35. <body>
  36. <%
  37. List<String> info = (List<String>)request.getAttribute("info");
  38. if(info != null){
  39. Iterator<String> iter = info.iterator();
  40. while(iter.hasNext()){
  41. %>
  42. <h3><font color="red"><%=iter.next() %></font></h3>
  43. <%}
  44. } %>
  45. <form action="login" method="post" onsubmit="return validate(this)" name="f">
  46. 用户名:<input type="text" name="username"><br />
  47. 密&nbsp;码:<input type="password" name="pwd"><br />
  48. <input type="submit" value="登陆">&nbsp;&nbsp;&nbsp;
  49. <input type="reset" value="取消">
  50. </form>
  51. </body>
  52. </html>

配置web.xml

  1. <servlet>
  2. <servlet-name>login</servlet-name>
  3. <servlet-class>com.keith.servlet.LoginServlet</servlet-class>
  4. </servlet>
  5. <servlet-mapping>
  6. <servlet-name>login</servlet-name>
  7. <url-pattern>/login</url-pattern>
  8. </servlet-mapping>
  9. <servlet>

Controller控制层  servlet

  1. package com.keith.servlet;
  2. import java.io.IOException;
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. import javax.servlet.ServletException;
  6. import javax.servlet.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9. import com.keith.bean.TUser;
  10. import com.keith.factory.DAOFactory;
  11. /**
  12. * 定义Sevlet
  13. *
  14. * @author T
  15. *
  16. */
  17. public class LoginServlet extends HttpServlet {
  18. private static final long serialVersionUID = 1L;
  19. @Override
  20. protected void doGet(HttpServletRequest req, HttpServletResponse resp)
  21. throws ServletException, IOException {
  22. this.doPost(req, resp);
  23. }
  24. @Override
  25. protected void doPost(HttpServletRequest req, HttpServletResponse resp)
  26. throws ServletException, IOException {
  27. String sucPath = "main.jsp";
  28. String loginEroPath = "index.jsp";
  29. String username = req.getParameter("username");
  30. String pwd = req.getParameter("pwd");
  31. List<String> info = new ArrayList<String>();
  32. if (username == null || "".equals(username)) {
  33. info.add("用户名不能为空!");
  34. }
  35. if (pwd == null || "".equals(pwd)) {
  36. info.add("密码不能为空!");
  37. }
  38. //用户名密码通过验证
  39. if (info.size() == 0) {
  40. //实例化VO
  41. TUser user = new TUser();
  42. //设置username
  43. user.setUserName(username);
  44. //设置pwd
  45. user.setPwd(pwd);
  46. if (DAOFactory.getIUserDAOInstance().findLogin(user)) {
  47. info.add("欢迎:" + user.getUserName());
  48. //保存信息,进行跳转
  49. req.setAttribute("info", info);
  50. req.getRequestDispatcher(sucPath).forward(req, resp);
  51. else {
  52. info.add("用户信息错误!");
  53. req.setAttribute("info", info);
  54. req.getRequestDispatcher(loginEroPath).forward(req, resp);
  55. }
  56. }
  57. }
  58. }

通过DAO工厂找到UserDAO的实例:这是DAOFactory

  1. package com.keith.factory;
  2. import com.keith.dao.IUserDAO;
  3. import com.keith.dao.proxy.UserDAOProxy;
  4. /**
  5. * 定义工厂类,取得DAO实例
  6. * @author T
  7. *
  8. */
  9. public class DAOFactory {
  10. /**
  11. * 取得DAO实例
  12. * @return
  13. */
  14. public static IUserDAO getIUserDAOInstance(){
  15. //返回代理实例
  16. return new UserDAOProxy();
  17. }
  18. }

返回代理实例,找到userDAO的代理类:

Java代码  

  1. package com.keith.dao.proxy;
  2. import com.keith.bean.TUser;
  3. import com.keith.dao.IUserDAO;
  4. import com.keith.dao.UserDAOImpl;
  5. import com.keith.util.DBConn;
  6. /**
  7. * DAO代理操作类
  8. *
  9. * @author T
  10. *
  11. */
  12. public class UserDAOProxy implements IUserDAO {
  13. private DBConn dbc = null;
  14. private IUserDAO dao = null;
  15. public UserDAOProxy() {
  16. //实例化数据库连接
  17. this.dbc = new DBConn();
  18. this.dao = new UserDAOImpl(this.dbc.getConn());
  19. }
  20. /**
  21. * 代理登陆方法
  22. */
  23. public boolean findLogin(TUser user) {
  24. boolean flag = false;
  25. try {
  26. // 调用真实主题
  27. flag = this.dao.findLogin(user);
  28. this.dbc.close();
  29. catch (Exception e) {
  30. e.printStackTrace();
  31. }
  32. return flag;
  33. }
  34. }

找到UserDAOImpl的并执行它的findLogin()方法:

Java代码  

  1. package com.keith.dao;
  2. import java.sql.Connection;
  3. import java.sql.PreparedStatement;
  4. import java.sql.ResultSet;
  5. import java.sql.SQLException;
  6. import com.keith.bean.TUser;
  7. public class UserDAOImpl implements IUserDAO {
  8. private Connection conn = null;
  9. private PreparedStatement pstm = null;
  10. public UserDAOImpl(Connection conn) {
  11. this.conn = conn;
  12. }
  13. /**
  14. * 登陆
  15. *
  16. * @throws SQLException
  17. */
  18. public boolean findLogin(TUser user) {
  19. boolean flag = false;
  20. try {
  21. String sql = "SELECT username,pwd FROM tuser WHERE username=? and pwd=?";
  22. this.pstm = this.conn.prepareStatement(sql);
  23. this.pstm.setString(1, user.getUserName());
  24. this.pstm.setString(2, user.getPwd());
  25. ResultSet rs = this.pstm.executeQuery();
  26. if (rs.next()) {
  27. user.setUserName(rs.getString(1));
  28. flag = true;
  29. }
  30. catch (SQLException e) {
  31. e.printStackTrace();
  32. finally {
  33. try {
  34. if (this.pstm != null) {
  35. this.pstm.close();
  36. }
  37. catch (SQLException e2) {
  38. e2.printStackTrace();
  39. }
  40. }
  41. return flag;
  42. }
  43. }

 实现了IUserDAO接口:

Java代码  

  1. package com.keith.dao;
  2. import java.sql.SQLException;
  3. import com.keith.bean.TUser;
  4. /**
  5. * userDao接口
  6. *
  7. * @author T
  8. *
  9. */
  10. public interface IUserDAO {
  11. /**
  12. * 用户登录验证
  13. *
  14. * @param user
  15. * @return
  16. */
  17. public boolean findLogin(TUser user);
  18. }

 

MVC(Model -View-Controller)实例应用模式的更多相关文章

  1. What is the difference between Reactjs and Rxjs?--React is the V (View) in MVC (Model/View/Controller).

    This is really different, React is view library; and Rxjs is reactive programming library for javasc ...

  2. 深入浅出Java MVC(Model View Controller) ---- (JSP + servlet + javabean实例)

    在DRP中终于接触到了MVC,感触是确实这样的架构系统灵活性不少,现在感触最深的就是使用tomcat作为服务器发布比IIS好多了,起码发布很简单,使用起来方便. 首先来简单的学习一下MVC的基础知识, ...

  3. Model View Controller (MVC) Overview

    By Rakesh Chavda on Jul 01, 2015 What is MVC?Model View Controller is a type of user interface archi ...

  4. MVC模式(Model View Controller)下实现数据库的连接,对数据的删,查操作

    MVC模式(Model View Controller): Model:DAO模型 View:JSP  在页面上填写java代码实现显示 Controller:Servlet 重定向和请求的转发: 若 ...

  5. MVC(Model View Controller)框架

    MVC框架 同义词 MVC一般指MVC框架 MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一 ...

  6. Model View Controller(MVC) in PHP

    The model view controller pattern is the most used pattern for today’s world web applications. It ha ...

  7. Model View Controller

    On the iPhone or iPod touch, a modal view controller takes over the entire screen. This is the defau ...

  8. Qt Model/view 小实例 文件目录浏览器

    1. 文件目录浏览器 直接在main.cpp文件中添加下列代码 #include "mainwindow.h" #include <QApplication> #inc ...

  9. 设计模式 --- 模型-视图-控制器(Model View Controller)

    模型-视图-控制器(Model-View-Controller,MVC)是Xerox PARC在20世纪80年代为编程语言Smalltalk-80发明的一种软件设计模式,至今已广泛应用于用户交互应用程 ...

  10. MVC4 Model View Controller分离成独立项目

    适合人群:了解MVC项目的程序员 开发工具:vs2012 开发语言:C# 小项目或功能比较单一的项目可以直接新建一个MVC基本项目类型即可,但随着需求不断迭代,项目的功能模块越来越多,甚至有些模块可以 ...

随机推荐

  1. Docker私有仓库实例

    C:\Users\think\.m2\settings.xml文件配置: <?xml version="1.0" encoding="UTF-8"?> ...

  2. 服务器安装SSH服务:

    强制关闭yum进程: rm -f /var/run/yum.pid 启动SSH: service sshd start 设置开机运行: chkconfig sshd on

  3. Haxe:东游记(上)part1:intro

    原标题:西行漫记之Haxe初探·上篇 1. 简述:haxe是啥? haxe(读作蛤克思),是以前flash时代诞生的一种的开源跨平台方案.学会了haxe,可以直接用这种类似TypeScript的语法, ...

  4. week6

    面向对象编程 class类(新式类:class xx(obj):,经典类 class xx:) 构造函数 __init__(self,ret1,ret2...) 在实例化时做一些类的初始化工作 析构函 ...

  5. Java之for循环嵌套练习

    1.打印4层*** ***** ***** ***** ***** class forfor{ public static void main(String[] args){ for(int y=0; ...

  6. 【持续更新】JAVA面向对象多线程编程的一些tips

    sleep()和wait()的区别 sleep()方法是Thread类的方法,wait()方法是Object类的方法. 调用sleep()方法的过程中,线程不会释放对象锁,睡眠时间一过,就又开始执行. ...

  7. 有时候union或者union all比左连接查询速度快

    原来的语句 select count(1) from  ( SELECT CustCode,ShopCode,CreateTime,UniqCode,SaleType,TotalMoney,Exami ...

  8. IRP小结 0x01 IRP & IO_STACK_LOCATION(结合WRK理解)

    写博客整理记录一下IRP相关的知识点,加深一下印象. 所有的I/O请求都是以IRP的形式提交的.当I/O管理器为了响应某个线程调用的的I/O API的时候,就会构造一个IRP,用于在I/O系统处理这个 ...

  9. C# 异常:索引超出了数组界限。

    数组如果只取到了三个元素, 而引用数组的时候引用了五个, 就会有此错误.

  10. JavaScript 实时 全角转半角

    //JavaScript全角字符转半角(参数str为input框输入的内容)var $fullChar2halfChar = function(str) { var result = ''; for ...