MVC实例应用模式

1.可用性:

比如异常处理

2.可修改性:

比如用接口实现

3.性能战术:

4.易用性战术:

分层实现

5.可测试性战术:

实现对其接口进行测试,并不需要对其实现方法进行

6.安全性战术:

对用户的密码进行MD5加密

MVC设计实现及其具体应用

实体类:

package com.keith.bean;

public class TUser implements java.io.Serializable {

private static final long serialVersionUID = 1L;

private Integer userid;

private String userName;

private String pwd;

public TUser() {

}

public Integer getUserid() {

return userid;

}

public void setUserid(Integer userid) {

this.userid = userid;

}

public String getUserName() {

return userName;

}

public void setUserName(String userName) {

this.userName = userName;

}

public String getPwd() {

return pwd;

}

public void setPwd(String pwd) {

this.pwd = pwd;

}

}

需要一个数据库工具类,DBConn:

package com.keith.util;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

public class DBConn {

private static final String DBDRIVER = "com.mysql.jdbc.Driver";

private static final String DBURL = "jdbc:mysql://127.0.0.1:3306/login";

private static final String DBUSER = "root";

private static final String DBPWD = "kejianjun";

private Connection conn = null;

public DBConn() {

try {

Class.forName(DBDRIVER);

conn = DriverManager.getConnection(DBURL, DBUSER, DBPWD);

} catch (ClassNotFoundException e) {

e.printStackTrace();

} catch (SQLException e) {

e.printStackTrace();

}

}

public void close() throws Exception{

if (this.conn != null) {

try {

conn.close();

} catch (Exception e) {

e.printStackTrace();

}

}

}

public Connection getConn() {

return conn;

}

public void setConn(Connection conn) {

this.conn = conn;

}

}

然后从页面开始index.jsp(客户端验证一下):

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<%

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<base href="<%=basePath%>">

<title>My JSP 'index.jsp' starting page</title>

<meta http-equiv="pragma" content="no-cache">

<meta http-equiv="cache-control" content="no-cache">

<meta http-equiv="expires" content="0">

<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">

<meta http-equiv="description" content="This is my page">

<!--

<link rel="stylesheet" type="text/css" href="styles.css">

-->

<script type="text/javascript">

function validate(f){

if (!(/^\w{4,15}$/.test(f.username.value))) {

alert("用户名必须是4~16位!");

f.username.focus();

return false;

}

if (!(/^\w{4,15}$/.test(f.pwd.value))) {

alert("密码必须是4~15位!");

f.pwd.focus();

return false;

}

return true;

}

</script>

</head>

<body>

<%

List<String> info = (List<String>)request.getAttribute("info");

if(info != null){

Iterator<String> iter = info.iterator();

while(iter.hasNext()){

%>

<h3><font color="red"><%=iter.next() %></font></h3>

<%}

} %>

<form action="login" method="post" onsubmit="return validate(this)" name="f">

用户名:<input type="text" name="username"><br />

密&nbsp;码:<input type="password" name="pwd"><br />

<input type="submit" value="登陆">&nbsp;&nbsp;&nbsp;

<input type="reset" value="取消">

</form>

</body>

</html>

然后通过发出的login请求在web.xml里找到想对应的servlet:

<servlet>

<servlet-name>login</servlet-name>

<servlet-class>com.keith.servlet.LoginServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>login</servlet-name>

<url-pattern>/login</url-pattern>

</servlet-mapping>

<servlet>

找到了LoginServlet:

package com.keith.servlet;

import java.io.IOException;

import java.util.ArrayList;

import java.util.List;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import com.keith.bean.TUser;

import com.keith.factory.DAOFactory;

/**

* 定义Sevlet

*

* @author T

*

*/

public class LoginServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

this.doPost(req, resp);

}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

String sucPath = "main.jsp";

String loginEroPath = "index.jsp";

String username = req.getParameter("username");

String pwd = req.getParameter("pwd");

List<String> info = new ArrayList<String>();

if (username == null || "".equals(username)) {

info.add("用户名不能为空!");

}

if (pwd == null || "".equals(pwd)) {

info.add("密码不能为空!");

}

