- 浏览: 40061 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
ttxsj:
这么麻烦为什么不用maven插件?
eclipse 建立一个maven web 工程 -
zhangcan6176:
LZ牛X
equals和==的区别 -
dingran:
我看过Effective Java的关于equal的内容,他里 ...
equals和==的区别 -
dingran:
工作几年后,更应该回到这些基本知识上来重新思考,这样的收获能记 ...
equals和==的区别 -
xiaokang1582830:
这些才是最基础的东西!基础不扎实是无法写出优雅高效的代码
equals和==的区别
谈mvc
- 博客分类:
- 总结
首先稍微解释一下MVC的含义,M(model),是指数据模型,这就和数据库有关了。V(view),是指视图,通俗讲应该就是网页界面,C(control)就是实现M和V之间的消息的沟通。
网站重要的两个部分就是数据库和界面,我们又通常称之为前台和后台,显然这两个有着密切的关系,但最好把这两个分离开来,或者说,把它们之间的千丝万缕的,隐隐约约的关系,搞的更清晰一些。有一个角色用来单独处理他们之间的关系比较好。这个就是C(control)。于是MVC结构应运而生了。
下面详细谈一下,自己实现的MVC。MVC的结构就是下面的这个图。
下面解释一下我写的代码:
首先是,浏览器发出请求,login,根据web.xml文件配置,请求到达ControlServlet。
ControlServlet解析请求路径,得到请求是login,然后根据mvc.pro(自己定义)的文件配置,
利用反射原理实例化相应的请求Action(本身是一个接口)类的对象,调用相应的方法,再
到ActionForward(专门负责跳转页面的类)里,跳转页面。
下面是代码:
三个包:web webAction webServlet
mvc.pro是一个自定义配置文件 里面的内容,类似于键值对package web;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
* 连接数据库的代码
*
* @author txc
*
*/
public class DBlink {
/**
* 判断是是否登入成功的方法
*
* @param userName
* @param usePwd
* @return
* @throws SQLException
*/
public boolean userLogin(String userName, String usePwd)
throws SQLException {
// 这个是连接到数据库的方法
String sql = "select userPwd from userinfo where userName = '"
+ userName + "';";
ResultSet rs = linkDB().executeQuery(sql);
while (rs.next()) {
String pwd = rs.getString(1);
if (pwd.equals(usePwd)) {// 密码正确
return true;
}
}
return false;
}
/**
* 判断是否注册成功的方法
*
* @param userName
* @param userPwd
* @return
* @throws SQLException
*/
public boolean userResgister(String userName, String userPwd)
throws SQLException {
// return true ;
int len = userName.length();
if (len > 20) {
return false;
}
String sql = "select userName from userinfo where userName = '"
+ userName + "';";
ResultSet rs = linkDB().executeQuery(sql);
if (rs.next()) {// 如果存在的话,肯定不行的
// System.out.println("数据库查询了吗?");
// String name = rs.getString(1);
// System.out.println("数据库查询了吗?"+name);
return false;
} else {// 这个用户名没有被注册
sql = "insert into userinfo(userName ,userPwd)values ('"
+ userName + "','" + userPwd + "');";
linkDB().executeUpdate(sql);
return true;
}
}
/*
* 查询的方法
*/
public ResultSet inquire() throws SQLException {
String sql = "select * from userinfo ";
ResultSet rs = linkDB().executeQuery(sql);
return rs;
}
public void operation(int num) throws SQLException {
String sql = " delete from userinfo where id=" + num + ";";
linkDB().executeUpdate(sql);
}
/**
*
* @param sql
* sql代码
* @return 放回结果集对象
*/
private Statement linkDB() {
try {
// 装载对应数据库的驱动类
Class.forName("com.mysql.jdbc.Driver").newInstance();
// 数据库连接串
String dbURL = "jdbc:mysql://localhost:3306/wmszinfo";
// connection 代表程序与数据库的一个连接
Connection con = DriverManager.getConnection(dbURL, "root", "1929");
Statement state = con.createStatement(); // 用于执行sql语句的声明对象,执行后可以方法resultre对象
return state;
} catch (Exception g) {
g.printStackTrace();
}
return null;
}
}
webAction包
package webAction;
import java.sql.SQLException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import webServlet.ActionForward;
public interface Action {
public ActionForward execute(HttpServletRequest request, HttpServletResponse response) ;
}
这是loginAction类
package webAction;
import java.sql.SQLException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import web.DBlink;
import webServlet.ActionForward;
public class LoginAction implements Action {
@Override
public ActionForward execute(HttpServletRequest request,
HttpServletResponse response) {
ActionForward af = null;
DBlink db = new DBlink();
String userName = request.getParameter("userName");
String userpwd = request.getParameter("userPwd");
try {
if(db.userLogin(userName, userpwd)){
//如果登入成功
request.getSession().setAttribute("current",userName);
}
af = new ActionForward("index.jsp");//最终总是转到index页面
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return af;
}
}
这是ControlSevlet类
package webServlet;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Properties;
import java.util.StringTokenizer;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import webAction.Action;
/**
* Servlet implementation class ControlServlet
*/
public class ControlServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
Properties pro = new Properties();
/**
* @see HttpServlet#HttpServlet()
*/
public ControlServlet() {
super();
// TODO Auto-generated constructor stub
}
public void service(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
String uri = request.getRequestURI();// 得到请求的路径
File file = new File(uri);
String filename = file.getName();// 只是为了得到login.Action
// 再去掉.Action
StringTokenizer st = new StringTokenizer(filename, ".");
String requestString = "";
if (st.hasMoreElements()) {
requestString = st.nextToken();// 现在是真正得到了login
}
//System.out.println();
// 根据 login得到相应的类
String classname = pro.get(requestString).toString();
try {
Action action = (Action) Class.forName(classname).newInstance();// 根据相应的请求创建相应的对象
// 调用相应的方法
ActionForward af = action.execute(request, response);// 若是登入则登入
// 跳转页面
af.forward(request, response);
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void init(){
String path = "/WEB-INF/mvc.pro";
// 我们仔细看一下这些路径是什么意思
try {
pro.load(new FileReader(new File(this.getServletContext().getRealPath(
path))));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
这是页面跳转的类
package webServlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 跳转页面的类
* @author txc
*
*/
public class ActionForward {
String path = "";
// 这是构造方法
public ActionForward(String path){
this.path = path;
}
public void forward(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
//跳转页面
request.getRequestDispatcher(path).forward(request, response);
}
}
如:
login=webAction.LoginAction register=webAction.RegisterAction exit=webAction.ExitAction
另外它和web.xml放在相同的目录下面。这个文件的加载方法,在ControlServelt里面,即init方法。
<!--EndFragment--><!--EndFragment-->
发表评论
-
Html
2011-11-20 17:24 9071 Html中的一些简单的标 ... -
UDP 的简单了解
2011-10-13 18:01 919基于UDP通信时,发送 ... -
之前最恐惧的用代码写二叉搜索数
2011-08-11 21:07 871树还是一种 ... -
链表,谈谈它
2011-08-09 20:00 830什么是链表呢,它自然是一种数据结构,那么必然要涉及到它和数组, ... -
我也做雷电
2011-08-08 07:35 1213刚做完雷电小游戏,现 ... -
又学了一天线程
2011-08-02 23:35 935又学了一天线程 1线 ... -
初识多线程
2011-08-01 22:28 865现在的操作系统是多任 ... -
文件的保存 队列 山寨BMP
2011-07-28 23:08 986文 ... -
文件的输入输出流
2011-07-26 20:34 1文件的输 ... -
文件的输入输出 流
2011-07-26 20:31 883文件的 ... -
文件的输入输出 流
2011-07-26 20:29 1package netjava.txc.ExceEr ... -
文件的基本操作
2011-07-26 19:55 862文件的基本操 ... -
异常机制 的 理解
2011-07-26 18:52 865java中的异常 机制 我们用java编 ... -
java中的 队列 集合 映射
2011-07-24 20:54 3551java中的队列 集合 映射 从计算机的角度看,数据是 ...
相关推荐
同时,文档 `浅谈MVC架构在DotNET WinForm中的应用(C#).doc` 应该提供了理论背景和详细的步骤指导,帮助我们理解和实践 MVC 设计模式。 总之,MVC 架构为 DotNET WinForm 应用提供了强大的设计思路,使得开发者可以...
**MVC设计模式详解** MVC(Model-View-Controller)设计模式是一种广泛应用于软件工程,尤其是Web开发中的架构模式。它将应用程序分为三个主要组件:模型(Model)、视图(View)和控制器(Controller)。这种分离...
【PHP发明人谈MVC和网站设计架构】的讨论中,Rasmus Lerdorf,作为PHP的创始人,分享了他对构建具有高扩展性、安全性和性能的网站架构的观点。他指出,PHP是世界上最广泛使用的网页开发语言,尤其在台湾地区应用广泛...
【浅谈MVC框架的优点(翻译)】 MVC(Model-View-Controller)框架是一种广泛应用于Web开发的设计模式,旨在提高代码的可读性、可维护性和可测试性。本文将探讨MVC框架相对于传统ASP.NET Web Forms的一些优势。 **...
**什么是MVC设计模式** MVC(Model-View-Controller)设计模式是一种软件架构模式,它将应用程序分为三个主要组件,以实现职责分离,提高可维护性和可扩展性。MVC模式广泛应用于Web开发,特别是在Java领域,如使用...
### 浅谈框架与MVC #### 架构的重要性及概念 在软件开发领域,架构设计扮演着至关重要的角色。良好的架构设计不仅能够确保软件系统的稳定性、可维护性和可扩展性,还能提升团队协作效率。正如文章所述,“好的产品...
首先上javascript的代码 [removed] $(function () { LoadGrid(); }) //加载表格!!! function LoadGrid() { $('#roleGrid').datagrid({ width: 900, striped: true, //交替条纹 ... idF
### 浅谈模型-视图-控制器(MVC)模式 #### 一、MVC模式简介 MVC(Model-View-Controller),即模型-视图-控制器模式,是一种广泛应用于软件开发领域的设计模式,特别是在桌面应用和Web应用程序中。这种模式的...
本文将深入探讨三种常见的设计模式:Model-View-Controller(MVC)、Model-View-Presenter(MVP)和Model-View-ViewModel(MVVM)。这些模式在构建用户界面时起着至关重要的作用,尤其是在Web和移动应用开发中。 ...
本文将深入探讨两种常见的设计模式——MVC(Model-View-Controller)和MVP(Model-View-Presenter),并结合实际的TestMVP项目,解析它们在实际开发中的运用。 首先,我们来了解一下MVC模式。MVC是一种软件设计模式...
ASP.NET MVC是一个强大的框架,用于构建可维护的、高性能的Web应用程序。在ASP.NET MVC中实现弹出窗口功能,能够增强用户体验,例如用于确认操作、显示详细信息或进行表单输入。以下是一些关于在ASP.NET MVC中实现弹...
当我们谈到“php自己编写mvc框架”时,意味着我们要实现一个基于PHP的自定义MVC架构。 ** MVC模式详解 ** 1. **Model(模型)**:模型是应用程序的核心部分,负责管理和操作数据。在PHP MVC框架中,模型类通常与...
【ASP.NET MVC应用程序的安全性】 ASP.NET MVC是一个用于构建Web应用程序的开源框架,它强调模型-视图-控制器(MVC)设计模式。虽然ASP.NET MVC提供了强大的开发灵活性,但同时也意味着开发人员需要更加关注应用...
浅谈 ASP.NET MVC 防止跨站请求伪造(CSRF)攻击的实现方法 本文档对 ASP.NET MVC 中防止跨站请求伪造(CSRF)攻击的实现方法进行了详细的探讨。首先,文章介绍了 CSRF 攻击的定义和历史,然后通过一个模拟的示例,...
浅谈“三层结构”原理与用意.doc文档可能会详细讨论三层架构的设计原则和优点,比如提高了代码的可重用性、可测试性和可维护性。通过将不同职责的代码分开,开发者可以专注于各自领域的任务,提高开发效率。 ...
**Spring MVC 框架详解** Spring MVC 是 Java Web 开发中的一个核心框架,它作为 Spring 框架的一部分,提供了构建 MVC(Model-View-Controller)架构的应用程序的工具和结构。本教程将通过一个简单的例子来介绍...
*** MVC框架是微软推出的一种用于构建Web应用程序的模型-视图-控制器(Model-View-Controller)框架,它允许开发者以一种更加灵活的方式来组织和管理Web应用程序的代码。在*** MVC中,Action方法是控制器中处理请求并...