基于mvc的博客项目实例
- 格式:docx
- 大小:15.38 KB
- 文档页数:2
原创:MVC5实例教程(MvcMovieStore新概念版:mvc5.0,EF6.01)-。
上⼀章我们讨论了如何创建项⽬和添加/更新程序包,这⼀章我们讨论⼀下如何创建数据上下⽂和数据实体模型;当然,MVC的运⾏模式⼤家应该都很清楚,MVC 表⽰模型-视图-控制器。
MVC 是⼀种⽤于应⽤程序开发的框架,基于 MVC 应⽤程序中包含:Models:表⽰应⽤程序的数据和使⽤验证逻辑来强制执⾏业务规则的数据的类。
Views:您的应⽤程序⽤来动态⽣成 HTML 响应的模板⽂件。
Controllers: 处理传⼊的浏览器请求的类中检索模型数据,然后指定将响应返回到浏览器中的视图模板。
⾄于如何添加控制器、模型、视图这些概念在这个系列教程中都有详细提到,所以我们并不作为主要讲解内容,在以后的过程中也都会涉及到。
现在我们再来看⼀下Code First,Code First最原始的原型实际上被叫做只有代码(Code Only)。
这是因为开发者只需要写代码,将会⾃动创建模型和数据库。
是因为有⼀个特别的类(继承与System.Data.Entity.DbContext),这个类就是我们即将要谈到的数据上下⽂,⽽数据上下⽂⼜与我们在Web.config中设置的数据连接字符串相对应,数据连接配置和数据上下⽂的关系,这⾥不作过多阐述。
创建数据上下⽂:打开我们上节中已经创建好的项⽬,可以在解决⽅案资源管理器中看到如下图所⽰的IdentityModels.vb这个⽂件,如下图所⽰:从⽂件名我们⼤概可以理解为:⾝份模型,顾名思义就是说这个⽂件中应该是与我们这个项⽬所使⽤的⾝份认证有关的类或者设置。
打开之后我们可以看到两个类:1Imports Microsoft.AspNet.Identity.EntityFramework23' You can add profile data for the user by adding more properties to your ApplicationUser class, please visit /fwlink/?LinkID=317594 to learn more. 4Public Class ApplicationUser5Inherits IdentityUser6End Class78Public Class ApplicationDbContext9Inherits IdentityDbContext(Of ApplicationUser)10Public Sub New()11MyBase.New("DefaultConnection")12End Sub13End ClassApplicationUser:应⽤程序⽤户,ApplicationDbContext:应⽤程序数据上下⽂;不错,项⽬默认已经为我们创建好了数据上下⽂,你可能会问现在这个类怎么不是继承的System.Data.Entity.Dbcontext呀?,那么,我们在IdentityDbContext处点击右键,选择转到定义,如下图所⽰:之后会在⼯作区打开“对象浏览器”窗⼝,从这⾥可以很清楚的看出,IdentityDbContext的继承关系,没看错,他就是继承的System.Data.Entity.Dbcontext;如下图所⽰:也就是说,我们的项⽬中已经有了⼀个数据上下⽂存在,那么我还需要再创建⼀个吗?,对于我们现有的项⽬,不需要多个数据库,⼀个就够我们⽤的了,所以答案是,不需要!需要的是我们对此进⾏扩充。
实验4:基于MVC模式的应用实例实验内容:利用MVC模式实验目的:掌握JSP+Servlet+JavaBean完成MVC的方法实验要求:1、使用MySQL数据库完成数据库表的设计2、使用Dreamweaver完成用户表单的设计3、编写访问数据库的Java类4、编写数据Bean封装数据5、编写逻辑Bean完成数据库访问6、编写Servlet接收用户请求,访问逻辑Bean并根据请求结果完成页面跳转实验步骤:1、创建数据库在MySQL中创建数据库usermanager,并创建数据表users,包括用户名和密码两个字段,具体表结构如表2-1所示。
表2-1 用户信息表字段名数据类型长度是否为空是否主键描述username varchar 20 否是用户名password varchar 20 否否密码2、使用Dreamweaver完成表单的设计(1)使用Dreamweaver创建用户表单login.jsp,包括用户名和密码两个文本框、提交及重置两个按钮,具体如图2-1所示。
图2-1 用户登录页面(2)创建用户登录成功页面success.jsp(如图2-2所示)以及用户登录失败页面fail.jsp(如图2-3所示)。
图2-2 用户登录成功页面图2-3 用户登录失败页面3、编写访问数据库的Java类将数据访问操作封装到DataBaseManager.java中,具体包括以下方法:(1)public static Connection getConnection():获取数据库连接。
(2)public ResultSet doQuery(String strSQL):执行查询操作。
(3)public int doUpdate(String strSQL):执行增加、删除和修改操作。
(4)public void closeConnection():关闭数据连接。
4、编写数据Bean——LoginBean.java将相关数据封装到数据Bean中,具体内容包括:(1)成员变量username、password(2)成员变量对应的get/set方法5、编写逻辑Bean——LoginService.java登录操作的相关语句在LoginService.java中通过方法完成封装——public boolean doLogin(LoginBean user):完成数据库访问操作6、编写Servlet——LoginServlet.java编写接受请求的Servlet,完成:(1)接收提交数据——用户名和密码,组合成完成登录操作的SQL语句(2)定义LoginBean.java对象封装数据(3)定义LogicBean.java对象,调用方法,传递参数LoginBean.java对象,进行登录操作(4)处理返回的结果,如果用户名和密码正确,跳转到success.jsp页面;若用户名或密码错误,跳转到fail.jsp页面。
hupeikang1香坛护法楼主打印字体大小:tT发表于2009-10-18 11:10 | 只看该作者[心得]让程序更灵活——MVC小示例本帖最后由hupeikang1 于2009-10-18 11:13 编辑这回还是我们得日历小程序。
不过这回比以前要复杂一些。
关于MVC 的基础,大家可以参考以下两篇帖子。
这个帖子就直接讲MVC的实际应用了。
使用MVC架构创造一个简单的日历程序(一)/thread-36141-1-1.html使用MVC架构创造一个简单的日历程序(二)/thread-36183-1-1.html这个程序是这样的:点击日历上的某个“日期”,则加载“每日事件列表”。
再次点击那个“日期”就关闭对应的“每日事件列表”。
鼠标放到当前“每日事件列表”则会浮现出一个“关闭按钮”。
点击“关闭按钮”仍可以关闭“每日事件列表”。
这是程序运行的截图:我们现在就来看看他是怎么运用MVC让程序更灵活,架构更清晰的吧。
首先我们先总结一下都有哪些视图视图控制器模型CalendarV CalendarC CalendarMDayVPerDayThingsV PerDayThingsC PerDayThingsM大家可以看到,其它很简单,都是一个视图一个控制器一个模型。
现在就是DayV了。
DayV是日历中的一个日期。
我们来分析一下。
DayV 首先是日历中的元素,他需要知道今天是哪年的哪月,并且需要知道当天是否有事件(右下角红色脚标)。
但是他又与PerDayThings有关系。
比如说再次点击DayV的时候,PerDayThings就会关闭。
当PerDayThings关闭的时候,DayV的选中状态将取消。
这样MVC的灵活之处就显示出来了。
DayV 是由CalendarC 和PerDayThingsC共同控制的。
而DayV本身没有他的控制器和模型。
这是不是很有意思?以下是DayV的代码。
我们可以看到这两个控制器是如何控制DayV的。
MVC的⼀个简单实例基本思路: ⼀个Regist.jsp注册页⾯,⽤于收集⽤户信息,发送请求给控制器Servlet;控制器层Servlet封装模型层对象 jBean,并调⽤其⽅法regiser实现⽤户信息的保存;模型层JavaBean.java 接收控制器层的对象,完成对数据库的操作。
话不多说,上代码。
⾸先有个数据库访问公共类,以后凡是操作数据库的页⾯都可以调⽤。
不容多说:Unilt.java/****/package javaBeanServlet;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;/*** @author Administrator**/public class Unilt {private static final String URL = "jdbc:mysql://localhost:3306/userdb";private static final String USER = "root";private static final String PASSWORD = "111111";protected static Statement s = null;protected static ResultSet rs = null;protected static Connection coon = null;public static synchronized Connection getConnection() {try {Class.forName("com.mysql.jdbc.Driver");} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}try {coon = DriverManager.getConnection(URL, USER, PASSWORD);} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}return coon;}public static int executeUpdate(String sql) {int result = 0;try {s = getConnection().createStatement();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}try {result = s.executeUpdate(sql);} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}return result;}public static ResultSet executeQuery(String sql) {try {s = getConnection().createStatement();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}try {rs = s.executeQuery(sql);} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}return rs ;}public static PreparedStatement executePreparedStatement(String sql) {PreparedStatement ps = null;try {ps = getConnection().prepareStatement(sql);} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}return ps;}public static void rollback() {try {getConnection().rollback();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public static void close() {if (rs != null) {try {rs.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if (s != null) {try {s.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if (coon != null) {try {coon.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}View Code接下来是⼀个简单的注册页⾯:Register.jsp<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "/TR/html4/loose.dtd"> <html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Insert title here</title></head><body><form action = "/ch1/Servelt" method = "post"><input type ="text" value = "username" name = "username"/><input type ="password" value = "password" name = "password"/><input type = "submit" value = "提交" name = "submit"/></form></body></html>View CodeServlet.javapackage javaBeanServlet;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/*** Servlet implementation class Servelt*/@WebServlet("/Servelt")public class Servelt extends HttpServlet {private static final long serialVersionUID = 1L;/*** @see HttpServlet#HttpServlet()*/public Servelt() {super();// TODO Auto-generated constructor stub}/*** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 设置编码格式response.setCharacterEncoding("utf-8");response.setContentType("text/html;charset = utf-8");/* 实例化JavaBean 的⼀个对象 jBean ,并通过request.getParameter()获取Regist表单提交的username、password值*/JavaBean jBean = new JavaBean();jBean.setFd_username(request.getParameter("username"));jBean.setFd_password(request.getParameter("password"));jBean.register(jBean);}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stubdoGet(request, response);}}View CodeJavaBean.java/****/package javaBeanServlet;import java.sql.*;import javaBeanServlet.*;import javaBeanServlet.Unilt;/*** @author Administrator**/public class JavaBean {// 依据数据表结构声明成员变量private String fd_username ;private String fd_password ;// 为属性提供setter和getter⽅法public String getFd_username() {return fd_username;}public void setFd_username(String fd_username) {this.fd_username = fd_username;}public String getFd_password() {return fd_password;}public void setFd_password(String fd_password) {this.fd_password = fd_password;}public boolean register(JavaBean javaBean){String sql = "insert into users(username ,password) values (?,?)";int result = 0;PreparedStatement ps = Unilt.executePreparedStatement(sql);try {ps.setString(1,javaBean.fd_username);ps.setString(2,javaBean.fd_password);result = ps.executeUpdate();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}// 注册成功,返回true;注册失败,返回falseif (result > 0) {System.out.println("注册成功");return true;}else {System.out.println("注册失败");return false;}}}View Code下⾯是运⾏的效果: 新⼿上路,请多指教!。
mvc项目案例MVC项目案例介绍MVC是一种软件设计模式,它将应用程序分为三个主要组成部分:模型、视图和控制器。
这些组件协同工作,以实现应用程序的目标。
在本文中,我们将介绍一个基于MVC设计模式的项目案例。
项目背景我们的客户是一家在线书店。
他们需要一个新的网站来展示他们的产品,并允许客户购买书籍。
该网站需要具有以下功能:1. 用户可以搜索和浏览书籍。
2. 用户可以添加书籍到购物车,并进行结算。
3. 管理员可以添加、编辑和删除书籍。
4. 管理员可以查看订单历史记录。
解决方案我们决定使用MVC设计模式来开发该网站。
这意味着我们将应用程序分为三个组件:模型、视图和控制器。
模型在这个项目中,模型表示数据层。
我们将使用MySQL数据库来存储书籍信息和订单信息。
每个表都对应一个Java类,以便我们可以轻松地访问和操作数据。
例如,Book类表示书籍信息:public class Book {private int id;private String title;private String author;private double price;// getters and setters}视图在这个项目中,视图表示用户界面。
我们将使用HTML、CSS和JavaScript来创建网站的前端。
我们将使用Bootstrap框架来使网站具有响应式设计,以便在不同设备上都能良好地显示。
例如,下面是一个书籍列表的HTML代码:<div class="row"><div class="col-md-4"><h2>Book Title</h2><p>Author: Book Author</p><p>Price: $9.99</p><button class="btn btn-primary">Add to Cart</button> </div><!-- more books here --></div>控制器在这个项目中,控制器表示业务逻辑层。
MVC模式实例MVC是⼀种架构型模式,它本⾝不引⼊新的功能,只是指导我们把web应⽤结构做的更加合理,实现逻辑与页⾯相分离。
在MVC模式中,应⽤程序被划分成了模型(Model)、视图(View)和控制器(Controller)三个部分。
1:模型部分包含了应⽤程序的业务逻辑和业务数据;2:视图部分封装了应⽤程序的输出形式,也就是通常所说的页⾯或者是界⾯;3:控制器部分负责协调模型和视图,根据⽤户请求来选择要调⽤哪个模型来处理业务,以及最终由哪个视图为⽤户做出应答。
为何需要MVCServlet === Java + “html” 问题:拼字符串太⿇烦 èJsp === Html + Java脚本问题:页⾯和逻辑太过于混杂 èMVCMVC包含三个部分,功能分别如下:uModel封装应⽤状态 ------数据封装(vo)响应状态查询 ------获取数据(vo)暴露应⽤的功能 ------逻辑层APIuController接收并验证HTTP请求的数据 ------收集数据,封装数据将⽤户数据与模型的更新相映射 ------调⽤逻辑层API选择⽤于响应的视图 ------根据返回值选择下⼀个页⾯uView产⽣HTML响应 ------展⽰数据请求模型的更新 ------触发事件提供HTML form⽤于⽤户请求 ------⼈机交互MVC中的模型和视图是分离的、解耦的,同⼀个模型可以对应多种不同的视图MVC的组件关系图描述了模型、视图、控制器这三个部分的交互关系,下⾯按照交互顺序来详细描述⼀下它们的交互关系:(1)⾸先是展⽰视图给⽤户,⽤户在这个视图上进⾏操作,并填写⼀些业务数据(2)然后⽤户会点击提交按钮,来发出请求(3)视图发出的⽤户请求会到达控制器,在请求中包含了想要完成什么样的业务功能以及相关的数据。
(4)控制器会来处理⽤户请求,会把请求中的数据进⾏封装,然后选择并调⽤合适的模型,请求模型进⾏状态更新,然后选择接下来要展⽰给⽤户的视图。
MVC实例.txt跌倒了,爬起来再哭~~~低调!才是最牛B的炫耀!!不吃饱哪有力气减肥啊?真不好意思,让您贱笑了。
我能抵抗一切,除了诱惑……老子不但有车,还是自行的……实例展示:任务:人员信息的管理1.建立主页面从主页面中进入要管理的模块,比如人员模块,部门模块,岗位模块等<div align="center"><font size="20">欢迎使用本系统</font><br><br><br><a href="">人员管理</a>|<a>部门管理</a>|<a>岗位管理</a></div>2.可以将index.jsp设置为默认欢迎页面<welcome-file-list><welcome-file>index.html</welcome-file><welcome-file>index.jsp</welcome-file></welcome-file-list>3.我们需要在点击"人员模块"时,显示出人员的列表信息注意,这里,你不能直接就跳到jsp页面,为什么?jsp是视图,从mvc理论上将,jsp负责展现数据,而现在.还没有数据所以:你需要建立一个控制层,来判断什么请求,根据不同的请求,调用javabean取不同的数据这里,我们要查询,就可以在servlet中调用javabean来查询数据该servlet充当了控制层,将来,你可以在本servlet中判断其他的请求,比如增加,删除,修改等等建立servlet类EmpServlet,修改其<servlet-mapping><servlet-name>EmpServlet</servlet-name><url-pattern>/EmpServlet</url-pattern></servlet-mapping>4.在servlet中,实现具体doGet方法如果你不想区分请求的类型,只是当有请求时,就开始处理,所以,你可以在doPost方法中来调用doGetpublic void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}5.在doGet方法中,根据请求:<a href="EmpServlet?flag=1">人员管理</a>开始编写查询操作的具体处理代码得到结果集ResultSet后,数据库需要关闭如果,你直接把resultSet存到request作用域内,当rs.close时,会抛出异常:关闭的ResultSet所以:你需要在数据库关闭之前,把resultSet中的值转换到容器中,list通常是一个选择6.如何将resultSet转换到list集合中while(rs.next()){}每次循环代表一行记录循环里面的rs.getString(1);rs.getString(2);rs.getString(3);rs.getString("sal");代表一行记录中的不同的列向list集合中添加时,你需要将不同的列封装成一个完整的对象\然后将这个对象(这个对象就代表一行记录)保存到list集合中这样一来,数据库关闭就不会页面显示带来什么影响7.抽取servlet中的业务逻辑代码到模型类中,也就是业务类中将数据库部分的代码抽取到EmpBean类中的getListFromResultSet方法public List getListFromResultSet(){List list = new ArrayList();try{Class.forName("oracle.jdbc.driver.OracleDriver");String url = "jdbc:oracle:thin:@192.168.2.32:1521:ORCL";String user = "scott";String password = "tiger";Connection con =DriverManager.getConnection(url, user, password);Statement st = con.createStatement();String sql = "select * from emp";ResultSet rs = st.executeQuery(sql);while(rs.next()){Emp e = new Emp();e.setEmpno(rs.getString(1));e.setEname(rs.getString(2));e.setJob(rs.getString(3));e.setSal(rs.getString("sal"));list.add(e);}rs.close();st.close();con.close();}catch(Exception e){e.printStackTrace();}return list;}在servlet中如何调用:EmpBean empbean= new EmpBean();List list = empbean.getListFromResultSet();到此:MVC雏形就差不多了,剩下的就是把list集合交给jsp去显示就可以了当然,你可以继续改造你的代码8.下一步,我们可以对EmpBean中的数据库连接和释放的代码抽取到一个独立的类中来以下是ConnectionMgr类中的方法定义:public static Connection getConnection() throws Exception{Class.forName("oracle.jdbc.driver.OracleDriver");String url = "jdbc:oracle:thin:@192.168.2.32:1521:ORCL";String user = "scott";String password = "tiger";Connection con =DriverManager.getConnection(url, user, password);return con;}调用方式:con = ConnectionMgr.getConnection();ConnectionMgr.closeResourse(con, st, rs);9.现在,你可以定义要执行显示工作的jsp页面了首先,我们需要在页面获取request作用域内的list对象然后使用循环取出list找的每一条记录,并显示<!-- 请注意:这里我们需要循环显示所有的记录信息 --><%//首先应该得到request作用域内的list对象List list = (List)request.getAttribute("emplist");for(int i=0;i<list.size();i++){Emp e = (Emp)list.get(i);%><tr><td><%=e.getEmpno() %></td><td><%=e.getEname() %></td><td><%=e.getJob()%></td><td><%=e.getSal()%></td><td>删除</td></tr><%} %>10,验证我们的成果注意:数据库驱动包必须要加入到lib目录下11.使用DAO模式来抽取EmpBean类中数据库交互操作DAO:Data Access Object数据访问对象所谓DAO,其实就是负责数据库交互(CRUD)的代码封装到一个独立的类中,而这个类有一个叫法:DAO类现在,我们需要根据DAO模式,把empbean类中的数据库交互部分的代码抽取出来,放到EmpDao类中public List findAllEmps(String sql){try{con = ConnectionMgr.getConnection();st = con.createStatement();List<Emp> list = new ArrayList<Emp>();rs = st.executeQuery(sql);while(rs.next()){Emp e = new Emp();e.setEmpno(rs.getString(1));e.setEname(rs.getString(2));e.setJob(rs.getString(3));e.setSal(rs.getString("sal"));list.add(e);}return list;}catch(Exception e){e.printStackTrace();return null;}finally{ConnectionMgr.closeResourse(con, st, rs);}}抽取完成后,empbean中代码量被减少/*** javabean类* 该类负责具体的业务逻辑处理* 这些逻辑处理不包括数据库访问操作* 因为,我们习惯上会把数据访问操作独立出来* 独立到一个DAO类中* 在本系统中,EmpDao承担了人员管理模块的DAO类* 在EmpDao中,我们可以把和数据库的增加,修改,删除,查询等代码集中到该类中* 至于EmpBean应该用来处理除数据库访问操作以外的业务逻辑处理** 这里包括:数据校验,输入验证,其他逻辑判断* @author dfbz**/public class EmpBean {public List getListFromResultSet() {EmpDao empdao = new EmpDao();String sql = "select * from emp";List list = empdao.findAllEmps(sql);return list;}}后续还有很多操作,比如增加,修改等条件的判断,或验证,我们需要把这些代码放到这个EmpBean类中,因为EmpBean类就是业务处理类,至于Dao类,只是跟数据库有关联的代码,主要是指:增加,修改,删除,查询等等.以上的实例,就是MVC+DAO实现的结果本文档结束!。
基于mvc的项目实例基于MVC的项目实例简介:MVC(Model-View-Controller)是一种软件架构模式,常被用于开发Web应用程序。
它将应用程序分为三个主要部分:模型(Model)、视图(View)和控制器(Controller)。
本文将以一个基于MVC的项目实例为例,详细介绍它们之间的关系和各自的职责。
项目背景:假设我们正在开发一个在线图书商城的网站,用户可以浏览图书、添加到购物车并进行购买。
我们希望通过使用MVC模式来使项目的开发更加结构化和可维护。
1. 模型(Model):模型是应用程序的核心,负责处理数据和业务逻辑。
在我们的项目中,模型将包含与图书相关的数据和操作,比如图书的名称、作者、价格等。
它还定义了一些方法,如添加到购物车、从购物车中移除等。
模型应该独立于视图和控制器,以便于在不影响其他部分的情况下进行修改和维护。
2. 视图(View):视图是用户界面的表示,负责展示数据和与用户进行交互。
在我们的项目中,视图将包含图书的列表、购物车的内容等界面元素。
视图应该尽量简洁明了,使用户能够方便地浏览和操作。
视图并不直接处理数据,而是通过控制器来与模型进行交互。
3. 控制器(Controller):控制器是模型和视图之间的桥梁,负责接收用户的输入并根据输入来更新模型和视图。
在我们的项目中,控制器将接收用户的购买请求、添加到购物车的请求等,并将这些请求传递给模型进行处理。
控制器还负责将模型的数据传递给视图进行展示。
通过控制器,模型和视图能够实现解耦,使得两者可以独立地进行修改和扩展。
4. MVC之间的关系:模型、视图和控制器之间存在着明确的关系和交互方式。
当用户在视图上进行操作时,比如点击购买按钮,视图将向控制器发送一个事件。
控制器接收到事件后,将根据事件的类型调用模型的相应方法进行处理,比如将图书添加到购物车中。
处理完后,控制器将更新模型的数据,并将更新后的数据传递给视图进行展示。
⼀个简单的.NETMVC实例久闻MVC的⼤名,只是⼀直没有去研究过。
过去⾃⼰⽤的最多的还是.NET WebForm,⽐较习惯三层架构。
由于最近公司将会使⽤到MVC框架做⼀些项⽬,所以⾃⼰也开始接触和学习。
看了⼀些教程,⼤体搞清楚了M-V-C的⼤致意思,⼤致了解了下这个架构,但不得不承认有些具体的细节地⽅和WebFrm还是有差别的,这⾥只是简单做⼀个实例,让它跑起来。
看了⼀些实例,多数都是⽤的是LinqToSql,这⾥⽤的是ADO的。
感觉这样更顺⼿些,呵呵。
由于之前做过PHP程序,所以对于前台页⾯的展⽰⽅式还是容易理解的。
只是MVC框架⾥,有些默认的路由规则(当然是可以⾃定义的),这个规则⽐较特别好了,直接来个实例吧!⾸先,新建⼀个空的MVC项⽬,如图,这⾥是MVC 2.0版这⾥命名为"FirstMvc" ,⾃动添加好了项⽬的⽬录结构在"Controller"⽬录下⾯新建⼀个控制器,命名为"MemberController.cs"同时在"View"⽬录下添加相应的视图,这⾥添加⼀个Index数据逻辑的操作基本上是在控制器⾥⾯完成的,这⾥就是在MemberController.cs实现。
为了更加真实,我们也在Model⽬录下⾯构建⼀个实体类,命名为Member.cs好了,准备⼯作做好,就开始吧前台——View<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<dynamic>" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="/1999/xhtml"><head runat="server"><style type="text/css">table{width: 50%;border-top: 1px solid #e5eff8;border-right: 1px solid #e5eff8;margin: 1em auto;border-collapse: collapse;}td{color: #678197;border-bottom: 1px solid #e5eff8;border-left: 1px solid #e5eff8;padding: .3em 1em;text-align: center;}</style><script src="/Scripts/jquery-1.4.1.min.js" type="text/javascript"></script><title>Index</title><script language="javascript" type="text/javascript">$(document).ready(function () {$("#Button1").click(function () {var msg = "您好,⽤户" + $("#loginName").val() + ",\n"+ "请记好您的密码:" + $("#passWord").val() + ",\n"+ "你的⽤户编号为:" + $("#namelist").val();alert(msg);})})</script></head><body><div><h2>完善下⾯的信息</h2><table id="MemberArea"><thead><tr><td colspan="2"><h3>⽤户注册</h3></td></tr></thead><tbody><tr><td>登录名</td><td><%=Html.TextBox("loginName")%></td></tr><tr><td>⽤户名</td><td><%=Html.TextBox("userName")%></td></tr><tr><td>密码</td><td><%=Html.Password("passWord")%></td></tr><tr><td>真实姓名</td><td><%=Html.DropDownList("namelist")%></td></tr><tr><td colspan="2" align="center"><br /><input type="button" id="Button1" value="确定"/></td></tr></tbody></table></div></body></html>后台——Controllerusing System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Mvc;using System.Data;using System.Data.SqlClient;using System.Configuration;using FirstMvc.Models;//注意添加引⽤namespace FirstMvc.Controllers{///<summary>///第⼀个MVC架构实例///最近接触MVC,看到⼤多数教程采⽤/// LinqToSql,这⾥写⼀个ADO⽅式的/// Author:LuckyHu/// Date:2012-03-30///</summary>public class MemberController : Controller{//// GET: /Menber///定义⼀些全局变量string connStr = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;SqlConnection conn = null;SqlCommand cmd = null;SqlDataReader sdr = null;public ActionResult Index(){Models.Member member = new Models.Member();sdr = GetData();int uid = 0;string name = "";IDictionary<int, string> nameList = new Dictionary<int, string>();if (conn.State == ConnectionState.Closed){conn.Open();}try{while (sdr.Read()){uid = int.Parse(sdr["uid"].ToString());name = sdr["name"].ToString();nameList.Add(uid, name);}}catch (SqlException ex){Response.Write("<script> var ex = " + ex.ToString() + "; alert(ex);</script>");}finally{if (conn.State == ConnectionState.Open){conn.Close();}}SelectList selectNameList = new SelectList(nameList, "Key", "Value");//构造⼀个下拉列表的键值对 ViewData["namelist"] = selectNameList;return View();}///<summary>///构造测试数据///</summary>///<returns></returns>public SqlDataReader GetData(){conn = new SqlConnection(connStr);string sql = "select * from users";if (conn.State == ConnectionState.Closed){conn.Open();}try{cmd = new SqlCommand(sql, conn);sdr = cmd.ExecuteReader();}catch (SqlException ex){Response.Write("<script> var ex = " + ex.ToString() + "; alert(ex);</script>"); }return sdr;}}}实体层——ModelView Codeusing System;using System.Collections.Generic;using System.Linq;using System.Web;namespace FirstMvc.Models{public class Member{//Fieldsprivate int uid_ = 0;private string name_ = "";private int jib_ = 0;private string email_ = "";private string qq_ = "";private DateTime rdage_;private DateTime ndate_;//Propertiespublic int Uid_{get { return uid_; }set { uid_ = value; }}public string Name_{get { return name_; }set { name_ = value; }}public int Jib_{get { return jib_; }set { jib_ = value; }}public DateTime Rdage_{get { return rdage_; }set { rdage_ = value; }}public string Email_{get { return email_; }set { email_ = value; }}public string Qq_{get { return qq_; }set { qq_ = value; }}public DateTime Ndate_{get { return ndate_; }set { ndate_ = value; }}//Construcutionpublic Member(){}//Functionpublic Member(int uid, string name, int jib, string email, string qq, DateTime rdage, DateTime ndate){this.uid_ = uid;this.jib_ = jib;this.email_ = email;this.qq_ = qq;this.rdage_ = rdage;this.ndate_ = ndate;}}}这⾥数据库访问使⽤的传统的ADO的,很多教程使⽤的LinqToSql的。
简单的SpringMVC经典案例主题:构建⼀个基于SpringMVC的HelloWord Web 项⽬⽬的:快速体验什么是SpringMVC⽅案: 1、创建⼯程,命名:SpringMVC 2、导包 3、在SRC下添加spring-mvc.xml配置⽂件 (注意:名字可以随便取,最好就是看上就知道是什么)<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:mvc="/schema/mvc" xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context" xmlns:tx="/schema/tx"xmlns:aop="/schema/aop"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans-4.0.xsd/schema/context/schema/context/spring-context-4.0.xsd/schema/tx/schema/tx/spring-tx-4.0.xsd/schema/aop/schema/aop/spring-aop-4.0.xsd/schema/mvc/schema/mvc/spring-mvc.xsd"></beans> 4、在web.xml配置封装在Spring⾥⾯的servlet--DispatcherServlet前端控制器,并指定spring-mvc.xml⽂件<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="/2001/XMLSchema-instance" xmlns="/xml/ns/javaee" xsi:schemaLocation="/xml/ns/javaee /xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" <display-name>SpringMVC</display-name><servlet><servlet-name>SpringMVC</servlet-name><!-- DispathcherServlet 前端控制器 --><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><!-- 变量名随便取 --><param-name>contextConfigLocation</param-name><!-- 指定SpringMVC配置⽂件名 --><param-value>classpath:spring-mvc.xml</param-value></init-param><!-- load-on-startup等于1,则表⽰容器启动就实例化此Servlet --><load-on-startup>1</load-on-startup></servlet><servlet-mapping><!-- 要与上⾯Servlet的名字对应 --><servlet-name>SpringMVC</servlet-name><!-- ⽤来匹配客户端请求 --><url-pattern>*.action</url-pattern></servlet-mapping></web-app> 5、在spring-mvc.xml中配置【HandlerMapping组件】------------------作⽤------>设置客户端请求与Controller 【InternalResourceViewResolver组件】--作⽤------>设置视图配置【HelloController】------------------------作⽤------->测试请求处理<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:mvc="/schema/mvc" xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context" xmlns:tx="/schema/tx"xmlns:aop="/schema/aop"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans-4.0.xsd/schema/context/schema/context/spring-context-4.0.xsd/schema/tx/schema/tx/spring-tx-4.0.xsd/schema/aop/schema/aop/spring-aop-4.0.xsd/schema/mvc/schema/mvc/spring-mvc.xsd"><!-- 定义客户端请求映射关系 --><!-- HeanlerMapping是Spring核⼼组件之⼀ --><bean id="headlerMapping"class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"><property name="mappings"><map><entry key="/hello.action"><value>helloController</value></entry></map></property></bean><!-- 增加HelloController的Bean --><bean id="helloController" class="controller.HelloController"/><!-- 定义视图解释器(Spring核⼼组件之⼀) --><bean id="viewResolver"class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="WEB-INF/jsp/"/><property name="suffix" value=".jsp"/></bean></beans> 6、编写HelloController【注意:需要实现Controller接⼝】package controller;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.ModelAndView;import org.springframework.web.servlet.mvc.Controller;public class HelloController implements Controller{@Overridepublic ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception { ModelAndView mv = new ModelAndView("hello");System.out.println("处理hello.action请求");return mv;}} 7、在WEB-INF⽂件夹下新增"jsp"⽂件夹,并添加hello.jsp<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "/TR/html4/loose.dtd"> <html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body>欢迎来到Spring的世界!</body></html>。
基于mvc的博客项目实例
一个基于MVC(Model-View-Controller)架构的博客项目实例可以包括以下几个方面:
1. 模型(Model),在这个博客项目中,模型负责处理数据和业务逻辑。
可以创建一个名为“Post”的模型来表示博客文章,包括标题、内容、作者、发布日期等属性。
另外,可以创建一个“User”模型来表示博客的用户,包括用户名、密码、电子邮件等属性。
模型还可以包括与数据库的交互,比如使用ORM(对象关系映射)来映射数据库表和模型类。
2. 视图(View),视图负责展示数据给用户,并接收用户的输入。
在博客项目中,可以创建多个视图来展示不同的页面,比如文章列表页面、文章详情页面、用户登录页面、用户注册页面等。
视图通常使用HTML、CSS和JavaScript来构建,以及模板引擎来动态生成页面内容。
3. 控制器(Controller),控制器负责处理用户的输入,并根据输入调用相应的模型和视图来完成用户请求。
在博客项目中,可以创建一个名为“PostController”的控制器来处理与博客文章相
关的操作,比如创建文章、编辑文章、删除文章等。
另外,可以创
建一个“UserController”控制器来处理用户登录、注册、注销等
操作。
4. 路由(Router),路由负责将用户的请求映射到相应的控制
器和动作上。
在博客项目中,可以使用路由来定义不同的URL与控
制器动作的映射关系,比如将“/post/new”映射到“PostController”的“new”动作来创建新文章。
5. 数据库,在博客项目中,可以使用关系型数据库(比如MySQL、PostgreSQL)来存储博客文章、用户信息等数据。
可以使用ORM来简化数据库操作,并确保数据的一致性和完整性。
总的来说,一个基于MVC架构的博客项目实例将包括模型、视图、控制器、路由和数据库等组件,它们共同协作来实现一个完整
的博客系统,实现用户的注册、登录、发表文章、浏览文章等功能。
希望这个回答能够帮助你更好地理解基于MVC架构的博客项目实例。