//用户名密码通过验证

if (info.size() == 0) {

//实例化VO

TUser user = new TUser();

//设置username

user.setUserName(username);

//设置pwd

user.setPwd(pwd);

if (DAOFactory.getIUserDAOInstance().findLogin(user)) {

info.add("欢迎:" + user.getUserName());

//保存信息,进行跳转

req.setAttribute("info", info);

req.getRequestDispatcher(sucPath).forward(req, resp);

} else {

info.add("用户信息错误!");

req.setAttribute("info", info);

req.getRequestDispatcher(loginEroPath).forward(req, resp);

}

}

}

}

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

package com.keith.factory;

import com.keith.dao.IUserDAO;

import com.keith.dao.proxy.UserDAOProxy;

/**

* 定义工厂类,取得DAO实例

* @author T

*

*/

public class DAOFactory {

/**

* 取得DAO实例

* @return

*/

public static IUserDAO getIUserDAOInstance(){

//返回代理实例

return new UserDAOProxy();

}

}

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

package com.keith.dao.proxy;

import com.keith.bean.TUser;

import com.keith.dao.IUserDAO;

import com.keith.dao.UserDAOImpl;

import com.keith.util.DBConn;

/**

* DAO代理操作类

*

* @author T

*

*/

public class UserDAOProxy implements IUserDAO {

private DBConn dbc = null;

private IUserDAO dao = null;

public UserDAOProxy() {

//实例化数据库连接

this.dbc = new DBConn();

this.dao = new UserDAOImpl(this.dbc.getConn());

}

/**

* 代理登陆方法

*/

public boolean findLogin(TUser user) {

boolean flag = false;

try {

// 调用真实主题

flag = this.dao.findLogin(user);

this.dbc.close();

} catch (Exception e) {

e.printStackTrace();

}

return flag;

}

}

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

package com.keith.dao;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import com.keith.bean.TUser;

public class UserDAOImpl implements IUserDAO {

private Connection conn = null;

private PreparedStatement pstm = null;

public UserDAOImpl(Connection conn) {

this.conn = conn;

}

/**

* 登陆

*

* @throws SQLException

*/

public boolean findLogin(TUser user) {

boolean flag = false;

try {

String sql = "SELECT username,pwd FROM tuser WHERE username=? and pwd=?";

this.pstm = this.conn.prepareStatement(sql);

this.pstm.setString(1, user.getUserName());

this.pstm.setString(2, user.getPwd());

ResultSet rs = this.pstm.executeQuery();

if (rs.next()) {

user.setUserName(rs.getString(1));

flag = true;

}

} catch (SQLException e) {

e.printStackTrace();

} finally {

try {

if (this.pstm != null) {

this.pstm.close();

}

} catch (SQLException e2) {

e2.printStackTrace();

}

}

return flag;

}

}

实现了IUserDAO接口:

package com.keith.dao;

import java.sql.SQLException;

import com.keith.bean.TUser;

/**

* userDao接口

*

* @author T

*

*/

public interface IUserDAO {

/**

* 用户登录验证

*

* @param user

* @return

*/

public boolean findLogin(TUser user);

}

MVC设计模式在具体网站中的应用

对于百度的首页来说

给用户呈现的就是V,每当用户输入不同的内容,数据层就会处理呈现出不同的页面

