- 浏览: 38861 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
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 8711 Html中的一些简单的标 ... -
UDP 的简单了解
2011-10-13 18:01 894基于UDP通信时,发送 ... -
之前最恐惧的用代码写二叉搜索数
2011-08-11 21:07 848树还是一种 ... -
链表,谈谈它
2011-08-09 20:00 785什么是链表呢,它自然是一种数据结构,那么必然要涉及到它和数组, ... -
我也做雷电
2011-08-08 07:35 1176刚做完雷电小游戏,现 ... -
又学了一天线程
2011-08-02 23:35 897又学了一天线程 1线 ... -
初识多线程
2011-08-01 22:28 807现在的操作系统是多任 ... -
文件的保存 队列 山寨BMP
2011-07-28 23:08 952文 ... -
文件的输入输出流
2011-07-26 20:34 1文件的输 ... -
文件的输入输出 流
2011-07-26 20:31 852文件的 ... -
文件的输入输出 流
2011-07-26 20:29 1package netjava.txc.ExceEr ... -
文件的基本操作
2011-07-26 19:55 819文件的基本操 ... -
异常机制 的 理解
2011-07-26 18:52 821java中的异常 机制 我们用java编 ... -
java中的 队列 集合 映射
2011-07-24 20:54 3499java中的队列 集合 映射 从计算机的角度看,数据是 ...
相关推荐
解释了MVC设计模式; MFC是如何简化实现MVC的;
为Blog中的同名文章,包含源码和原文。
主要介绍了浅谈MVC框架的优点(翻译),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
下面小编就为大家带来一篇浅谈MVC+EF easyui dataGrid 动态加载分页表格。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
目录什么是MVC?MVC模式组成ModelViewController示例M层DAO数据访问接口V层login.jsplogin_success.jspC层com.servlet.LoginServlet小结 什么是MVC? (官方定义出门右转) MVC(Model View Controller)模型-视图-...
PHP是全世界上使用率最高的网页开发语言,台湾每4个网站,就有1个用PHP语言开发。1995年发明PHP语言的Rasmus Lerdorf,也是打造出Yahoo全球服务网站的架构师之一,他首度来台分享如何架构网站扩充性丶安全性和效能的...
包含一个PPT(mvc->mvp->mvvm的概念,优缺点),一份源码(观察者模式,事件系统,mvc,mvp,mvvm的demo)
个人技术分享用PPT.个人理解 欢迎斧正
MVC =Multiple Variate Counter 多元计算器 MVC本来是存在于Desktop程序中的,M是指数据模型,V是指用户界面,C则是控制器。使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。比如...
php开发MVC框架浅谈,php开发MVC框架浅谈,php开发MVC框架浅谈
版权声明:本文为博主原创文章,码字不易,转载请注明原文地址,谢谢。 https://blog.csdn.net/qq_16131393/article/
【ASP.NET编程知识】浅谈ASP.NET MVC应用程序的安全性.docx
【ASP.NET编程知识】浅谈ASP.NET MVC 防止跨站请求伪造(CSRF)攻击的实现方法.docx
【ASP.NET编程知识】ASP.NET MVC学习之NuGet在VS中的运用浅谈.docx
本篇文章主要介绍了Asp.net Mvc之Action如何传多个参数的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
MVC Model–View–Controller (MVC)是一种把信息展现逻辑和用户交互分离的计算机用户界面开发模式;Model包含应用的数据和业务逻辑;Controller负责把用户的输入,转换为命令传递给Model和View;这是维基百科的解释;...
主要介绍了浅谈使用MVC模式进行JavaScript程序开发,同时也介绍了一些JavaScript的MVC框架,需要的朋友可以参考下