LINUX DOTNET      Linux DotNET 中文社区

Linux .NET编程与应用技术之专业网站:www.linuxdot.net !     返回首页    
   
[楼主] 不用ASP.NET MVC框架照样可以轻松实现MVC功能

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下载地址:linux.j66.net 或 www.j66.net

作者:j66   发布时间:09年06月01日   可选操作:删除 回复

[1楼] 回复:不用ASP.NET 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,设计非常自由,布置非常灵活。


作者:j66.net   发布时间:09年06月01日   可选操作:删除 回复

[2楼] 回复:不用ASP.NET MVC框架照样可以轻松实现MVC功能

这种实现方式既简单又灵活,无需组件支持,从web系统层实现,效率肯定比使用XX框架高得多,超爽,不知道在windows下能不能也这么做?

作者:匿名   发布时间:09年07月02日   可选操作:删除 回复

[3楼] 回复:不用ASP.NET MVC框架照样可以轻松实现MVC功能

Jexus 2.x版是完全跨平台的,因此可以在windows下实现这个功能,而3.x版现在只有for linux的版本(主要为了更好地利用linux自身的优势),既然是for linux,就不能在windows下实现这个功能了。

作者:mononet   发布时间:09年07月02日   可选操作:删除 回复

[4楼] 回复:不用ASP.NET MVC框架照样可以轻松实现MVC功能

难道MVC仅仅就是路由吗? 误区

作者:jack   发布时间:16年05月20日   可选操作:删除 回复

[5楼] 回复:不用ASP.NET MVC框架照样可以轻松实现MVC功能

楼上,楼主已经说了,这是“非标准MVC”,并非真正的MVC。

作者:匿名   发布时间:16年05月22日   可选操作:删除 回复

[6楼] 回复:不用ASP.NET MVC框架照样可以轻松实现MVC功能

楼主写的是“非常标准”

作者:shunjiey   发布时间:16年07月06日   可选操作:删除 回复

 
   
   

留言回复:
标题: * 标题必填
作者:   * 请填上你的名字  
操作键:   * 填入几个字母表示是您写的,便于进一步操作
发言内容:
 
发贴者须知:
1、您无需注册即可发贴,但是,贴子内容必须在法律法规和社会公德所允许的范围内;
2、本站专注IT技术,谢绝包括政治、社会、情感等任何与IT技术无关的贴子在本站发表;
3、本站保留对任何贴子进行删除、禁用、更改、举报、追究等所有权利;
 
今天是: 周七  周一  周二  周四  周三  周五  周六