MVC实例应用模式的更多相关文章

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

    MVC(Model -View-Controller)实例应用模式 以登录为例: Model:User package com.keith.bean; public class TUser imple ...

  2. MVC5+EF6 入门完整教程十一:细说MVC中仓储模式的应用

    摘要: 第一阶段1~10篇已经覆盖了MVC开发必要的基本知识. 第二阶段11-20篇将会侧重于专题的讲解,一篇文章解决一个实际问题. 根据园友的反馈, 本篇文章将会先对呼声最高的仓储模式进行讲解. 文 ...

  3. MVC5+EF6 入门完整教程11--细说MVC中仓储模式的应用

    摘要: 第一阶段1~10篇已经覆盖了MVC开发必要的基本知识. 第二阶段11-20篇将会侧重于专题的讲解,一篇文章解决一个实际问题. 根据园友的反馈, 本篇文章将会先对呼声最高的仓储模式进行讲解. 文 ...

  4. 浅析前端开发中的 MVC/MVP/MVVM 模式

    MVC,MVP和MVVM都是常见的软件架构设计模式(Architectural Pattern),它通过分离关注点来改进代码的组织方式.不同于设计模式(Design Pattern),只是为了解决一类 ...

  5. 细说MVC中仓储模式的应用

    文章提纲 概述要点 理论基础 详细步骤 总结 概述要点 设计模式的产生,就是在对开发过程进行不断的抽象. 我们先看一下之前访问数据的典型过程. 在Controller中定义一个Context, 例如: ...

  6. Django---定义、MVC和MTV模式、命令行工具、配置文件settings

    1.什么是web框架 框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用框架可以帮你快速开发特定的系统,简单地说,就是你用别人搭建好的舞台来做表演. 对于所有的 ...

  7. MVC视图展现模式之移动布局解析-续集

    网站就必须用响应式布局吗?MVC视图展现模式之移动布局:http://www.cnblogs.com/dunitian/p/5213787.html demo:http://pan.baidu.com ...

  8. [WCF编程]7.实例上下文模式

    一.实例上下文模式概述 实例上下文(IntanceContext Mode)表示服务端的服务实例与客户端的服务代理的绑定方式. 在实例化服务器对象时,WCF采用了3种不同的模式:单调(Per-Call ...

  9. WCF实例上下文模式与并发模式对性能的影响

    实例上下文模式 InstanceContextMode 控制在响应客户端调用时,如何分配服务实例.InstanceContextMode 可以设置为以下值: •Single – 为所有客户端调用分配一 ...

随机推荐

  1. kali的网络服务

    1.启动Apache: service apache2 start 关闭: service apache2 stop 将Apache2服务添加到自动启动的程序组里: update-rc.d apach ...

  2. HTML基础-------最初概念以及相关语法

    HTML概念以及相关语法 HTML HTML是一种类似于(c,java,c++)之类的语言,他是用来描述网页的一种语言.通过各种标签所代表的语义来构建出一个网页,再通过浏览器的渲染功能来实现该网页的各 ...

  3. Django 使用mysql 创建项目

    一.安装 mysql 和 mysqlclient 1. 安装 mysql ,https://www.jianshu.com/p/07a9826898c0 2. pip3 install mysqlcl ...

  4. 记录学习antd design pro dva的过程,主要记错, 多图预警,如有理解偏差,忘指出,多谢!

    首要问题: 如何增加菜单项 答案: 在router.config中添加路由,在locales语言国际化增加选项 问题1: 答案1: 问题2: 这个要修改state,正确写法 存在的疑惑:为什么不能直接 ...

  5. Vue 2.6版本基础知识概要(一)

    挂载组件 //将 App组件挂载到div#app节点里 new Vue({ render: h => h(App), }).$mount('#app') VueComponent.$mount ...

  6. Socket网络编程(案例)

    Socket:套接字 java.net包 1.流式套接字:基于TCP协议的Socket网络编程 工作方式: 1.客户端A连接到服务器: 2.服务器建立连接并把客户端A添加到列表: 3.客户端B.C.. ...

  7. modelsim10.1a安装破解说明

    安装包网盘下载链接:https://pan.baidu.com/s/1X9kUUXMCoikyjCQ_HKdD5g 提取码:3lfd 1.下载文件解压找到"modelsim-win32-10 ...

  8. SpringMVC的各种注解

    @RequestMapping 这个注解标注在方法名上,如 /** * 拦截所有请求: * @RequestMapping(value="/*", method = {Reques ...

  9. CSS3 移动端 1PX 线变成0.5PX

    .line1 {position:relative} .line1:after {content:'';position:absolute;bottom:0;left:0;width:100%;hei ...

  10. Ubuntu系统桌面任务栏和启动器全部消失解决方案

    ubuntu桌面上没有启动器,没有任务栏,只有一个背景,但是运行正常.这种情况很可能是文件管理程序出现异常了. 解决办法: Ctrl+Alt+F1 进入命令行,输入: sudo service lig ...