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. 从ranknet到lamdarank,再到lamdamart

    learn2rank目前基本两个分支,1是神经网络学派ranknet,lamdarank,另一个是决策树学派如gbrank,lamdamart 05年提出ranknet,算分模块是简单的全连接网络,l ...

  2. Spring官方文档下载

    Spring框架是目前最流行的java web开发框架,很多时候,我们需要去查看spring的官方文档,这里就简单介绍下如何下载其官方文档. 1.搜索到spring 官网并进入 2.点击DOCS 3. ...

  3. Python3 Tcp未发送/接收完数据即被RST处理办法

    一.背景说明 昨天一个同事让帮忙写个服务,用于接收并返回他那边提交过来的数据,以便其查看提交的数据及格式是否正确. 开始想用django写个接口,但写接口接口名称就得是定死的,他那边只能向这接口提交数 ...

  4. Ceres Solver 入门稍微多一点

    其实ceres solver用了挺多的,可能是入门不精,有时候感觉感觉不理解代码上是怎么实现的,这次就通过ceres的官网仔细看了一些介绍,感觉对cpp了解更好了一些. 跟g2o的比较的话,感觉cer ...

  5. 福利来了,现“免费”赠送Spring微服务实战书籍

    本书适合拥有构建分布式应用程序的经验.拥有Spring的知识背景以及对学习构建基于微服务的应用程序感兴趣的Java开发人员阅读. 本书籍赠送活动详情,请识别上图二维码☝☝☝☝☝ 书籍推荐 本书教读者如 ...

  6. Unity录音

    上周做过Unity录音,(不知道的可以到网上查找一下,代码挺多的),不过只能录制麦克风的声音,项目需要同时录制背景音和麦克风传进去的声音,经过探索,现已可以录制: 首先需要知道,即使用电脑录音,想录制 ...

  7. Failed to install the hcmon driver

    在安装虚拟机的时候出现“Failed to install the hcmon driver”错误,是之前VM没有卸载干净,提供两个参考解决方法: 1:在C盘的驱动文件夹也就是“C:\Windows\ ...

  8. Linux c codeblock的使用(二):在工程中编译多个文件

    (一)前言 我们刚开始学习linux c的时候,一般都是在一个c文件里面写完所有程序,然后用gcc编译这个c文件就好了,十分简单. 但是你有没有想过,如果我们希望将不同模块的代码放到不同的c文件,然后 ...

  9. 得到本地电脑IP4地址

    using System.Linq;using System.Net;using System.Net.Sockets; namespace winform_udp{ public class com ...

  10. python基础第一天 3.27

    # #作业1# 猜年龄,可以让用户猜三次!age = 25user_guess = int(input("input your guess"))   age = 25count = ...