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. 前端使用JS-SDK上传图片(文件)到七牛

    Qiniu-JavaScript-SDK (下文简称为 JS-SDK)适用于 :IE11.Edge.Chrome.Firefox.Safari 等浏览器,基于七牛云存储官方 API 构建,其中上传功能 ...

  2. IOCP模型与网络编

    一.前言:        在老师分配任务(“尝试利用IOCP模型写出服务端和客户端的代码”)给我时,脑子一片空白,并不知道什么是IOCP模型,会不会是像软件设计模式里面的工厂模式,装饰模式之类的那些呢 ...

  3. Could not autowire. No beans of 'xxxx' type found的错误

    在Idea的spring工程里,经常会遇到Could not autowire. No beans of 'xxxx' type found的错误提示.但程序的编译和运行都是没有问题的,这个错误提示并 ...

  4. angular组件

  5. Emacs中的代码折叠控制

    之前在别的编辑器里用到代码折叠的功能很好用. 对 Emacs 不够熟悉,作为一只坚强的懒癌晚期患者,一直没开启这个功能,使用石器时代的标记法来记录每个结构的起止位置,效率可想而知. 今天可算是找着它啦 ...

  6. Python,是什么让我遇见你

    有些不可思议,作为一个曾学了半年C语言还挂了的计算机学渣,我竟然选择了Python这门计算机语言课.事实上,我是有过犹豫的,毕竟知道自己不擅长这方面的学习还选这门课,这种行为确实看起来有点傻傻的.但最 ...

  7. ie11~ie9兼容的布局写法。bootsteap的12栅格,栅格化就可以实现。

    全局 CSS 样式 设置全局 CSS 样式:基本的 HTML 元素均可以通过 class 设置样式并得到增强效果:还有先进的栅格系统. 概览 深入了解 Bootstrap 底层结构的关键部分,包括我们 ...

  8. 详细介绍Ubuntu 16.04系统环境安装Docker CE容器的过程

    由于项目的需要,我们在很多软件配置环境中需要用到Docker容器,这个时候我们可以用自己的VPS主机搭建.在这篇文章中,笔者将会利用Ubuntu 16.04系统环境安装Docker CE容器的过程.如 ...

  9. Android : Camera之CHI API

    一.CAM CHI API功能介绍: CHI API建立在Google HAL3的灵活性基础之上,目的是将Camera2/HAL3接口分离出来用于使用相机功能,它是一个灵活的图像处理驱动程序(摄像头硬 ...

  10. Kubernetes 常用命令

    文章摘自:https://blog.csdn.net/felix_yujing/article/details/51622132 1 查看类命令--- # 查看集群信息 kubectl cluster ...