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. 为二级域名注册ssl证书,并强制使用https对http进行跳转

    服务器上仍然使用nginx进行代理 1.为二级域名申请ssl证书,如blog.yourdomain.com,见前文. 2.在域名解析服务中,为二级域名添加解析记录 3.nginx默认读取/etc/ng ...

  2. react和vue的不同

    React严格上只针对MVC的view层,Vue则是MVVM模式 virtual DOM不一样,vue会跟踪每一个组件的依赖关系,不需要重新渲染整个组件树.而对于React而言,每当应用的状态被改变时 ...

  3. Laravel 利用中间件控制权限。

    1.把所有需要控制的url写到config/admin.php里. 2.http/kernel.php文件里加上中间件. 3.http/Middleware/Permission.php 4.视图层

  4. centos 7安装python 3

    linux-Centos7安装python3并与python2共存   1.查看是否已经安装Python CentOS 7.2 默认安装了python2.7.5 因为一些命令要用它比如yum 它使用的 ...

  5. 在Postman中使用不受信任的SSL证书

    阅读目录 第一种方案——临时添加到受信任的证书颁发机构: 第二种方案——永久添加到受信任的证书颁发机构: add by zhj: 在http://www.cnblogs.com/ajianbeyour ...

  6. Ubuntu 18.04 下 Redis 环境搭建

    一.安装 Redis ① 下载 wget http://download.redis.io/releases/redis-3.2.8.tar.gz ② 解压 tar -zxvf redis-3.2.8 ...

  7. China MVP Community Connection 2017

    在微软北京和小朋友们参加编程一小时活动  

  8. MYSQL查询操作 详细

    学习目标 1 掌握select查询所有字段.指定字段的数据 2 掌握消除重复行命令distinct 3 掌握as给字段.表起别名 4 掌握条件查询where后跟比较运算符.逻辑运算符的用法 5 掌握条 ...

  9. Rhino学习教程——1.5

    图形面板 图形面板是Rhino为了方便用户操作设置的一个区域,默认提供了“属性”.“图层”.“说明”3个面板(我自定义过了,新增了一个“显示”功能 ). trip:如果要打开更多的图版,可以点击图形面 ...

  10. 怎样用div做三角形

    20181204 用盒子模型做三角形的效果: <div></div> width:0px; height:0px; border:10px solid red; border- ...