不用asp.net MVC框架照样可以轻松实现MVC功能
j66 2009-06-01 10:15:09 Jexus web server既支持ASP.NET,也支持URL Rewrite,是一款跨平台的WEB服务器程序。利用Jexus强大的URL重写功能,无需ASP.NET MVC 框架就能轻松实现非常标准的MVC功能,而且更简捷、更自由。
示例如下:
假设:
地址“http://xxx.xx/m/”是访问首页
地址“http://xxx.xx/m/list”是访问商品列表页
地址“http://xxx.xx/m/list/car”是访问列表页中car这个子项目
物理路径:本例中所有文件放在网站根目录的mvc文件夹中。
具体实现过程如下:
一、配置网站
在site.conf配置文件的某个子站(设站名为abc)中添加:
#首页的“路由”
abc.rewrite=^/m/$ /mvc/index.aspx
#MVC“标准”路径的路由(全部指向/mvc/controller.aspx)
abc.rewrite=^/m/([\-/0-9a-zA-Z]{3,100}[^/])$ /mvc/controller.aspx?url=$1
#图片等静态文件的“路由”
abc.rewrite=^/m/images/(.+?)$ /mvc/images/$1
abc.rewrite=^/m/(.+?)/images/(.+?)$ /mvc/images/$2
二、“控制器”设计
文件名为:controller.aspx(当然也可以是其它文件名,只要与URL Rewrite所定义的文件名相同就行),放到mvc文件夹中
文件内容如下:
<%@ Import Namespace="System" %>
<%@ Import Namespace="System.Web" %>
<%
//分解MVC RUL路径
string urlPath = Request.QueryString["url"];
if (String.IsNullOrEmpty(urlPath) || urlPath == "")
{
Response.Write("Url Error!");
Response.End();
}
string[] workList = urlPath.Split(new char[] { '/' });
//根据URL路径的实际内容,执行对应的操作
if (workList.Length == 1)
{
switch (workList[0].ToLower())
{
case "list":
Server.Execute("list.aspx");
break;
default:
Server.Execute("index.aspx");
break;
}
}
if (workList.Length == 2)
{
string work = workList[0].ToLower();
string qString = workList[1];
switch (work)
{
case "list": // 如:/list/car
Server.Execute("list.aspx?id=" + qString);
break;
/*.......*/
default: //其它的
Server.Execute("index.aspx");
break;
}
}
Response.End();
%>
三、针对“控制器”的中自定义的内容,建立“index.aspx”和“list.aspx”,全部放到mvc目录中。
index.aspx文件内容如下:
<%@ Page Language="C#" %>
<html>
<head>
<meta http-equiv="Content-Language" content="zh-cn" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>首页</title>
</head>
<body>
<p>这是首页</p>
<hr />
<p><a target="_blank" href="list">列表页</a></p>
<p><a target="_blank" href="list/car">列表页加参数</a></p>
</body>
</html>
list.aspx文件内容如下:
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Web" %>
<html>
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>列表页</title>
</head>
<body>
<p>这是列表页</p>
<hr />
<p>
<%
string q = Request.QueryString["id"];
Response.Write("得到的参数是:" + q);
%>
</p>
</body>
</html>
重启jexus,访问一下,试试。
怎么样,的的确确是非常标准的MVC吧,而且,在设计上一点难度也没有,还有比它更简单更自由的MVC框架吗!
用Jexus实现MVC的最大优点如下:
1,对ASP.NET版本没有特殊要求,asp.net 1.1/2.0/3.0/3.5都可以用;
2,无需安装和学习asp.net mvc框架,不必改变asp.net编程习惯;
3,已经设计好的asp.net网站,仅需加一个“控制器”就基本上可以实现MVC格式的访问,除了对超链接等等内容作一些小的修改之外,根本不需要重新设计整个网站;
4,不用MVC名字空间和与之相关的程序集,MVC路由等功能在web服务器层面直接实现,因此,这种MVC实现方式较之其它实现方式的执行效率更高。
5,可以在网站设置中禁止用户访问真实的网站路径;
6,设计非常自由,布置非常灵活。
注:Jexus下载地址:linux.j66.net 或 www.j66.net